다른 문제를 풀던 중,명령을 만났다,
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
나는 더 많은 것을 알고 싶다. 그래서 실행 man xargs
하고 다음과 같은 결과를 얻습니다.
XARGS(1) General Commands Manual XARGS(1)
NAME
xargs - build and execute command lines from standard input
SYNOPSIS
xargs [-0prtx] [-E eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
[-d delimiter] [--delimiter delimiter] [-I replace-str] [-i[replace-
str]] [--replace[=replace-str]] [-l[max-lines]] [-L max-lines]
[--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s max-
chars] [--max-chars=max-chars] [-P max-procs] [--max-procs=max-procs]
[--interactive] [--verbose] [--exit] [--no-run-if-empty]
[--arg-file=file] [--show-limits] [--version] [--help] [command
[initial-arguments]]
DESCRIPTION
This manual page documents the GNU version of xargs...
나는 Linux 프로그램을 더 잘 이해하기 위해 문서를 사용하려고 노력하고 있지만 "요약" 섹션은 새로운 사용자에게 약간 위협적입니다. 실제로 또는 에 비해 man locate
횡설수설처럼 보입니다 man free
.
지금까지 대괄호는 선택 사항을 나타내고 중첩 괄호는 선택 가능한 옵션을 나타냅니다. 하지만 유효한 명령을 어떻게 유도합니까?
나는 여기서 xargs에 대한 도움을 찾고 있지 않습니다. 복잡한 명령을 이해하기 위해 매뉴얼 페이지를 해석하는 데 도움을 찾고 있습니다. 나는 더 이상 Linux 명령을 배우기 위한 첫 번째 선택으로 Google 색인이 생성된 웹 블로그와 다른 사람들의 개인적인 도움에 의존하고 싶지 않습니다.
답변1
글쎄, 이것이 제가 개인적으로 매뉴얼 페이지를 읽는 방법입니다.
매뉴얼 페이지
이 명령을 사용하여 맨페이지를 열면 출력은 또는 명령 또는 호출기(맨페이지저)에 설정될 다른 명령을 man
통해 표시/렌더링됩니다 .less
more
Linux를 사용하고 있다면 이미 사용하도록 구성된 man 인프라를 사용하고 있을 것입니다 /usr/bin/less -is
(최소 배포판을 설치하지 않은 경우).man(1)
, 옵션 부분을 설명하십시오.
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
MANPAGER
FreeBSD 및 OpenBSD에서는 주로 사용되는 환경 변수를 편집하면 more
검색 및 텍스트 강조 표시와 같은 일부 기능이 누락될 수 있습니다.
more
차이점이 무엇인지, 차이점이 무엇인지에 대한 less
좋은 답변이 있습니다.most
여기(사용되지 않음 most
). 맨페이지를 탐색할 때 또는 ( 바인딩 도 사용할 수 있음 )을 Space사용하여 한 줄씩 앞뒤로 스크롤하는 기능은 필수적입니다 . 사용 가능한 명령의 요약을 보려면 사용 중에 누르십시오.↓↑vi
jkhless
그렇기 때문에 less
맨 페이지로 사용하는 것이 좋습니다. less
이 답변에는 몇 가지 기본 기능이 사용됩니다.
명령의 형식은 무엇입니까?
실용적인 관례: 오픈 그룹 기본 사양 7호 - IEEE Std 1003.1, 2013 에디션. 맨페이지를 이해하기 전에 이 링크를 방문해야 합니다. 이 온라인 참조는 표준 유틸리티의 매개변수 구문을 설명하고 유틸리티에서 처리하는 매개변수를 설명하기 위해 POSIX.1-2017에서 사용되는 용어를 소개합니다. 이는 또한 매개변수, 매개변수, 매개변수 옵션 등과 같은 단어의 진정한 의미를 간접적으로 알려줄 것입니다.
유틸리티 규칙의 표기법을 이해하고 나면 맨페이지 제목이 덜 낯설게 느껴질 것입니다.
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
당신이하고 싶은 일을 기억하십시오.
당신에 대해 조사 할 때는 xargs
목적을 가지고 하는 거죠, 그렇죠? 표준 출력을 읽고 해당 출력을 기반으로 명령을 실행하는 특별한 요구 사항이 있습니다.
그런데 어떤 명령을 원하는지 모를 때는 어떻게 해야 할까요?
man -k
또는 apropos
(동등함)을 사용하세요 . 파일을 찾는 방법을 모르는 경우: man -k file | grep search
설명을 읽고 귀하의 필요에 더 적합한 제품을 찾으십시오. 예:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
Apropos는 기본적으로 정규식을 사용합니다( man apropos
설명을 읽고 그 기능을 알아보세요 -r
). 이 예에서는 설명이 "report"로 시작하는 모든 맨페이지를 찾고 있습니다.
xargs
가능한 옵션으로 표준 입력/출력 처리를 읽는 것과 관련된 정보를 찾으려면 다음을 수행하십시오 .
man -k command| grep input
xargs (1) - build and execute command lines from standard input
DESCRIPTION
시작하기 전에 꼭 읽어주세요
잠시 시간을 내어 지침을 읽어 보십시오. 이 명령에 대한 설명을 읽으면 xargs
다음 내용을 배울 수 있습니다.
xargs
STDIN에서 읽고 필요한 명령을 실행합니다. 이는 또한 표준 입력이 작동하는 방식과 파이프를 통해 명령을 연결하여 조작하는 방법을 이해해야 함을 의미합니다.- 기본 동작은 처럼 행동하는 것입니다
/bin/echo
. 이는 약간의 힌트를 제공합니다. 둘 이상을 연결해야 하는 경우xargs
인쇄하기 위해 echo를 사용할 필요가 없습니다. - 또한 Unix 파일 이름에는 문제가 될 수 있는 공백과 개행 문자가 포함될 수 있으며 이 매개변수는
-0
널 문자 구분 기호를 사용하여 내용이 늘어나는 것을 방지하는 방법이라는 것도 배웠습니다. 설명에서는 입력으로 사용하는 명령이 이 기능도 지원해야 하며 GNU가find
이를 지원한다고 경고합니다. 엄청난. 우리는 find 와 를 사용합니다xargs
. xargs
종료 상태 255에 도달하면 중지됩니다.
일부 설명은 매우 간단합니다. 일반적으로 소프트웨어가 매우 간단한 방식으로 작동하기 때문입니다.맨페이지의 이 부분을 건너뛸 생각조차 하지 마세요.;)
그 외 주의할 점...
를 사용하여 파일을 검색할 수 있다는 것을 알고 있습니다 find
. 옵션이 너무 많아서 그냥 보기만 해도 SYNOPSIS
압도될 것입니다. 이것은 빙산의 일각에 불과합니다. NAME
, SYNOPSIS
및 를 제외하면 DESCRIPTION
다음과 같은 부분이 있습니다.
AUTHORS
: 명령을 만들거나 만드는 데 도움을 준 사람입니다.BUGS
: 알려진 모든 결함을 나열합니다. 단지 제한을 가할 수도 있습니다.ENVIRONMENT
: 사용될 명령이나 변수에 의해 영향을 받을 수 있는 쉘의 측면입니다.EXAMPLES
또는NOTES
: 설명이 필요합니다.REPORTING BUGS
: 이 도구나 설명서에서 오류를 발견한 경우 누구에게 연락해야 합니까?COPYRIGHT
:이 소프트웨어 및 면책 조항의 작성자입니다. 그것은 소프트웨어 자체의 라이센스에 관한 것입니다.SEE ALSO
: 이 명령과 관련되어 있고 다른 섹션에 배치할 수 없는 기타 명령, 도구 또는 작업 측면입니다.
예제/설명 섹션에서 원하는 도구에 대한 흥미로운 정보를 찾을 가능성이 높습니다.
예
다음 단계에서는 find
개념이 xargs
설명보다 "간단"하므로 예제를 사용하겠습니다. 하나의 명령은 파일을 찾고 다른 명령은 stdin의 파이프 실행 및 기타 명령 출력을 처리합니다. 우리가 가정하자아무것도 모른다(또는 아주 조금) 이 명령에 대해.
.jpg
특정한 문제가 있습니다. ftp 서버 폴더 내에서 확장자가 500KiB(KiB = 1024바이트, 흔히 kibibyte라고 함) 이상인 모든 파일을 찾아야 합니다 .
먼저 매뉴얼을 엽니다: man find
. 날씬해 지세요 SYNOPSIS
. 매뉴얼에서 검색해 봅시다: /원하는 단어( size
)를 입력하세요. -size
특정 크기로 계산된 많은 수의 항목을 색인화합니다 . 갇힌. 주어진 크기보다 "보다 큼" 또는 "보다 작음"을 사용하여 검색하는 방법을 잘 모르겠는데 그 사람이 나에게 이것을 보여주지 않았습니다.
그것을 시험해보고 그것을 클릭하여 발견된 다음 항목을 검색해 봅시다 n. 좋아요 몇 가지 흥미로운 점을 발견했습니다. . 어쩌면 이 예는 100MB 이상의 파일을 찾을 수 있음 find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
을 알려줍니다 . -size +100M
어떻게 확인할 수 있나요? 맨페이지 헤드로 이동하여 다른 단어를 검색하세요.
단어를 다시 시도해 보겠습니다 greater
. 버튼을 누르면 g맨페이지의 선두로 이동합니다. /greater
, 첫 번째 항목은 다음과 같습니다.
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
좋은 것 같아요. 매뉴얼의 이 부분이 우리의 의심을 확인해 주는 것 같습니다. 그러나 이는 파일 크기에만 적용되는 것은 아닙니다. 이 맨페이지에서 찾을 수 있는 모든 항목 에서 작동합니다 n
("숫자 매개변수는 다음과 같이 지정할 수 있습니다"라는 문구에서 알 수 있음).
좋아요 이름으로 필터링하는 방법을 찾아보겠습니다 g /insensitive
. 왜? 민감하지 않나요? 젠장? 우리는 "다른 운영 체제"를 사용하는 사람들 이 확장자가 .jpg
, . 이는 우리를 다음으로 이끌 것입니다:.JPG
.JpG
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
그러나 검색한 후에는 lname
이것이 기호 링크만 검색한다는 것을 알게 됩니다. 우리는 실제 문서를 원합니다. 다음 항목:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
엄청난. 대소문자를 구분하지 않는 매개변수 버전을 -name
보기 위해 읽을 필요도 없습니다 . -iname
다음 명령을 조합해 보겠습니다.
주문하다: find /ftp/dir/ -size +500k -iname "*.jpg"
?
여기서 암시적인 의미는 와일드카드가 "단일 위치의 모든 문자"를 나타내고 *
"0개 이상의 모든 문자"에 대한 지식을 나타낸다는 것입니다. 이 -name
매개변수는 이 지식에 대한 요약을 제공합니다.
모든 명령에 대한 팁
다양한 옵션, 니모닉 및 "구문 스타일"이 모든 명령 전체에 분산되어 있어 맨페이지를 열지 않고도 시간을 벌 수 있습니다. 이는 연습을 통해 학습되며 가장 일반적인 것은 다음과 같습니다.
- 일반적으로 말해서,
-v
길다는 뜻입니다.-vvv
일부 소프트웨어에서는 "매우, 매우 상세한" 변형입니다. - POSIX 표준에 따라 대시 인수는 일반적으로 쌓일 수 있습니다. 예:
tar -xzvf
,cp -Rv
. - 일반적으로 말하자면
-R
및/또는-r
재귀를 의미합니다. - 거의 모든 명령에는 이 옵션에 대한 간단한 도움말이 있습니다
--help
. --version
소프트웨어 버전을 표시합니다.-p
, 복사 또는 이동 유틸리티에서 "권한 유지"를 의미합니다.-y
대부분의 경우 "예" 또는 "확인 없이 계속"을 의미합니다.
위의 내용이 항상 사실인 것은 아닙니다. 예를 들어 -r
스위치는 다음을 나타낼 수 있습니다.아주 다른 것들다른 소프트웨어에 대해. 명령이 위험할 수 있는 경우를 항상 확인하고 확인하는 것이 좋지만 이는 일반적인 기본값입니다.
명령의 기본값입니다.
이 답변의 호출기 섹션에서 이것이 less -is
호출기임을 알 수 있습니다 man
. 명령의 기본 동작이 항상 별도의 섹션이나 맨페이지 상단에 표시되는 것은 아닙니다.
기본값을 찾으려면 옵션을 읽어야 하며, 운이 좋다면 입력하면 /pager
해당 정보를 찾을 수 있습니다. 이를 위해서는 또한 많은 맨 페이지를 읽은 후에만 얻을 수 있는 페이저(맨 페이지를 스크롤하는 소프트웨어)의 개념을 이해해야 합니다.
이것이 왜 중요합니까? 읽는 동안 스크롤 및 색상 동작의 차이를 발견하면 이를 통해 인식이 가능해집니다.man(1)
Linux( less -is
호출기) 또는 FreeBSD 의 경우man(1)
예를 들어.
문법은 어떻습니까 SYNOPSIS
?
명령을 실행하는 데 필요한 모든 정보를 확보한 후에는 옵션, 옵션 매개변수 및 피연산자를 인라인으로 결합하여 작업을 완료할 수 있습니다. 개념 개요:
- 옵션은 명령의 동작을 지시하는 스위치입니다. "이 작업을 수행" "이러지 마세요" 또는"이 방법". 종종 스위치라고 불립니다.
- 대부분의 경우 옵션이 바이너리(on/off)가 아닌 경우(예:
-t
마운트할 때) 파일 시스템 유형(-t iso9660
,-t ext2
)을 지정하는 옵션 매개변수가 사용됩니다. "눈을 감고 이렇게 해보세요" 또는"동물에게 먹이를 주되 사자에게만 먹이세요”. 인수라고도 합니다. - 피연산자는 명령이 수행할 작업입니다. 를 사용하는 경우
cat file.txt
피연산자는 현재 디렉터리의 파일이며 해당 내용이 위에 표시됩니다STDOUT
.ls
피연산자가 선택 사항인 명령입니다. 피연산자 뒤의 세 점은cat
동시에 여러 피연산자(파일)에 대해 작업을 수행할 수 있음을 암시적으로 나타냅니다. 일부 명령에는 사용할 피연산자 유형이 이미 설정되어 있음을 알 수 있습니다. 예:cat [OPTION] [FILE]...
관련 내용 소개:
이 접근 방식이 작동하지 않는 경우는 언제입니까?
- 예제가 없는 맨페이지
- 옵션은 매뉴얼 페이지에 간략한 설명이 있습니다.
- 맨페이지에서 일반 키워드(예
and
: ,to
, ) 를 사용하는 경우for
- 맨페이지가 설치되지 않았습니다. 이는 명백해 보일 수 있지만
lftp
설치(및 매뉴얼 페이지)가 없으면 이 옵션이 더 복잡한 FTP 클라이언트에 적합한 옵션인지 알 수 없습니다.man -k ftp
어떤 경우에는 예제가 너무 간단해서 테스트하기 위해 몇 가지 명령을 실행해야 할 수도 있고, 최악의 경우 Google에서 검색해야 할 수도 있습니다.
기타: 프로그래밍 언어 및 해당 모듈:
perl
프로그래밍하거나 스크립트를 작성하는 경우 일부 언어에는 ( perldocs
), Python ( ) 등과 같은 자체 매뉴얼 페이지 시스템이 있다는 점을 기억하십시오 pydocs
. 여기에는 메소드/함수, 변수, 동작 및 모듈에 대한 기타 중요한 정보에 대한 특정 정보가 있습니다. 귀하가 사용하고 배우려는 정보가 보관됩니다. 다음을 사용하여 읽지 않은 IMAP 이메일을 다운로드하는 스크립트를 만들 때 이 방법이 도움이 되었습니다.perl Mail::IMAPClient
기준 치수.
man -k
이러한 특정 맨페이지는 온라인을 사용하거나 검색하여 찾아야 합니다. 예:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
...여기에는 일반 맨페이지와 같은 섹션을 포함하여 수많은 다른 내용이 있습니다...
파이썬 사용:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
또는 help()
객체에 대한 자세한 내용을 읽으려면 Python 셸 내에서 함수를 사용할 수 있습니다.
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
보너스:이 wtf
명령은 약어 관련 작업에 도움이 됩니다. 마치 해당 데이터베이스에서 약어를 찾을 수 없는 것처럼 작동 whatis
하지만 사용자는 man 데이터베이스의 일부를 검색하고 있는 것입니다. 데비안에서 이 명령은 다음과 같습니다.bsdgames
팩. 예:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager
답변2
이것은 다음에서 잘 설명됩니다 man man
.
The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.
bold text type exactly as shown.
italic text replace with appropriate argument.
[-abc] any or all arguments within [ ] are optional.
-a|-b options delimited by | cannot be used together.
argument ... argument is repeatable.
[expression] ... entire expression within [ ] is repeatable.
유효한 명령을 어떻게 작성해야 하는지에 대해서는 그렇지 않습니다. 명령이 작동하는 방식을 이해하면 요약이 유용합니다. 기억을 되살리는 데 도움이 됩니다. 이 명령이 어떻게 작동하는지 이해하려면 매뉴얼 페이지를 읽어야 합니다. 특히 옵션에 대한 설명과 예제 섹션이 있습니다.
때로는 요약만으로 충분할 때도 있습니다. 예를 들면 다음과 같습니다 man ls
.
SYNOPSIS
ls [OPTION]... [FILE]...
다른 경우에는 문제의 명령을 사용하는 방법을 이미 알고 있지 않으면 쓸모가 없습니다. 예를 들어, man dd
:
dd [OPERAND]...
dd OPTION
그러니까 요약하자면, 시놉시스를 보지 못하더라도 걱정하지 마세요. 이것은 정상입니다. 매뉴얼 페이지 자체를 읽으십시오.
답변3
시놉시스를 이해하기 위한 몇 가지 기본 사항
- 각각은
[foo]
선택적 인수 또는 인수를 나타냅니다. - 구문을 사용할 때
[foo [ bar ] ]
foo를 사용하거나 bar를 추가할 수 있습니다. - force 옵션 인수는 이러한 방식으로 사용되며
[ -S size ]
, 이는 -S 매개변수가 강제 크기를 기다리고 있음을 나타냅니다.
예를 들어:foo [-S size ] filename ...
방법
- 명령은
foo
- 선택적 매개변수를 사용할 수 있습니다
-S
. 이를 알려주어야 합니다size
(이름에서 힌트를 얻을 수 있습니다). - 필수 매개변수는 다음과 같습니다
filename
(힌트도 제공됩니다. 참조man mkdir
). - 줄임표는
...
여러 파일을 사용할 수 있음을 나타냅니다.
옵션을 이해하려면 매뉴얼 페이지를 자세히 살펴봐야 합니다(위의 예에서는 옵션이 -S size
무엇인지).
답변4
기억해야 할 한 가지 중요한 점은 다른 명령에 대한 명령을 실행하는 맥락에서 특정 명령에 대한 매뉴얼을 볼 수 없다는 것입니다.
예제 명령의 경우
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
and에 대한 정보만 필요한 것은 아닙니다 xargs
( 아마도 맨페이지 에 있을 것입니다 bash
) . 명령에 복잡한 인용 문자열이 포함되어 있으므로 인용 규칙을 얻으려면 쉘(및 bash)에 대한 정보가 필요할 수도 있습니다. 인용된 매개변수가 잘못되었음을 이미 말씀드릴 수 있습니다(그리고 잘못된 방법은 이름에 공백이 있는 파일을 만날 때만 나타납니다 ) .[
test
"{}"
'{}'
따라서 먼저 xargs 맨페이지를 참조하여 그 의미 [-I replace-str]
와 -I {}
그에 따른 모든 내용을 이해합니다. 그런 다음 맨페이지를 참조하여 내용 등을 알아볼 수 있습니다.[command [initial-arguments]]
bash
bash
-c