? čeština š deutsch ∙ ελληνικά ∙ 영어 ∙ Español ∙ français ∙ 인도네시아 ∙ italiano ∙ 日本語 ∙ 한국어 한국어 ∙ polski ∙ portuguêss ∙ românĂ ∙ руский ∙ slovenščina ∙ ∙ ї ї · 繁體中文 · 繁體中文 · ∙ b®
참고 : 나는 이것을 수정하고 이것을보다 포괄적 인 가이드로 확장하는 데 도움이되는 새로운 공동 저자를 찾고 있습니다. 매우 인기가 있지만 더 넓고 조금 더 깊을 수 있습니다. 글을 쓰고 싶고이 자료에 대한 전문가가되고 도움을 기꺼이 고려하고 싶다면 Josh (0x40) Holloway.com에서 메모를 보내주십시오. –jlevy, Holloway. 감사합니다!

명령 라인의 유창성은 종종 무시되거나 아케인으로 간주되는 기술이지만, 명백하고 미묘한 방식으로 엔지니어로서의 유연성과 생산성을 향상시킵니다. 이것은 Linux에서 작업 할 때 유용한 명령 줄 사용에 대한 다양한 메모와 팁입니다. 일부 팁은 기본이며 일부는 상당히 구체적이거나 정교하거나 모호합니다. 이 페이지는 길지 않지만 여기에서 모든 항목을 사용하고 리콜 할 수 있다면 많은 것을 알고 있습니다.
이 작품은 많은 저자와 번역가의 결과입니다. 이 중 일부는 원래 Quora에 출연했지만 이후 Github로 이사했으며, 여기서 원래 작가보다 더 재능있는 사람들이 많은 개선을했습니다. 명령 줄과 관련된 질문이 있으면 질문을 제출하십시오 . 오류 나 더 나을 수있는 오류가 있으면 기여하십시오 !
범위:
참고 :
apt , yum , dnf , pacman , pip 또는 brew (적절한 경우)를 사용하여 새로운 프로그램을 설치하십시오. 기본 배쉬를 배우십시오. 실제로, man bash 강타하고 적어도 모든 것을 훑어보십시오. 따르기가 매우 쉽고 오래 걸리지 않습니다. 대체 껍질은 좋을 수 있지만 Bash는 강력하고 항상 사용 가능합니다 (ZSH, 생선 등 만 배우는 동안 자신의 랩톱을 유혹하는 동안 기존 서버 사용과 같은 많은 상황에서 제한됩니다).
적어도 하나의 텍스트 기반 편집기를 잘 배우십시오. nano 편집기는 기본 편집 (오프닝, 편집, 저장, 검색)에 가장 간단한 편집기 중 하나입니다. 그러나 텍스트 터미널의 파워 사용자의 경우 학습하기 어려운 Vim ( vi )을 대체 할 수는 없지만 유서 깊고 빠르며 완전한 기능을 갖춘 편집기는 없습니다. 많은 사람들은 또한 클래식 EMAC, 특히 더 큰 편집 작업에 사용합니다. (물론, 광범위한 프로젝트를 수행하는 현대적인 소프트웨어 개발자는 순수한 텍스트 기반 편집기 만 사용하지 않을 것이며 현대적인 그래픽 IDE 및 도구에 익숙해야합니다.)
문서 찾기 :
man 과 공식 문서를 읽는 방법을 알고 있습니다 (호기심이 man man 섹션 번호를 나열하고, 예를 들어 1은 "일반"명령, 5는 파일/컨벤션, 8은 관리를위한 것입니다). apropos 와 함께 남자 페이지를 찾으십시오.help 과 help -d 으로 도움을받을 수 있음을 알고 있습니다. type command 사용하여 명령이 실행 파일, 쉘 내장 또는 별칭인지 알 수 있습니다.curl cheat.sh/command 쉘 명령을 사용하는 방법에 대한 일반적인 예제와 함께 간단한 "치트 시트"를 제공합니다. > 및 < 를 사용하여 출력 및 입력의 리디렉션 및 | . 알고 > 출력 파일을 덮어 쓰고 >> 추가합니다. stdout과 stderr에 대해 알아보십시오.
* (및 아마도 ? 및 [ ... ] )로 파일 글로벌 확장 및 인용 및 Double " 과 Single ' Quotes의 차이에 대해 알아보십시오 (아래의 변수 확장에 대해서는 자세한 내용).
Bash 직업 관리에 익숙해 지십시오 : & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill 등.
SSH를 통해 ssh-agent , ssh-add 등을 통해 ssh 및 비밀번호없는 인증의 기본 사항을 알고 있습니다.
기본 파일 관리 : ls 및 ls -l (특히 ls -l 의 모든 열이 less , head , tail 및 tail -f (또는 더 나은 less +F ), ln 및 ln -s (하드 대 소프트 링크의 차이점과 장점을 배우기), chown , chmod , du (디스크 사용법의 빠른 요약 : du -hs * ). 파일 시스템 관리, df , mount , fdisk , mkfs , lsblk . inode가 무엇인지 배우십시오 ( ls -i 또는 df -i ).
기본 네트워크 관리 : ip 또는 ifconfig , dig , traceroute , route .
git 와 같은 버전 제어 관리 시스템을 배우고 사용하십시오.
정규 표현을 잘 알고 있으며 grep / egrep 의 다양한 깃발을 알고 있습니다. -i , -o , -v , -A , -B 및 -C 옵션은 알아야 할 가치가 있습니다.
apt-get , yum , dnf 또는 pacman (배포판에 따라 다름)을 사용하여 패키지를 찾아 설치하는 방법을 배우십시오. pip Python 기반 명령 줄 도구를 설치 해야하는지 확인하십시오 (아래는 pip 통해 가장 쉽게 설치하기가 가장 쉽습니다).
BASH에서 탭을 사용하여 사용 가능한 모든 명령 및 ctrl-r을 명령 기록을 통해 검색하기 위해 탭을 사용하여 명령 기록을 검색합니다 (검색을 눌러 검색을 유형하고 CTRL-r을 반복하여 더 많은 일치를 순환하려면 ENTER를 눌러 찾은 명령을 실행하거나 오른쪽 화살표를 눌러 현재 줄에 결과를 편집 할 수 있습니다).
BASH에서 Ctrl-W를 사용하여 마지막 단어를 삭제하고 Ctrl-U는 현재 커서에서 라인의 시작으로 컨텐츠를 삭제합니다. Alt-B 및 Alt-F를 사용하여 Word, Ctrl-A를 사용하여 커서를 라인의 시작으로 이동시키고 Ctrl-e , 커서를 라인의 끝으로 이동시키고, 선의 끝까지 Ctrl-K , Ctrl-L을 사용하여 CTRL-L을 화면을 지 웁니다. Bash의 모든 기본 키 바인딩에 대해서는 man readline 참조하십시오. 많이 있습니다. 예를 들어 Alt-. 이전의 주장을 통해 순환하고 Alt- *는 지구를 확장합니다.
또는 VI 스타일 키 바인딩을 좋아하는 경우 set -o vi (및 set -o emacs 사용하여 다시 넣으십시오)를 사용하십시오.
긴 명령을 편집하기 위해 편집기 (예 : export EDITOR=vim )를 설정 한 후 Ctrl-X Ctrl-e는 다중선 편집을 위해 편집기에서 현재 명령을 엽니 다. 또는 VI 스타일로, Escape-V .
최근 명령을 보려면 history 사용하십시오. 다시 실행하려면 !n (여기서 n 이 명령 번호)을 따르십시오. 당신이 사용할 수있는 많은 약어도 있습니다. 가장 유용한 것일 것입니다 !$ 마지막 인수에 대한 $ !! 마지막 명령 (Man Page의 "히스토리 확장"참조). 그러나 이들은 종종 Ctrl-R 및 Alt-로 쉽게 대체됩니다. .
cd 로 홈 디렉토리로 이동하십시오. ~ prefix (예 : ~/.bashrc )를 사용하여 홈 디렉토리에 대한 파일에 액세스하십시오. sh 스크립트에서는 홈 디렉토리를 $HOME 으로 표시합니다.
이전 작업 디렉토리로 돌아가려면 : cd - .
명령을 입력하는 중간에 명령을 타고 마음을 바꾸는 경우 Alt- #을 눌러 처음에 # 추가하고 주석으로 입력하십시오 (또는 Ctrl-A , # , Enter ). 그런 다음 나중에 명령 기록을 통해 돌아올 수 있습니다.
xargs (또는 parallel )를 사용하십시오. 매우 강력합니다. 참고 평행 ( -L -P 뿐만 아니라 라인 당 실행되는 항목 수를 제어 할 수 있습니다. 그것이 올바른 일을할지 확실하지 않은 경우 xargs echo 먼저 사용하십시오. 또한 -I{} 는 편리합니다. 예 :
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p 프로세스 트리의 유용한 표시입니다.
pgrep 및 pkill 사용하여 이름별로 프로세스를 찾거나 신호를 보내십시오 ( -f 는 유용합니다).
프로세스를 보낼 수있는 다양한 신호를 알고 있습니다. 예를 들어, 프로세스를 중단하려면 kill -STOP [pid] 사용하십시오. 전체 목록은 man 7 signal 참조하십시오
배경 프로세스를 원한다면 nohup 또는 disown 사용하여 영원히 실행되도록하십시오.
netstat -lntp 또는 ss -plat (tcp; add -u for udp) 또는 lsof -iTCP -sTCP:LISTEN -P -n (macoS에서도 작동)를 통해 어떤 프로세스가 듣고 있는지 확인하십시오.
열린 소켓 및 파일은 lsof 및 fuser 도 참조하십시오.
시스템이 얼마나 오래 실행되었는지 알기 위해 uptime 또는 w 참조하십시오.
alias 사용하여 일반적으로 사용되는 명령에 대한 바로 가기를 만듭니다. 예를 들어, alias ll='ls -latr' 새로운 별칭 ll 만듭니다.
~/.bashrc 에서 일반적으로 사용하는 별칭, 쉘 설정 및 기능을 저장하고 로그인 쉘이 소스를 제공하도록 배열하십시오. 이렇게하면 모든 쉘 세션에서 설정을 사용할 수 있습니다.
~/.bash_profile 에 로그인 할 때 실행 해야하는 명령뿐만 아니라 환경 변수 설정을 넣으십시오. 그래픽 환경 로그인 및 cron 작업에서 시작한 쉘에는 별도의 구성이 필요합니다.
GIT가있는 다양한 컴퓨터에서 구성 파일 (예 : .bashrc 및 .bash_profile )을 동기화하십시오.
변수와 파일 이름에 공백이 포함 된 경우 관리가 필요하다는 것을 이해하십시오. "$FOO" (예 : Bash 변수)를 따옴표로 둘러싸십시오. -0 또는 -print0 옵션을 선호하여 널 문자가 파일 이름을 구분할 수 있도록하고, 예를 들어 locate -0 pattern | xargs -0 ls -al 또는 find / -print0 -type d | xargs -0 ls -al . for 루프에 공백이 포함 된 파일 이름을 반복하려면 ifs를 IFS=$'n' 만 사용하여 ifs를 최신 라인으로 설정하십시오.
BASH 스크립트에서는 디버깅 출력을 위해 set -x (또는 expeded 변수 및 주석을 포함하여 원시 입력을 기록한 변형 set -v )를 사용하십시오. 정당한 이유가없는 한 엄격한 모드를 사용하십시오. set -e 사용하여 오류를 중단하십시오 (0이 아닌 출구 코드). set -u 사용하여 설정되지 않은 변수 사용법을 감지하십시오. 파이프 내 오류를 중단하려면 set -o pipefail 도 고려하십시오 (이 주제는 약간 미묘하기 때문에 더 많이 읽으십시오). 더 많은 스크립트의 경우 종료 또는 err에서 trap 사용하십시오. 유용한 습관은 이와 같은 스크립트를 시작하여 일반적인 오류를 감지하고 중단하고 메시지를 인쇄하는 것입니다.
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir Bash에는 많은 종류의 가변 확장이 있습니다. 변수 확인 : ${name:?error message} . 예를 들어, bash 스크립트에 단일 인수가 필요한 경우 input_file=${1:?usage: $0 input_file} 쓰십시오. 변수가 비어있는 경우 기본값 사용 : ${name:-default} . 이전 예제에 추가 (선택적) 매개 변수를 추가하려면 output_file=${2:-logfile} 과 같은 것을 사용할 수 있습니다. $2 생략되어 비어 있으면 output_file logfile 로 설정됩니다. 산술 확장 : i=$(( (i + 1) % 5 )) . 시퀀스 : {1..10} . 문자열 트리밍 : ${var%suffix} 및 ${var#prefix} . 예를 들어 var=foo.pdf 인 경우 echo ${var%.pdf}.txt prints foo.txt .
{ ... } 를 사용한 브레이스 확장은 유사한 텍스트를 다시 유형화하고 항목의 조합을 자동화 해야하는 것을 줄일 수 있습니다. 이것은 mv foo.{txt,pdf} some-dir (두 파일을 모두 움직이는), cp somefile{,.bak} ( cp somefile somefile.bak ) 또는 mkdir -p test-{a,b,c}/subtest-{1,2,3} (모든 빗, 창조물 및 창조물)과 같은 예제에서 도움이됩니다. 브레이스 확장은 다른 확장 전에 수행됩니다.
확장 순서는 다음과 같습니다. 브레이스 팽창; Tilde 확장, 매개 변수 및 가변 확장, 산술 확장 및 명령 대체 (왼쪽에서 오른쪽으로 수행); 단어 분할; 파일 이름 확장. (예를 들어, {1..20} 과 같은 범위는 {$a..$b} seq $a $b 하여 변수로 표현할 수 없습니다. 대신 루프 for seq 또는 a를 사용 for((i=a; i<=b; i++)); do ... ; done .
명령의 출력은 <(some command) (프로세스 대체라고도 함)를 통해 파일처럼 취급 될 수 있습니다. 예를 들어, 로컬 /etc/hosts 원격과 비교하십시오.
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
배쉬에서 some-command >logfile 2>&1 또는 some-command &>logfile 통해 표준 출력 및 표준 오류를 모두 리디렉션하십시오. 종종 명령이 열린 파일 핸들을 표준 입력에 남겨 두지 않도록하는 경우, 당신이있는 터미널에 묶는 것도 </dev/null 추가하는 것이 좋습니다.
16 진수 및 소수점 값이있는 좋은 ASCII 테이블에는 man ascii 사용하십시오. 일반 인코딩 정보의 경우 man unicode , man utf-8 및 man latin1 도움이됩니다.
screen 또는 tmux 사용하여 화면을 멀티 플렉스하십시오. 특히 원격 SSH 세션에서 유용하고 세션으로 분리하고 다시 부착하십시오. byobu 더 많은 정보와 더 쉬운 관리를 제공하여 화면 또는 TMUX를 향상시킬 수 있습니다. 세션 지속성에 대한보다 최소한의 대안은 dtach 입니다.
SSH에서는 -L 또는 -D (및 때로는 -R )로 터널을 포트하는 방법을 아는 것이 유용합니다. 예를 들어 원격 서버에서 웹 사이트에 액세스하는 것이 유용합니다.
SSH 구성에 대한 몇 가지 최적화를 만드는 것이 유용 할 수 있습니다. 예를 들어,이 ~/.ssh/config 특정 네트워크 환경에서 연결 삭제를 피하기위한 설정이 포함되어 있으며, 압축 (저 대역폭 연결을 통해 SCP에 도움이되는) 및 로컬 제어 파일을 사용하여 동일한 서버에 대한 멀티플렉스 채널을 사용합니다.
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
SSH와 관련된 몇 가지 다른 옵션은 보안에 민감하며 예를 들어 서브넷 또는 호스트 또는 신뢰할 수있는 네트워크에서주의를 기울여 활성화해야합니다. StrictHostKeyChecking=no , ForwardAgent=yes
mosh UDP를 사용하고 연결을 삭제하는 것을 피하고 도로에서 편의를 추가하는 SSH에 대한 대안을 고려하십시오 (서버 측 설정이 필요).
시스템 구성에 유용하지만 ls 에서 사용할 수없고 쉽게 사용할 수없는 Octal Form으로 파일에 대한 권한을 얻으려면 다음과 같은 것을 사용하십시오.
stat -c ' %A %a %n ' /etc/timezone 다른 명령의 출력에서 대화식 값을 선택하려면 percol 또는 fzf 사용하십시오.
다른 명령 (예 : git )의 출력을 기반으로 파일과의 상호 작용을 위해 fpp (PathPicker)를 사용하십시오.
현재 디렉토리 (및 서브 디르)의 모든 파일에 대한 간단한 웹 서버의 경우 네트워크의 모든 사람이 사용할 수있는 경우 : python -m SimpleHTTPServer 7777 (포트 7777 및 Python 2) 및 python -m http.server 7777 (포트 7777 및 Python 3).
다른 사용자로 명령을 실행하려면 sudo 사용하십시오. 기본값은 루트로 실행됩니다. -u 사용하여 다른 사용자를 지정하십시오. -i 사용하여 해당 사용자로 로그인합니다 ( 비밀번호 를 요청받습니다).
쉘을 다른 사용자로 전환하려면 su username 또는 su - username 사용하십시오. 후자는 "-"가있는 다른 사용자가 방금 로그인 한 것처럼 환경을 얻습니다. 사용자 이름 기본값을 생략하여 루팅합니다. 전환하는 사용자의 비밀번호를 요청 받게됩니다.
명령 라인의 128K 제한에 대해 알고 있습니다. 이 "인수 목록이 너무 길다"오류는 와일드 카드가 다수의 파일과 일치 할 때 일반적입니다. (이런 일이 발생하면 find 및 xargs 와 같은 대안이 도움이 될 수 있습니다.)
기본 계산기 (및 일반적으로 Python에 대한 액세스)의 경우 python 통역사를 사용하십시오. 예를 들어,
>>> 2+3
5
현재 디렉토리에서 이름별로 파일을 찾으려면 find . -iname '*something*' (또는 이와 유사한). 이름으로 어디서나 파일을 찾으려면 locate something 사용하십시오 (그러나 Bear updatedb 최근에 만든 파일을 색인화하지 않았을 수도 있습니다).
소스 또는 데이터 파일을 통해 일반 검색을 위해서는 grep -r 보다 더 발전 또는 빠른 옵션이 있습니다 (이전부터 새로운 것까지) ack , ag ( "The Silver Searcher") 및 rg (RIPGREP)를 포함하여 GREP -R보다 더 빠른 옵션이 있습니다.
html을 텍스트로 변환하려면 : lynx -dump -stdin
Markdown, HTML 및 모든 종류의 문서 변환의 경우 pandoc 사용해보십시오. 예를 들어, Markdown 문서를 Word 형식으로 변환하려면 : pandoc README.md --from markdown --to docx -o temp.docx
XML을 처리 해야하는 경우 xmlstarlet 오래되었지만 좋습니다.
JSON의 경우 jq 사용하십시오. 대화식 사용은 jid 및 jiq 도 참조하십시오.
Yaml의 경우 shyaml 사용하십시오.
Excel 또는 CSV 파일의 경우 CSVKIT는 in2csv , csvcut , csvjoin , csvgrep 등을 제공합니다.
Amazon S3의 경우 s3cmd 가 편리하고 s4cmd 가 더 빠릅니다. 아마존의 aws 와 개선 된 saws 다른 AWS 관련 작업에 필수적입니다.
UNIQ의 -u 및 -d 옵션을 포함하여 sort 및 uniq 에 대해 알고 있습니다. comm 참조.
cut , paste 및 join 텍스트 파일을 조작하는 것에 대해 알고 있습니다. 많은 사람들 cut 사용하지만 join 을 잊어 버립니다.
Newlines ( -l ), 문자 ( -m ), 단어 ( -w ) 및 바이트 ( -c )를 계산하기 위해 wc 에 대해 알고 있습니다.
ls -al | tee file.txt 에서와 같이 Stdin에서 파일 및 stdout으로 복사 할 tee 에 대해 알고 있습니다. ls -al | tee file.txt .
그룹화, 반전 필드 및 통계 계산을 포함한보다 복잡한 계산을 위해 datamash 고려하십시오.
로케일은 정렬 순서 (Collation) 및 성능을 포함하여 미묘한 방식으로 많은 명령 줄 도구에 영향을 미친다는 것을 알고 있습니다. 대부분의 Linux 설치는 LANG 또는 기타 로케일 변수를 미국 영어와 같은 로컬 설정으로 설정합니다. 그러나 로케일을 변경하면 정렬이 변경됩니다. I18N 루틴이 정렬을 만들거나 다른 명령이 여러 번 느려질 수 있다는 것을 알고 있습니다. 일부 상황 (예 : 아래 세트 운영 또는 아래의 독창성 작업)에서는 export LC_ALL=C 사용하여 느린 I18N 루틴을 완전히 무시하고 기존 바이트 기반 정렬 순서를 사용할 수 있습니다.
TZ=Pacific/Fiji date 와 같이 환경 변수 설정으로 호출을 접두사로 설정하여 특정 명령의 환경을 설정할 수 있습니다.
간단한 데이터 munging에 대한 기본적인 awk 와 sed 알고 있습니다. 예제는 하나의 라이너를 참조하십시오.
하나 이상의 파일에서 문자열의 모든 발생을 제자리에 교체하려면 다음과 같습니다.
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren 사용해보십시오. (경우에 따라 rename 명령은 여러 개의 이름을 허용하지만 모든 Linux 배포판에서 기능이 동일하지 않으므로 조심하십시오.) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync 실제로 빠르고 매우 다양한 파일 복사 도구입니다. 기계 간의 동기화로 알려져 있지만 로컬로 똑같이 유용합니다. 보안 제한이 허용되면 scp 대신 rsync 사용하면 처음부터 다시 시작하지 않고 전송을 복구 할 수 있습니다. 또한 많은 파일을 삭제하는 가장 빠른 방법 중 하나입니다. mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir 파일을 처리 할 때 진행 상황을 모니터링하려면 pv , pycp , pmonitor , progress , rsync --progress 또는 블록 레벨 복사의 경우 dd status=progress 사용하십시오.
shuf 사용하여 파일에서 랜덤 라인을 셔플하거나 선택하십시오.
sort 옵션을 알고 있습니다. 숫자의 경우, 사람이 읽을 수있는 숫자를 처리하려면 -n , 또는 -h 사용하십시오 (예 : du -h ). 키가 어떻게 작동하는지 알고 있습니다 ( -t 및 -k ). 특히, 첫 번째 필드 만 정렬하려면 -k1,1 작성해야한다는 점을 알아보십시오. -k1 전체 라인에 따라 정렬을 의미합니다. 안정적인 정렬 ( sort -s )이 유용 할 수 있습니다. 예를 들어, 필드 2로 먼저 정렬하려면 Field 1에 의해 두 번째로 정렬 할 수 있습니다. sort -k1,1 | sort -s -k2,2 .
bash의 명령 줄에 탭 문자를 작성 해야하는 경우 (예 : -t 인수를 정렬 할 경우) Ctrl -V [탭]을 누르거나 $'t' 를 씁니다 (후자는 복사/붙여 넣을 수 있으므로 후자가 더 좋습니다).
소스 코드를 패치하기위한 표준 도구는 diff 및 patch 입니다. Diff의 Diff 및 sdiff 의 요약 통계에 대해서는 diffstat 도 참조하십시오. 참고 diff -r 전체 디렉토리에 대해 작동합니다. diff -r tree1 tree2 | diffstat 사용하십시오 변경 사항 요약을위한 diff -r tree1 tree2 | diffstat . vimdiff 사용하여 파일을 비교하고 편집하십시오.
바이너리 파일의 경우 간단한 육각 덤프에는 hd , hexdump 또는 xxd 사용하여 이진 편집을 위해 bvi , hexedit 또는 biew 사용하십시오.
이진 파일의 경우 strings ( grep 등)을 사용하면 텍스트 비트를 찾을 수 있습니다.
이진 diffs (델타 압축)의 경우 xdelta3 사용하십시오.
텍스트 인코딩을 변환하려면 iconv 사용해보십시오. 또는보다 진보 된 사용을위한 uconv ; 고급 유니 코드를 지원합니다. 예를 들어:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt 파일을 조각으로 분할하려면 split (크기별로 분할) 및 csplit (패턴별로 분할)를 참조하십시오.
날짜 및 시간 : 유용한 ISO 8601 형식으로 현재 날짜와 시간을 얻으려면 date -u +"%Y-%m-%dT%H:%M:%SZ" (기타 옵션은 문제가 있음)를 사용하십시오. 날짜와 시간 표현을 조작하려면 dateutils 에서 dateadd , datediff , strptime 등을 사용하십시오.
zless , zmore , zcat 및 zgrep 사용하여 압축 파일에서 작동합니다.
파일 속성은 chattr 통해 정산 될 수 있으며 파일 권한에 대한 하위 수준의 대안을 제공합니다. 예를 들어, 우발적 파일 삭제로부터 보호하려면 불변의 깃발 : sudo chattr +i /critical/directory/or/file
getfacl 및 setfacl 사용하여 파일 권한을 저장하고 복원하십시오. 예를 들어:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (Sparse 파일 생성), fallocate (Ext4, XFS, BTRFS 및 OCFS2 파일 시스템), xfs_mkfile (거의 모든 파일 시스템은 XFSProgs 패키지로 제공됨), mkfile (Solaris, Mac OS와 같은 Unix-like 시스템)을 사용하십시오. 웹 디버깅의 경우 curl and curl -I 편리하거나 wget 해당하는 것 또는보다 현대적인 httpie 입니다.
현재 CPU/디스크 상태를 알기 위해 클래식 도구는 top (또는 더 나은 htop ), iostat 및 iotop 입니다. 기본 CPU 및 세부당 디스크 통계 및 성능 통찰력에 iostat -mxz 15 사용하십시오.
네트워크 연결 세부 정보는 netstat 및 ss 사용하십시오.
시스템에서 무슨 일이 일어나고 있는지에 대한 간단한 개요를 위해 dstat 특히 유용합니다. 세부 사항이있는 가장 광범위한 개요의 경우 glances 활용하십시오.
메모리 상태를 알기 위해 free 및 vmstat 의 출력을 실행하고 이해하십시오. 특히 "캐시 된"값은 Linux 커널이 파일 캐시로 보유한 메모리입니다. 따라서 "무료"값으로 효과적으로 계산됩니다.
Java 시스템 디버깅은 다른 물고기 주전자이지만 Oracle과 다른 JVM에 대한 간단한 요령은 kill -3 <pid> 실행할 수 있다는 것입니다. JDK의 jps , jstat , jstack , jmap 유용합니다. SJK 도구가 더욱 발전했습니다.
네트워크 문제를 식별하기 위해 mtr 더 나은 TracerOute로 사용하십시오.
디스크가 가득 찬 이유를 살펴보면 ncdu du -sh * 와 같은 일반적인 명령보다 시간을 절약합니다.
대역폭을 사용하는 소켓이나 프로세스를 찾으려면 iftop 또는 nethogs 사용해보십시오.
ab 도구 (Apache와 함께 제공됨)는 웹 서버 성능을 빠르게 점검하는 데 도움이됩니다. 보다 복잡한 부하 테스트를 위해 siege 시도하십시오.
보다 심각한 네트워크 디버깅, wireshark , tshark 또는 ngrep .
strace 와 ltrace 에 대해 알고 있습니다. 프로그램이 실패, 교수형 또는 충돌하는 경우 도움이 될 수 있으며, 왜 그런지 또는 성능에 대한 일반적인 아이디어를 얻고 싶은지 모릅니다. 프로파일 링 옵션 ( -c ) 및 러닝 프로세스 ( -p )에 부착하는 기능에 유의하십시오. 추적 자식 옵션 ( -f )을 사용하여 중요한 통화가 누락되지 않도록하십시오.
공유 라이브러리 등을 확인하려면 ldd 에 대해 알고 있지만 신뢰할 수없는 파일에서는 실행하지 마십시오.
gdb 로 실행중인 프로세스에 연결하고 스택 추적을 얻는 방법을 알고 있습니다.
사용 /proc . 라이브 문제를 디버깅 할 때 때때로 놀랍게도 도움이됩니다. 예 : /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (여기서 xxx 는 프로세스 ID 또는 PID입니다).
과거에 왜 문제가 발생했는지 디버깅 할 때 sar 매우 도움이 될 수 있습니다. CPU, 메모리, 네트워크 등에 대한 과거 통계를 보여줍니다.
더 깊은 시스템 및 성능 분석의 경우 stap (SystemTap), perf 및 sysdig 참조하십시오.
uname 또는 uname -a (일반 Unix/Kernel Info) 또는 lsb_release -a (Linux 배포판 정보)로 어떤 OS를 확인하십시오.
무언가가 정말 재미있을 때마다 dmesg 사용하십시오 (하드웨어 또는 드라이버 문제 일 수 있음).
파일을 삭제하고 du 에서보고 한대로 예상 디스크 공간을 확보하지 못하면 프로세스에서 파일이 사용 중인지 확인하십시오. lsof | grep deleted | grep "filename-of-my-big-file"
함께 조각 명령의 몇 가지 예 :
sort / uniq 를 통해 교차로, 노조 및 텍스트 파일 차이를 설정할 수있는 경우가 많습니다. a 와 b 이미 고유 한 텍스트 파일이라고 가정합니다. 이것은 빠르며 최대 많은 기가 바이트까지 임의의 크기의 파일에서 작동합니다. (정렬은 메모리 sort 제한되지 않지만 /tmp LC_ALL 루트 파티션에있는 경우 -T 옵션을 사용해야 할 수도 -u .) sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
grep . * 디렉토리의 모든 파일의 내용을 신속하게 검사하려면 (각 줄은 파일 이름과 쌍을 이루고) head -100 * (따라서 각 파일에는 제목이 있습니다). 이것은 /sys , /proc , /etc 와 같은 구성 설정으로 채워진 디렉토리에 유용 할 수 있습니다.
텍스트 파일의 세 번째 열에서 모든 숫자를 합산합니다 (아마도 동등한 파이썬보다 3 배 빠르고 3 배 적은 코드) :
awk ' { x += $3 } END { print x } ' myfilels -l 과 같지만 ls -lR 보다 읽기가 더 쉽습니다. find . -type f -lsacct_id 매개 변수와 같은 일부 줄에 나타나는 특정 값이 있다고 가정 해 봅시다. 각 acct_id 에 대한 요청 수에 대한 집계를 원한다면 : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn 변경 사항을 지속적으로 모니터링하려면 watch 사용하십시오. 예를 들어 watch -d -n 2 'ls -rtlh | tail' watch -d -n 2 ifconfig 로 Wi -Fi 설정을 문제 해결하는 동안 watch -d -n 2 'ls -rtlh | tail' 또는 네트워크 설정으로.
이 문서에서 임의의 팁을 얻으려면이 기능을 실행하십시오 (마크 다운 및 항목을 추출).
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : 산술 또는 부울 작업을 수행하거나 정규 표현식 평가
m4 : 간단한 매크로 프로세서
yes : 문자열을 많이 인쇄하십시오
cal : 좋은 캘린더
env : 명령 실행 (스크립트에서 유용함)
printenv : 인쇄 환경 변수 (디버깅 및 스크립트에 유용함)
look : 문자열로 시작하는 영어 단어 (또는 파일의 줄) 찾기
cut paste 넣기 및 join : 데이터 조작
fmt : 형식 텍스트 단락
pr : 페이지/열로 텍스트를 형식으로 지정하십시오
fold : 텍스트 줄을 랩합니다
column : 정렬 된 고정형 열 또는 테이블로의 텍스트 필드 형식
expand 및 unexpand : 탭과 공백 사이를 변환합니다
nl : 줄 번호를 추가하십시오
seq : 인쇄 번호
bc : 계산기
factor : 요인 정수
gpg : 암호화 및 사인 파일
toe : Terminfo 항목 테이블
nc : 네트워크 디버깅 및 데이터 전송
socat : 소켓 릴레이 및 TCP 포트 포워더 ( netcat 과 유사)
slurm : 네트워크 트래픽 시각화
dd : 파일 또는 장치간에 데이터 이동
file : 파일의 유형을 식별합니다
tree : 둥지 트리로서 디렉토리 및 하위 디렉토리; ls 와 마찬가지로 재귀 적
stat : 파일 정보
time : 실행 및 시간 A 명령
timeout : 지정된 시간 동안 명령을 실행하고 지정된 시간이 완료되면 프로세스를 중지하십시오.
lockfile : rm -f 만 제거 할 수있는 세마포어 파일 생성
logrotate : 회전, 압축 및 메일 로그.
watch : 반복적으로 명령을 실행하여 결과를 표시하거나 변경 사항을 강조 표시합니다.
when-changed : 파일이 변경 될 때마다 지정할 때 명령을 실행합니다. inotifywait 및 entr 도 참조하십시오.
tac : 파일을 반대로 인쇄합니다
comm : 정렬 된 파일을 라인별로 비교하십시오
strings : 이진 파일에서 텍스트를 추출하십시오
tr : 문자 번역 또는 조작
iconv 또는 uconv : 텍스트 인코딩에 대한 변환
split 및 csplit : 파일 분할
sponge : 글을 쓰기 전에 모든 입력을 읽고, 그 다음에 같은 파일에 글을 읽는 데 유용합니다 (예 : grep -v something some-file | sponge some-file
units : 단위 변환 및 계산; 깜박임 당 2 주당 Furlongs를 2 주차로 변환합니다 ( /usr/share/units/definitions.units 참조)
apg : 임의의 암호를 생성합니다
xz : 고층 파일 압축
ldd : 동적 라이브러리 정보
nm : 객체 파일의 기호
ab 또는 wrk : 웹 서버 벤치마킹
strace : 시스템 호출 디버깅
mtr : 네트워크 디버깅을위한 더 나은 Traceroute
cssh : 시각적 동시 쉘
rsync : SSH 또는 로컬 파일 시스템의 파일 및 폴더를 동기화합니다.
wireshark 및 tshark : 패킷 캡처 및 네트워크 디버깅
ngrep : 네트워크 계층의 GREP
host 및 dig : DNS 조회
lsof : 프로세스 파일 디스크립터 및 소켓 정보
dstat : 유용한 시스템 통계
glances : 높은 수준의 다중 서브 시스템 개요
iostat : 디스크 사용 통계
mpstat : CPU 사용 통계
vmstat : 메모리 사용 통계
htop : TOP의 개선 된 버전
last : 로그인 기록
w : 누가 로그온했는지
id : 사용자/그룹 ID 정보
sar : 역사적 시스템 통계
iftop 또는 nethogs : 소켓 또는 프로세스 별 네트워크 활용
ss : 소켓 통계
dmesg : 부팅 및 시스템 오류 메시지
sysctl : 실행 시간에 Linux 커널 매개 변수보기 및 구성
hdparm : SATA/ATA 디스크 조작/성능
lsblk : 목록 블록 장치 : 디스크 및 디스크 파티션의 트리보기
lshw , lscpu , lspci , lsusb , dmidecode : CPU, BIOS, RAID, 그래픽, 장치 등을 포함한 하드웨어 정보
lsmod 및 modinfo : 커널 모듈의 세부 사항을 목록하고 표시합니다.
fortune , ddate 및 sl : 음, 음, 글쎄, 그것은 당신이 증기 기관차와 Zippy 인용문을 "유용한"것으로 간주하는지에 달려 있습니다.
이들은 MACOS 에서만 관련된 항목입니다.
brew (Homebrew) 및/또는 port (Macports)를 사용한 패키지 관리. 이들은 위의 많은 명령을 MacOS에 설치하는 데 사용할 수 있습니다.
pbcopy 가있는 데스크탑 앱에 명령의 출력을 복사하고 pbpaste 와 함께 입력을 붙여 넣습니다.
MacOS 터미널의 옵션 키를 ALT 키 ( Alt -B , Alt -F 등과 같은 위의 명령에 사용)로 사용하려면 환경 설정 -> 프로파일 -> 키보드를 선택하고 "메타 키로 옵션 사용"을 선택하십시오.
데스크탑 앱으로 파일을 열려면 open 또는 open -a /Applications/Whatever.app 사용하십시오.
스포트라이트 : mdfind 가있는 파일을 검색하고 mdls 있는 메타 데이터 (예 : 사진 EXIF 정보)를 나열하십시오.
MacOS는 BSD UNIX를 기반으로하며, 많은 명령 (예 : ps , ls , tail , awk , sed )은 Linux의 많은 미묘한 변형을 가지고 있으며, 이는 시스템 V 스타일 UNIX 및 GNU 도구에 의해 크게 영향을받습니다. Man Page에 "BSD General Commands Manual"이라는 제목이 있음을 알면 차이를 알 수 있습니다. 경우에 따라 GNU 버전도 설치할 수 있습니다 (예 : GNU AWK 및 SED 용 gawk 와 같은 gsed ). 크로스 플랫폼 배쉬 스크립트를 작성하는 경우 그러한 명령을 피하거나 (예 : Python 또는 perl 고려하십시오)주의 깊게 테스트하십시오.
MacOS 릴리스 정보를 얻으려면 sw_vers 사용하십시오.
이 항목은 Windows 에서만 관련이 있습니다.
Cygwin을 설치하여 Microsoft Windows 아래에서 Unix 쉘의 전력에 액세스하십시오. 이 문서에 설명 된 대부분의 것들이 상자에서 작동합니다.
Windows 10에서는 Linux (WSL) 용 Windows 서브 시스템을 사용할 수 있으며 UNIX 명령 줄 유틸리티가있는 친숙한 배쉬 환경을 제공합니다.
주로 Windows에서 GNU 개발자 도구 (예 : GCC)를 사용하려면 Bash, Gawk, Make 및 Grep과 같은 유틸리티를 제공하는 Mingw 및 MSYS 패키지를 고려하십시오. MSYS에는 Cygwin에 비해 모든 기능이있는 것은 아닙니다. Mingw는 유닉스 도구의 기본 창 포트를 만드는 데 특히 유용합니다.
Windows에서 Unix 모양과 느낌을 얻는 또 다른 옵션은 현금입니다. 이 환경에서는 UNIX 명령 및 명령 줄 옵션 만 사용할 수 있습니다.
wmic 학습하고 사용하여 명령 줄에서 대부분의 Windows 시스템 관리 작업을 수행하고 스크립트 할 수 있습니다.
기본 명령 줄 Windows 네트워킹 도구는 ping , ipconfig , tracert 및 netstat 포함하여 유용 할 수 있습니다.
Rundll32 명령을 호출하여 많은 유용한 Windows 작업을 수행 할 수 있습니다.
Cygwin의 패키지 관리자와 함께 추가 UNIX 프로그램을 설치하십시오.
mintty 명령 줄 창으로 사용하십시오.
/dev/clipboard 통해 Windows 클립 보드에 액세스하십시오.
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.