기타

[Unix] 리눅스 쉘 명령어 정리

QUERY 2021. 8. 18. 14:52

유닉스-로고-아이콘
유닉스 아이콘


유닉스(Unix)에는 Bourne Shell, Bash, fish, zsh 등 다양한 종류의 쉘(shell)이 있습니다. 하지만 대부분 그 사용법이 비슷하기 때문에, 이들 중 하나만 제대로 다룰 줄 알면, 다른 쉘들도 무리 없이 사용 가능합니다. 유닉스 계열의 리눅스(linux), bsd, 맥 os에서도 쉘 커맨드를 사용할 수 있기 때문에 유닉스 쉘을 공부하면 여러모로 유용합니다. 그럼 지금부터 코딩 작업을 하면서 자주 사용하는 16가지 쉘 명령어(shell command)에 대해서 알아보도록 하겠습니다.

1. man

cmd: man

명령어 man은 MANual 또는 user's MANual의 약자입니다. 사용하고자 하는 명령어의 사용법을 확인하고 싶은 경우, man 명령어를 사용하시면 됩니다. 예를 들어) man이라는 명령어의 사용법에 대해 알고 싶을 경우, man 명령어 뒤에 man을 붙여주시면 됩니다.

cmd: man man

그럼 man에 대한 메뉴얼을 확인해보실 수 있습니다. 매뉴얼을 확인 후 다시 터미널로 나가고 싶다면, q를 입력하면 됩니다.

 


2. clear

clear 명령어는 말 그대로 터미널에 있는 모든 텍스트를 깔끔하게 청소해주는 명령어입니다. 

 


3. pwd

명령어 pwd는 Print Working Directory의 약자입니다. 지금 내가 어떤 경로에 있는지 알아볼 수 있는 명령어로, 내가 현재 있는 곳의 전체 경로를 프린트해줍니다. 서버에서 로그를 남기거나, 스크립트를 작성할 때도 pwd 명령어를 많이 사용합니다.

 


4. ls

명령어 ls는 LiSt의 약자입니다. 우리 경로 안에 어떤 폴더와 파일들이 들어있는지 확인할 수 있는 명령어로 목록을 나타낼 때 사용합니다. 이렇게 현재 경로에 있는 정보를 보고 싶을 땐 ls를 사용하면 되고, 특정한 폴더 안에 있는 내용들을 보고 싶을 땐, ls 다음에 경로나 현재 폴더 안에 있는 폴더 이름을 적으면, 그 안에 있는 내용들을 볼 수 있습니다.

 

파일에 대해서 보다 자세한 내용들을 보고 싶다면, -l: long 프로 메시라는 옵션을 이용하면, 파일의 이름, 사이즈, 언제 조정됐는지, 파일 소유자의 언어 등도 확인할 수 있습니다.

cmd: ls -l 


만약, UI 상에서는 보여지지 않는 숨겨진 파일이나 디렉터리를 보고 싶은 경우, -a: all 옵션을 이용하면 숨겨진 파일들도 다 볼 수 있습니다.

cmd: ls -a


그리고 long 포맷과 all 옵션을 함께 사용하고 싶다면, ls 다음에 -la를 연이어 입력하시면 됩니다.

cmd: ls -la

 


5. open .

유닉스의 터미널에서 현재 경로를 파일 탐색기로 열고 싶을 땐, open 다음에 현재 경로를 의미하는.(닷)을 입력해주면 됩니다.  

cmd: open . 

 


6. cd

 

명령어 cd는 Change Directory의 약자입니다. 나의 현재 경로를 변경할 때 사용하는 명령어로, 폴더들을 자유자재로 넘나들 수 있도록 해줍니다. cd 다음에 현재 경로에 있는 폴더 이름을 작성하면, 그 폴더 안으로 이동하게 됩니다. 경로가 제대로 변경됐는지 확인하고 싶을 경우, pwd 명령어를 사용하면 확인해 볼 수 있습니다.

 

이때, 폴더 안에 ls -la 옵션으로 숨겨진 파일들을 확인해보면, '.'과 '..'을 발견할 수 있습니다. 여기서 '.'은 현재 위치한 경로를 나타내고 있고, '..'은 현재 위치한 경로의 바로 상위 경로를 의미합니다.

그밖에, ~ 모양도 있습니다. 명령어 cd ~를 사용하면, 현재 설정된 사용자의 최상위 홈 디렉터리로 이동하게 됩니다.

cmd: cd ~


또 하나 유용한 명령어가 있다면 바로, cd - 명령어입니다.

cmd: cd -

- 를 사용하면, 바로 이동하기 직전의 경로로 다시 돌아가게 됩니다. 만약 서로 다른 디렉터리를 오가며 작업해야 하는 경우, cd - 명령어를 사용하면, 양쪽 디렉터리를 손쉽게 오갈 수 있는 편리한 명령어입니다.

 


7. find

명령어 find는 파일 시스템에서 특정한 파일이나 디렉토리를 찾을 때 유용하게 사용할 수 있습니다. 만약, 내가 현재 있는 경로와 그 하위에 있는 모든 폴더에 한해서 모든 텍스트 파일을 찾고 싶다면,

cmd: find . -type file -name "*.txt"

현재 경로에서부터 시작해서 타입은 파일이고, 이름은 확장자가 txt인 모든 파일들을 찾고 싶다는 의미입니다.

보다 명확한 이해를 위해 추가적으로 하나 더 예를 들어보자면,

cmd: find . -type file -name "*.json"

현재 경로부터 시작해 그 안에 있는 모든 하위 경로에 한해서, 파일 타입이고, 확장자가 json인 모든 파일들을 찾으라는 의미입니다.

 

파일뿐만 아니라, 폴더(디렉터리)도 찾을 수 있습니다.

cmd: find . -type directory -name "*2"

현재 경로부터 시작해 그 안에 있는 모든 하위 경로에서, 타입이 디렉터리인 것을 찾는데, 이름이 2로 끝나는 모든 폴더를 찾는다는 의미입니다.

 


8. which

명령어 which는 내가 지금 실행하고자 하는 프로그램이 어디에 설치돼 있는지, 어디에 설정돼 있는지 경로를 확인할 때 사용할 수 있는 명령어입니다. 예를 들어, which node를 입력하면, 노드의 실행 경로를 확인해볼 수 있습니다. 또, which code를 입력하면, 비주얼 스튜디오의 경로를 확인해볼 수 있습니다.

 


9. touch

명령어 touch 다음에 원하는 파일 이름을 작성하면, 새로운 파일을 생성할 수 있습니다. touch 명령어는, 기존에 해당 이름의 파일이 존재하지 않는 경우, 해당 이름의 파일을 새로 생성하고, 기존에 이미 해당 이름의 파일이 존재하는 경우, 그 파일의 수정한 날짜가 터치를 한 시점으로 업데이트됩니다.

 


10. cat

명령어 cat을 이용하면, 파일 안에 있는 내용들을 빠르게 확인해볼 수 있습니다. cat 다음에 파일명 하나를 입력해도 되고, 여러 개의 파일명을 작성하는 것도 가능합니다. 예를 들어,

cmd: cat file1.txt file2.txt

이와 같이 file1.txt와 file2.txt를 연이어 입력할 경우, 해당 파일들 안에 있는 콘텐츠를 한눈에 확인하실 수 있습니다.

 


11. echo

명령어 echo 다음에 문자열을 입력하면, 문자열을 터미널에 띄울 수 있습니다. 사실 echo만으로는 크게 쓸모없는 명령어 같지만, 오른쪽 화살표 >와 같이 사용할 경우, 아주 유용하게 사용할 수 있습니다. 예를 들어,

cmd: echo "Hello World" > new_file3.txt

이는 new_file3.txt 파일이 없는 경우, 새로 생성해 Hello World를 삽입하라는 의미이고, 해당 파일이 이미 있는 경우, Hellow World를 덮어쓰는 기능을 합니다. 즉, 명령어 echo는 > 다음에 오는 파일을 새롭게 생성해서, echo 다음에 오는 "문자열"을 파일의 콘텐츠로 직접 넣어주는 기능을 합니다.

이때, 주의할 점이 있습니다. 오른쪽 화살표(>)를 하나만 입력할 경우, 해당 문자열을 덮어쓰는 기능만 하게 됩니다. 만약 덮어쓰고 싶은 게  아니라, append처럼 추가하고 싶을 경우, 오른쪽 화살표 두 개(>>)를 사용하시면 됩니다.

cmd: echo "Goodbye" >> new_file3.txt

그럼 new_file3.txt가 없는 경우, 파일을 생성해서 Goodbye 문자열을 삽입하게 되고, new_file3.txt가 이미 있는 경우, 기존 콘텐츠에는 영향을 주지 않은 채, 문자열 "Goodbye"를 추가로 입력하게 됩니다.

 


12. mkdir

명령어 mkdir은 MaKe DIRectory의 약자입니다. 디렉터리를 만들 수 있는 명령어로, mkdir 다음에 원하는 디렉터리 이름을 입력하면, 현재 경로에 새로운 디렉터리가 생성됩니다. 한 번에 원하는 모든 서브 디렉터리를 생성하고 싶을 경우, mkdir 다음에 -p 옵션을 이용해서 원하는 디렉토리 경로를 쭉 나열하면, 나열한 디렉터리들이 한 번에 모두 생성됩니다.

cmd: mkdir -p dir/subdir1/subdir2

현재 위치한 경로에 dir라는 디렉터리를 만들고, dir 안에 subdir1이라는 디렉터리, 또 subdir1이라는 디렉토리 안에 subdir2라는 디렉터리가 한 번에 만들어집니다.

 


13. cp

명령어 cp는 CoPy의 약자입니다. cp 다음에 원하는 파일명과 어디로 이동할지 원하는 경로를 작성하면, 해당 파일이 원하는 경로로 복사됩니다. 예를 들어,

cmd: cp file.txt dir/

file.txt 파일이 dir 디렉터리에 복사됩니다.

 


14. mv

명령어 mv는 MoVe의 약자입니다. 파일을 복사 없이 이동만하고 싶을 경우, mv 다음에 원하는 파일과 어디로 이동하고 싶은지, 원하는 경로를 작성하면, 복사 없이 해당 파일 자체가 해당 경로로 이동한다. 예를 들어,

cmd: mv file.txt dir/

file.txt 파일이 dir 폴더로 복사 없이 이동합니다.

만약, 명령어 cp와 명령어 mv 모두, 어떤 경로로의 이동/복사가 아니라 새로운 파일로의 이동/복사를 원하는 경우, 디렉토리명 대신 새로운 파일명을 입력해주면 됩니다.

 


15. rm

명령어 rm은 ReMove의 약자입니다. rm 다음에 원하는 파일 이름을 작성하면, 해당 파일이 삭제됩니다. 폴더를 삭제하고 싶은 경우, -r 옵션을 사용해야 합니다.

cmd: rm -r 폴더명

만약, -r 옵션 없이, rm 만으로 디렉터리를 삭제하면 경고 메시지가 뜨게 됩니다.

 


16. grep

명령어 grep은 Global Regular Expression Print의 약자입니다. 코딩을 할 때, 한 파일 안에서 키워드로 검색을 하거나, 또는 프로젝트 전체에 한해서 키워드 검색을 하는 경우가 많습니다. 바로 그럴 때, 터미널에서 동일하게 사용할 수 있는 명령어입니다. grep 다음에 검색하고자 하는 키워드를 작성합니다. 만약, 특정한 확장자를 대상으로 찾고 싶을 경우라면,

cmd: grep "world" *.txt

이때, "world"가 정확히 몇 번째 줄에 있는지 확인하고 싶은 경우, -n 옵션을 이용하면, 몇 번째 줄에 있는지 확인할 수 있습니다.

cmd: grep -n "world" *.txt

만약, 대소문자 상관없이 world에 대해서 검색하고 싶은 경우, -i :case-Insensitive 옵션을 사용하면 됩니다.

cmd: grep -ni "world" *.txt

만약, 현재 작업 중인 프로젝트 최상위 경로에서 world에 대한 정보를 전부 다 검색하고 싶은 경우, -r :Recursive 옵션을 사용하면 됩니다.

cmd: grep -nir "world" .

그럼 현재 경로뿐만 아니라, 그 하위에 있는 모든 서브 폴더 내에 존재하는 모든 world에 대해 검색할 수 있습니다.

 

 

지금까지 유닉스 쉘에서 자주 사용하는 16가지 명령어에 대해서 알아보았습니다. 처음엔 복잡하고 난해해 보일지 몰라도, 한 번 배워서 익혀두면 여기저기 유용하게 사용할 곳이 많습니다.