Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

명령줄에서 매일 사용하는 Bash 팁

많은 Linux 및 Unix 변종에 대한 기본 셸인 Bash에는 널리 사용되지 않는 기능이 포함되어 있으므로 논의할 내용을 결정하기가 어려웠습니다. 결국 나는 일상적인 활동을 더 쉽게 해주는 Bash 팁에 집중하기로 결정했습니다.

컨설턴트로서 저는 다양한 환경과 업무 스타일을 봅니다. 저는 이 경험을 바탕으로 터미널 및 라인 트릭, 탐색 및 파일, 기록, 유용한 명령의 네 가지 광범위한 범주로 팁을 좁혔습니다. 이 범주는 완전히 임의적이며 어떤 종류의 결정적인 분류보다 내 자신의 생각을 정리하는 데 더 도움이 됩니다. 여기에 포함된 많은 팁은 주관적으로 둘 이상의 범주에 적합할 수 있습니다.

더 이상 고민하지 않고 다음은 내가 만난 가장 유용한 Bash 트릭 중 일부입니다.

Bash 기록 작업

생산성을 높이는 가장 좋은 방법 중 하나는 Bash 기록을 보다 효과적으로 사용하는 방법을 배우는 것입니다. 이를 염두에 두고 다중 사용자 환경에서 수행할 수 있는 가장 중요한 조정 중 하나는 histappend를 활성화하는 것입니다. 쉘에 대한 옵션. 그렇게 하려면 다음 명령을 실행하기만 하면 됩니다.

shopt -s histappend  

이를 통해 여러 터미널 세션이 동시에 기록에 쓸 수 있습니다. 대부분의 환경에서 이 옵션은 아닙니다. 활성화. 즉, 로컬 또는 SSH를 통해 Bash 세션이 두 개 이상 열려 있으면 기록이 손실되는 경우가 많습니다.

또 다른 일반적인 작업은 sudo로 마지막 명령을 반복하는 것입니다. . 예를 들어 mkdir /etc/ansible/facts.d 디렉토리를 생성한다고 가정합니다. . 루트가 아니면 이 명령은 실패합니다. 내가 관찰한 바에 따르면 대부분의 사용자는 up 화살표를 누르고 줄의 시작 부분으로 스크롤한 다음 sudo를 추가합니다. 명령. 더 쉬운 방법이 있습니다. 다음과 같이 명령을 실행하기만 하면 됩니다.

sudo !! 

Bash는 sudo를 실행합니다. 그런 다음 이전 명령 전체. 다음은 순서대로 실행했을 때의 모습입니다.

[user@centos ~]$ mkdir -p /etc/ansible/facts.d
mkdir:'/etc/ansible' 디렉토리를 생성할 수 없습니다:권한이 거부되었습니다.

[user@ centos ~]$ sudo !!
sudo mkdir -p /etc/ansible/facts.d

!! 가 실행되면 전체 명령이 터미널에 반향되어 방금 실행된 내용을 알 수 있습니다.

유사하지만 훨씬 덜 자주 사용되는 !* 지름길. 이것은 모든 *인수*를 원한다고 Bash에 알려줍니다. 이전 명령에서 현재 명령에서 반복됩니다. 재사용하려는 인수가 많은 명령에 유용할 수 있습니다. 간단한 예는 많은 파일을 만든 다음 권한을 변경하는 것입니다.

[user@centos tmp]$ 터치 파일1 파일2 파일3 파일4
[user@centos tmp]$ chmod 777 !*
chmod 777 파일1 파일2 파일3 파일4

특정 상황에서만 유용하지만 키 입력을 줄일 수 있습니다.

키 입력 저장에 대해 이야기하면서 기록에서 명령을 찾는 방법에 대해 이야기해 보겠습니다. 대부분의 사용자는 다음과 같이 할 것입니다.

history |grep <some command> 

그러나 기록을 검색하는 더 쉬운 방법이 있습니다. 를 누르면

ctrl + r 

Bash는 히스토리를 역검색합니다. 입력을 시작하면 결과가 나타나기 시작합니다. 예:

(reverse-i-search)`hist': shopt -s histappend 

위의 예에서 hist를 입력했습니다. shopt와 일치했습니다. 앞에서 다룬 명령. ctrl + r을 계속 누르면 , Bash는 다른 모든 일치 항목을 계속 역방향으로 검색합니다.

마지막 트릭은 기록에서 가장 많이 사용된 명령을 계산하고 표시하는 데 사용할 수 있는 유용한 명령만큼 트릭이 아닙니다.

[user@centos tmp]$ 기록 | awk 'BEGIN {FS="[ \t]+|\\|"} {$3} 인쇄' | 정렬 | 유니크 -c | 정렬 -nr | 헤드 
81 ssh
50 sudo
46 ls
45 ping
39 cd
29 nvidia-xrun
20 nmap
19 수출

이 예에서 ssh 지금까지 내 역사상 가장 많이 사용된 명령입니다.

탐색 및 파일 이름 지정

명령, 파일 이름 또는 폴더 이름을 입력하면 tab을 누를 수 있다는 것을 이미 알고 있을 것입니다. 키를 한 번 눌러 문구를 완성하세요. 정확히 일치하는 항목이 하나만 있는 경우 작동합니다. 그러나 tab 키를 누르면 두 번, 입력한 내용을 기반으로 모든 일치 항목을 표시합니다. 예:

[user@centos tmp]$ cd /lib 
lib/lib64/

이것은 파일 시스템 탐색에 매우 유용할 수 있습니다. 또 다른 유용한 트릭은 cdspell을 활성화하는 것입니다. 당신의 껍질에. shopt -s cdspell을 실행하면 됩니다. 명령. 오타를 수정하는 데 도움이 됩니다.

[user@centos 등]$ cd /tpm
/tmp
[user@centos tmp]$ cd /ect
/etc

완벽하지는 않지만 조금씩 도움이 됩니다!

디렉토리를 성공적으로 변경했으면 이전 디렉토리로 돌아가야 하는 경우 어떻게 합니까? 디렉토리 트리에 대해 깊이 들어가지 않는다면 이것은 큰 문제가 아닙니다. 그러나 /var/lib/flatpak/exports/share/applications/와 같이 상당히 깊은 경로에 있는 경우 , 다음을 입력할 수 있습니다.

cd /va<tab>/lib/fla<tab>/ex<tab>/sh<tab>/app<tab> 

다행히 Bash는 이전 디렉토리를 기억하므로 cd -를 입력하기만 하면 해당 디렉토리로 돌아갈 수 있습니다. . 다음과 같이 표시됩니다.

[user@centos 애플리케이션]$ pwd
/var/lib/flatpak/exports/share/applications

[user@centos 애플리케이션]$ cd /tmp
[ user@centos tmp]$ pwd
/tmp

[user@centos tmp]$ cd -
/var/lib/flatpak/exports/share/applications

그것은 모두 훌륭하지만 쉽게 탐색하고 싶은 디렉토리가 많다면 어떻게 될까요? Bash는 거기에서도 다루었습니다. 보다 효과적으로 탐색하는 데 도움이 되도록 설정할 수 있는 변수가 있습니다. 다음은 예입니다:

[user@centos 응용 프로그램]$ export CDPATH='~:/var/log:/etc'
[user@centos 응용 프로그램]$ cd hp
/etc/hp

[user@centos hp]$ cd 다운로드
/home/user/Downloads

[user@centos 다운로드]$ cd ansible
/etc/ansible

[user@centos 다운로드]$ cd 저널
/var/log/journal

위의 예에서 홈 디렉토리를 설정했습니다(물결표로 표시:~ ), /var/log/etc . 이러한 디렉토리의 최상위 레벨에 있는 모든 항목은 참조할 때 자동으로 채워집니다. CDPATH에 나열된 디렉토리의 기본이 아닌 디렉토리 찾을 수 없습니다. 예를 들어, 당신이 찾는 디렉토리가 /etc/ansible/facts.d/라면 cd facts.d를 입력해도 완료되지 않습니다. . 그 이유는 디렉토리가 ansible /etc 아래에 있습니다. , facts.d 아니다. 따라서 CDPATH 자주 액세스하는 트리의 맨 위로 이동하는 데 유용하지만 큰 폴더 구조를 탐색할 때는 관리하기가 번거로울 수 있습니다.

마지막으로 모든 사람이 한 번쯤은 하는 두 가지 일반적인 사용 사례인 파일 확장명 변경과 파일 이름 바꾸기에 대해 이야기해 보겠습니다. 언뜻 보기에는 동일한 것처럼 들릴 수 있지만 Bash는 이러한 작업을 수행하기 위해 몇 가지 다른 트릭을 제공합니다.

"완전한" 작업일 수 있지만 대부분의 사용자는 작업 중인 파일의 빠른 복사본을 만들어야 하는 시점이 있습니다. 대부분은 파일 이름을 정확히 복사하고 .old와 같은 파일 확장자를 추가하기만 하면 됩니다. 또는 .bak . Bash에는 이에 대한 빠른 단축키가 있습니다. spideroak_inotify_db.07pkh3와 같은 파일 이름이 있다고 가정합니다. 사본을 보관하려는 것입니다. 다음을 입력할 수 있습니다.

cp spideroak_inotify_db.07pkh3 spideroak_inotify_db.07pkh3.bak 

복사/붙여넣기 작업을 사용하거나, 탭 완료를 사용하거나, 바로 가기 중 하나를 사용하여 인수를 반복하거나, 단순히 전체 내용을 입력하여 이 작업을 빠르게 수행할 수 있습니다. 그러나 아래 명령은 입력하는 데 익숙해지면 훨씬 더 빨라질 것입니다.

cp spideroak_inotify_db.07pkh3{,.old} 

이것은 (추측할 수 있듯이) .old를 추가하여 파일을 복사합니다. 파일 확장자. 훌륭합니다. 하지만 한 번에 많은 수의 파일 이름을 바꾸고 싶습니다. 물론입니다. 할 수 있습니다. 이러한 문제를 처리하기 위해 for 루프를 작성합니다(사실 저는 종종 복잡한 작업을 수행합니다). 하지만 rename이라는 편리한 유틸리티가 있는데 왜 그럴까요? ? Debian/Ubuntu와 CentOS/Arch 간에 이 유틸리티의 사용에 약간의 차이가 있습니다. 데비안 기반 이름 바꾸기는 SED와 유사한 구문을 사용합니다.

user@ubuntu-1604:/tmp$ for x in `seq 1 5`; old_text_file_${x}.txt를 터치하십시오. 완료

user@ubuntu-1604:/tmp$ ls old_text_file_*
old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
old_text_file_2.txt old_text_file_4.txt

user@ubuntu-1604:/tmp$ 이름 바꾸기 '/old_text_file/shiney_new_doc/' *.txt

user@ubuntu-1604:/tmp$ ls shiney_new_doc_*
shiney_new_doc_1.txt Shiney_new_doc_3.txt Shiney_new_doc_5.txt
shiney_new_doc_2.txt Shiney_new_doc_4.txt

CentOS 또는 Arch 상자에서는 다음과 같이 보일 것입니다.

[user@centos /tmp]$ for x in `seq 1 5`; old_text_file_${x}.txt를 터치하십시오. 완료

[user@centos /tmp]$ ls old_text_file_*
old_text_file_1.txt old_text_file_3.txt old_text_file_5.txt
old_text_file_2.txt old_text_file_4.txt

[user@centos tmp]$ old_text_file centos_new_doc *.txt 이름 바꾸기

[user@centos tmp]$ ls centos_new_doc_*
centos_new_doc_1.txt centos_new_doc_3.txt centos_new_doc_5.txt
centos_new_doc .txt centos_new_doc_4.txt

Bash 키 바인딩

Bash에는 많은 내장 키보드 단축키가 있습니다. bind -p를 입력하여 목록을 찾을 수 있습니다. . 몇몇은 잘 알려져 있을 수 있지만 몇 가지를 강조하는 것이 유용할 것이라고 생각했습니다.

  • Ctrl + _ (실행 취소)
  • ctrl + t (두 문자 교환)
  • ALT + t (두 단어 바꾸기)
  • ALT + . (이전 명령의 마지막 인수를 인쇄합니다)
  • ctrl + x + * (글로브/별표 확장)
  • Ctrl + 화살표 (한 단어 앞으로 이동)
  • ALT + f (한 단어 앞으로 이동)
  • ALT + b (한 단어 뒤로 이동)
  • ctrl + x 뒤에 ctrl + e (실행 전에 편집할 수 있도록 편집기에서 명령 문자열을 엽니다.)
  • ctrl + e (끝으로 커서 이동)
  • Ctrl + (시작하려면 커서 이동)
  • ctrl + xx (줄의 반대쪽 끝으로 이동)
  • ctrl + u (커서 앞의 모든 것을 잘라냅니다)
  • ctrl + k (커서 뒤의 모든 것을 잘라냅니다)
  • ctrl + y (버퍼에서 붙여넣기)
  • ctrl + l (소문자 L, 화면 지우기)

나는 더 명백한 것에 대해 논의하지 않을 것입니다. 그러나 내가 찾은 가장 유용한 단축키 중 일부는 단어(또는 텍스트 섹션)를 삭제하고 실행 취소할 수 있는 단축키입니다. systemd를 사용하여 여러 서비스를 중지한다고 가정합니다. , 그러나 일부 작업이 완료된 후에 일부만 시작하려고 했습니다. 다음과 같이 할 수 있습니다.

systemctl stop httpd mariadb nfs smbd
<이전 명령을 가져오려면 위로 버튼을 누르십시오.>
<원하지 않는 인수를 제거하려면 'ctrl + w'를 사용하세요.>

그러나 하나를 너무 많이 제거하면 어떻게 될까요? 문제 없습니다. ctrl + _를 사용하기만 하면 됩니다. 마지막 편집을 취소합니다.

다른 잘라내기 명령을 사용하면 커서에서 줄의 끝 또는 시작 부분까지 모든 것을 빠르게 제거할 수 있습니다( Ctrl + k 사용 및 Ctrl + u , 각각). 이것은 나중에 붙여넣을 수 있도록 잘라낸 텍스트를 터미널 버퍼에 배치하는 추가 이점이 있습니다( ctrl + y 사용 ). 이러한 명령은 여기에서 시연하기 어렵기 때문에 직접 시도해 보시기 바랍니다.

마지막으로 컨테이너와 같은 제한된 환경에서 매우 편리할 수 있는 거의 사용되지 않는 키 조합을 언급하고 싶습니다. 이전 출력으로 인해 명령 모양이 깨져 보이는 경우 해결책이 있습니다. ctrl + x + ctrl + e 누르기 환경 변수 EDITOR에 설정된 편집기에서 명령을 엽니다. 이렇게 하면 (잠재적으로) 텍스트를 줄 바꿈할 수 있는 텍스트 편집기에서 길거나 왜곡된 명령을 편집할 수 있습니다. 일반 파일에서 작업할 때와 마찬가지로 작업을 저장하고 종료하면 편집기를 종료할 때 명령이 실행됩니다.

기타 도움말

Bash 셸에 색상을 표시하면 경험이 향상될 수 있습니다. 색상화가 활성화되지 않은 세션을 사용하는 경우 다음은 .bash_profile에 배치할 수 있는 일련의 명령입니다. 세션에 색상을 추가합니다. 다음은 매우 간단하며 자세한 설명이 필요하지 않습니다.

# 색상 활성화
eval "`dircolors -b`"

# ls가 항상 색상 및 유형 표시기를 사용하도록 강제합니다.
alias ls='ls -hF --color =auto'

# dir 명령이 Windows에서와 같이 작동하도록 합니다(긴 형식)
alias dir='ls --color=auto --format=long'

# 색상을 사용하여 grep 하이라이트 결과 만들기
export GREP_OPTIONS='--color=auto'

# LESS/MAN 페이지에 색상 추가
export LESS_TERMCAP_mb=$' \E[01;31m'
내보내기 LESS_TERMCAP_md=$'\E[01;33m'
내보내기 LESS_TERMCAP_me=$'\E[0m'
내보내기 LESS_TERMCAP_se=$'\E[0m '
내보내기 LESS_TERMCAP_so=$'\E[01;42;30m'
내보내기 LESS_TERMCAP_ue=$'\E[0m'
내보내기 LESS_TERMCAP_us=$'\E[01;36m'

Bash 내에서 다양한 옵션을 조정하는 것과 함께 몇 가지 깔끔한 트릭을 사용하여 시간을 절약할 수도 있습니다. 예를 들어, 각각의 종료 상태에 관계없이 두 개의 명령을 연속적으로 실행하려면 ;를 사용하십시오. 아래와 같이 명령을 분리합니다.

[user@centos /tmp]$ du -hsc * ; df -h 

이것은 단순히 현재 디렉토리의 각 파일이 차지하는 공간의 양을 계산한 다음(합산하여) 블록 장치당 디스크 사용량에 대해 시스템을 쿼리합니다. 이 명령은 du에 의해 생성된 오류와 상관없이 실행됩니다. 명령.

첫 번째 명령이 성공적으로 완료되었을 때 조치를 취하려면 어떻게 합니까? &&를 사용할 수 있습니다. 첫 번째 명령이 성공적인 종료 상태를 반환하는 경우에만 두 번째 명령을 실행하려는 것을 나타내는 약어입니다. 예를 들어 업데이트가 성공한 경우에만 시스템을 재부팅한다고 가정합니다.

[root@arch ~]$ pacman -Syu --noconfirm && reboot 

때때로 명령을 실행할 때 출력을 캡처하고 싶을 수 있습니다. 대부분의 사람들은 tee에 대해 알고 있습니다. 터미널과 파일 모두에 표준 출력을 복사하는 명령입니다. 그러나 예를 들어 strace에서 더 복잡한 출력을 캡처하려면 , I/O 리디렉션 작업을 시작해야 합니다. I/O 리디렉션에 대한 세부 정보는 이 짧은 기사의 범위를 벗어납니다. 그러나 우리의 목적을 위해 STDOUTSTDERR . 보고 있는 것을 정확하게 캡처하는 가장 좋은 방법은 둘을 하나의 파일로 결합하는 것입니다. 이렇게 하려면 2>&1을 사용하세요. 리디렉션.

[root@arch ~]$ strace -p 1140 > strace_output.txt 2>&1 

그러면 모든 관련 출력이 strace_output.txt라는 파일에 저장됩니다. 나중에 볼 수 있습니다.

때때로 장기 실행 명령 중에 작업 실행을 일시 중지해야 할 수도 있습니다. '중지' 단축키 ctrl + z를 사용할 수 있습니다. 작업을 중지(하지만 죽이지는 않음)합니다. 작업이 작업 대기열에 추가되지만 다시 시작할 때까지 더 이상 작업을 볼 수 없습니다. 이 작업은 전경 명령 fg를 사용하여 나중에 다시 시작할 수 있습니다. .

또한 ctrl + s를 사용하여 작업을 일시 중지할 수도 있습니다. . 작업과 그 출력은 터미널 포그라운드에 유지되며 셸 사용은 아니다. 사용자에게 반환됩니다. ctrl + q를 눌러 작업을 재개할 수 있습니다. .

많은 터미널이 열려 있는 그래픽 환경에서 작업하는 경우 출력을 복사하고 붙여넣을 수 있는 키보드 단축키가 있으면 편리할 수 있습니다. 이렇게 하려면 다음 단축키를 사용하십시오.

# 강조 표시된 텍스트 복사
ctrl + shift + c

# 버퍼에 텍스트 붙여넣기
ctrl + shift + v

실행 중인 명령의 출력에서 ​​다른 명령이 실행되고 있고 더 많은 정보를 얻고자 한다고 가정합니다. 이를 수행하는 몇 가지 방법이 있습니다. 이 명령이 경로 어딘가에 있으면 which를 실행할 수 있습니다. 디스크에서 해당 명령이 있는 위치를 찾는 명령:

[root@arch ~]$ which ls
/usr/bin/ls

이 정보를 사용하여 file로 바이너리를 검사할 수 있습니다. 명령:

[root@arch ~]$ 파일 /usr/bin/ls
/usr/bin/ls:ELF 64비트 LSB 파이 실행 x86-64, 버전 1(SYSV), 동적으로 링크됨, 인터프리터 / lib64/ld-linux-x86-64.so.2, GNU/Linux 3.2.0용, BuildID[sha1]=d4e02b88e596e4f82c6cc62a5bc4ce5827209a49, 제거됨

모든 종류의 정보를 볼 수 있지만 대부분의 사용자에게 가장 중요한 것은 ELF 64-bit LSB입니다. 무의미한 말. 이것은 본질적으로 스크립트나 다른 유형의 실행 파일과 달리 미리 컴파일된 바이너리임을 의미합니다. 명령을 검사하는 데 사용할 수 있는 관련 도구는 command입니다. 도구 자체. command -V <command>를 실행하기만 하면 됩니다. 다양한 유형의 정보를 제공합니다.

[root@arch ~]$ command -V ls
ls는 `ls --color=auto`로 별칭됩니다.

[root@arch ~]$ command -V bash
bash는 /usr/bin/bash입니다.

[root@arch ~]$ command -V shopt
shopt는 쉘 내장

마지막으로 가장 중요한 것은 특히 컨테이너로 작업하거나 지식이나 제어가 거의 없는 환경에서 내가 가장 좋아하는 트릭 중 하나는 echo입니다. 명령. 이 명령은 for 루프는 원격 포트가 열려 있는지 확인할 수 있도록 예상 시퀀스를 실행합니다. 구문은 열린 포트를 확인하기 위해 매우 간단합니다. echo > /dev/<udp or tcp>/<server ip>/<port> . 예:

user@ubuntu-1604:~$ echo> /dev/tcp/192.168.99.99/222
-bash:연결:연결이 거부되었습니다.
-bash:/dev/tcp/192.168.99.99/ 222:연결이 거부되었습니다.

user@ubuntu-1604:~$ echo> /dev/tcp/192.168.99.99/22

포트가 연결하려는 유형에 대해 닫혀 있으면 Connection refused이 표시됩니다. 메시지. 패킷이 성공적으로 전송되면 출력이 되지 않습니다.

이 팁을 통해 Bash를 더 효율적이고 즐겁게 사용할 수 있기를 바랍니다. 내가 여기에 나열한 것보다 Bash에는 더 많은 트릭이 숨겨져 있습니다. 가장 좋아하는 것은 무엇입니까?

부록 1. 다루는 팁과 요령 목록

# 히스토리 관련 
ctrl + r(역검색)
!! (마지막 명령 다시 실행)
!*(이전 명령의 인수 재사용)
!$(마지막 명령의 마지막 인수 사용)
shopt -s histappend(여러 터미널이 기록 파일에 쓸 수 있음) )
역사 | awk 'BEGIN {FS="[ \t]+|\\|"} {$3} 인쇄' | 정렬 | 유니크 -c | 정렬 -nr | head(가장 많이 사용되는 기록 명령 나열)

# 파일 및 탐색
cp /home/foo/realllylongname.cpp{,-old}
cd -
이름 변경 's/text_to_find/been_renamed/' *.txt
export CDPATH='/var/log:~' (변수는 cd 내장과 함께 사용됩니다.)

# bash 색상 지정

# 색상 활성화
eval "`dircolors -b`"
# ls가 항상 색상 및 유형 표시기를 사용하도록 강제합니다.
alias ls='ls -hF --color =auto'
# dir 명령이 Windows에서와 같이 작동하도록 합니다(긴 형식)
alias dir='ls --color=auto --format=long'
# grep 하이라이트 결과 만들기 색상 사용
내보내기 GREP_OPTIONS='--color=자동'

내보내기 LESS_TERMCAP_mb=$'\E[01;31m'
내보내기 LESS_TERMCAP_md=$'\E[01; 33m'
내보내기 LESS_TERMCAP_me=$'\E[0m'
내보내기 LESS_TERMCAP_se=$'\E[0m' # 정보 상자 종료
내보내기 LESS_TERMCAP_so=$'\E[01;42;30m' # 정보 상자 시작
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'

# Bash 단축키
    shopt -s cdspell(오타 수정)
    ctrl + _(실행 취소)
    ctrl + 화살표(단어 앞으로 이동)
    ctrl + a(시작하려면 커서 이동)
    ctrl + e(이동 커서를 끝으로 이동)
    ctrl + k(커서 뒤의 모든 항목 자르기)
    ctrl + l(화면 지우기)
    ctrl + q(포그라운드에 있는 명령 재개)
    ctrl + s(포그라운드에서 장기 실행 명령 일시중지)
    ctrl + t(두 문자 교환)
    ctrl + u(커서 앞의 모든 항목 잘라내기)
    ctrl + x + ctrl + e( 실행하기 전에 편집할 수 있도록 편집기에서 명령 문자열을 엽니다.)
    ctrl + x + * (glob/star 확장)
    ctrl + xx (줄의 반대쪽 끝으로 이동)
    ctrl + y(버퍼에서 붙여넣기)
    ctrl + shift + c/v(터미널에 복사/붙여넣기)

# 명령을 순서대로 실행
&&(실행 첫 번째가 성공하면 두 번째 명령)
; (첫 번째 명령의 성공 여부에 관계없이 두 번째 명령 실행)

# I/O 리디렉션
2>&1(stdout 및 stderr을 파일로 리디렉션)

# check 열린 포트의 경우
echo> /dev/tcp/ /
`` (백틱을 사용하여 쉘 아웃)

# 실행 파일 검사
which
file
command -V (가 내장, 바이너리 또는 별칭인지 알려줍니다)