맥북과 우분투 터미널에서 유용하게 쓰이는 명령어(리눅스 명령어)를 정리한다.
자세한 설명보다는 자주 잊어버리는 명령어를 찾기 쉽게 간단히 정리하였다.
목차
파일 및 디렉토리 관련
ls
ls -a
ls -l
ls -al # a, l 순서 상관 x
폴더나 파일의 목록을 출력한다.
- -a : 숨겨진 파일이나 디렉토리를 모두 표시한다.
- -l : 파일이나 폴더의 설명을 함께 출력한다.
- -al : a 옵션과 l 옵션을 함께 적용한다.
단순 목록 출력 뿐만 아니라, 특정 폴더에 포함된 파일이나 디렉토리의 개수를 다음 명령어를 통해 출력해볼 수 있다.
ls -l [dir_path] | grep ^- | wc -l # number of files
ls -l [dir_path] | grep ^d | wc -l # number of directories(folders)
# example
ls -l /root/dev/jjuke | grep ^- | wc -l # /root/dev/jjuke 폴더의 파일 개수
cd [경로]
cd ..
cd ~
cd -
특정 디렉토리(경로)에 진입한다.
- cd .. : 현재 디렉토리에서 상위 디렉토리로 이동한다.
- cd ~ : 사용자 홈 디렉토리로 이동한다.
- cd - : 전에 있었던 디렉토리로 이동한다.
또한 'cd + 공백' 후 tab을 누르면 경로가 자동완성된다.
rm [삭제파일 or 삭제 디렉토리]
rm -r [삭제파일 or 삭제 디렉토리]
rm -f [삭제파일 or 삭제 디렉토리]
rm -rf [삭제파일 or 삭제 디렉토리]
폴더나 파일을 삭제한다.
- rm -r [삭제파일 or 삭제 디렉토리] : 하위 경로의 파일을 삭제한다.
- rm -f [삭제파일 or 삭제 디렉토리] : 강제로 삭제한다.
- rm -rf [삭제파일 or 삭제 디렉토리] : r, f 옵션 모두 적용
- rm -v [삭제파일 or 삭제 디렉토리] : 삭제 후 결과를 보여준다.
cp [복사할 디렉토리/파일] [복사될 디렉토리/파일]
cp -r [복사할 디렉토리/파일] [복사될 디렉토리/파일]
cp -f [복사할 디렉토리/파일] [복사될 디렉토리/파일]
cp -rf [복사할 디렉토리/파일] [복사될 디렉토리/파일]
폴더나 파일을 복사한다.
- cp -r [복사할 디렉토리/파일] [복사될 디렉토리/파일] : 하위 디렉토리까지 모두 복사한다.
- cp -f [복사할 디렉토리/파일] [복사될 디렉토리/파일] : 복사될 파일(디렉토리)이름이 이미 존재할 경우, 강제로 덮어쓴다.
mv [옵션] [이동할 파일1] [이동할 파일2] ... [이동될 경로]
mv * [이동될 경로]
파일을 이동시킨다. (f 옵션은 위와 같으며, 폴더를 이동할 시 하위의 모든 파일 및 폴더도 같이 옮겨진다.)
- * : 현 위치의 모든 파일을 이동시킨다.
pwd
현재 디렉토리의 위치를 확인한다.
mkdir [생성할 디렉토리명]
새로운 디렉토리(폴더)를 생성한다.
touch [생성할파일명]
새로운 파일을 생성한다.
cat [파일명]
파일의 내용을 터미널에 출력한다.
wget [다운로드url]
Web Get의 약어로, 웹 상의 파일을 다운받을 때 사용한다.
find [경로] [옵션] [파일명]
find / -name '*.txt' # root에서부터 검색해서 확장자가 txt인 모든 파일 검색
find / -name 'test*' # 파일명이 test로 시작하는 모든 파일 검색
find / -name 'test' # 파일명이 test인 모든 파일 검색
find -name 'test' # 경로 입력하지 않을 시 해당 디렉토리부터 하위 디렉토리에서 검색
원하는 파일을 찾는 명령어이다.
응용하면 다음과 같이 유용하게 활용해볼 수 있다.
find /path/to/root -type d -name "*specific_name.txt" -exec rm -r {} +
find /path/to/root -type f -name "*specific_name.txt" -exec rm {} +
find /path/to/root -type f -name "*.zip" -exec unzip {} \;
find /path/to/root -type f -name "*specific_name.txt" | wc -l # 하위에서 전부 찾음
ls /path/to/root | grep "specific_name.txt" | wc -l # 해당 디렉토리에서만 찾음
위 두 명령어는 [/path/to/root]의 하위에서 "specific_name"이라는 이름이 포함된 폴더 혹은 "specific_name.txt"라는 이름이 포함된 파일을 찾아 해당 폴더나 파일을 지우는 명령어이고, 세 번째 명령어는 압축을 해제하는 명령어이다.
아래 명령어들은 각각 순서대로 해당 파일명을 갖는 파일을 path 하위에서 전부 찾거나, 해당 path에서만 찾아 개수를 출력한다.
-exec 옵션은 찾은 파일이나 폴더에 대해 어떠한 명령어를 실행해주겠다는 의미이고, {}는 찾은 파일 혹은 폴더의 path이다.
그리고 리눅스에서 \;는 unzip이라는 명령어를 여러 번 수행한다는 의미이고, +는 명령어에 찾은 path를 여러 번 argument로 준다는 의미이다. 예를 들어, 현재 폴더에 "a.zip", "b.zip", "c.zip", "a.txt", "b.txt", c.txt" 파일이 있다면 각각 다음과 같은 명령이 실행된다.
# find . -type f -name ".zip" unzip {} \;
unzip a.zip
unzip b.zip
unzip c.zip
# find . -type f -name ".zip unzip {} +
unzip a.zip b.zip c.zip # error!
# find . -type f -name ".txt" rm {} +
rm a.txt b.txt c.txt # remove multiple files
터미널 관련
clear
터미널의 내용을 모두 지우는 명령어이다.
command \
continue1 \
continue2
명령어가 길어질 경우, '\'를 사용하여 줄바꿈을 할 수 있다. 위 세 줄은 모두 하나의 명령어로 인식한다.
또한, 폴더명 또는 파일명에 공백이 포함되는 경우에는 경로 자체를 '' 또는 ""로 묶어주거나, '\ + 공백'으로 공백을 입력해줄 수 있다. 공백 자체가 터미널에서는 명령어의 일부로 인식하기 때문이다.
| # 명령과 명령을 연결
; # 여러 명령을 연결
&& # 앞에서부터 순차적으로 실행
|| # 앞에서부터 순차적으로 실행
터미널에서 다중 명령어의 종류는 위와 같다.
'|'는 두 명령 중 왼쪽 명령의 실행 결과를 오른쪽 명령어의 입력으로 전달하는 것이며, ';'는 연결된 명령을 왼쪽부터 차례대로 (여러 개) 실행하는 것이다.
또한 '&&'는 명령 실행에 실패할 경우 뒷 명령어를 실행하지 않지만(and), '||'는 반대로 명령 실행에 성공할 때 뒷 명령어를 실행하지 않는다.(or)
history
history | grep [검색할 단어]
history는 이전에 사용한 명령어들을 순서대로 확인하는 명령어이다.
'grep'이라는 명령어와 함께 사용하여 특정 단어를 사용했던 명령어 중에서 찾을 수 있다.
서버 관련
ssh [사용자 계정]@[원격지 ip] -p[포트] # 원격지 접속
exit # 접속 해제 (logout)
원격 서버 접속과 로그아웃 명령어이다.
-p 옵션을 통해 원격 호스트에 연결할 포트를 지정할 수 있다.
sudo adduser [계정 이름] # user 생성
sudo usermod -aG docker [계정 이름] # docker 사용 권한 등록
sudo passwd [계정 이름] # 계정 비밀번호 변경
sudo deluser [계정 이름] # 해당 계정 삭제
adduser를 통해 유저 생성을 해줄 수 있다.
usermod 명령어는 계정에 sudo 권한을 주는 명령어인데, 계정 생성 시 기본 그룹이 sudo이다. 대표적인 옵션은 다음과 같다.
- -d : 사용자의 홈 디렉토리 변경한다.
- -m : 홈 디렉토리 변경 시 기존 파일 및 디렉토리를 옮겨준다. (-d와 함께 쓰인다.)
- -g : 사용자의 그룹을 변경한다.
- -c : 사용자의 간단한 정보를 입력하거나 변경한다.
- -G : 추가로 다른 그룹에 속하게 한다.
- -a : -G와 같이 많이 사용하며, 2차 그룹을 지정(추가)한다.
sftp -P[포트번호] [계정 이름]@[ip주소] # SFTP 접속 - port option이 대문자 P임에 유의!
get [파일 이름 또는 경로] # 로컬 경로에 파일을 다운받음
put [파일 이름] # 로컬에서 파일 업로드
mget [파일 이름 또는 경로 1] [파일 이름 또는 경로 2] ... # 다수 파일 다운로드
mput [파일 이름 또는 경로 1] [파일 이름 또는 경로 2] ... # 다수 파일 업로드
ls # 접속한 sftp의 파일 목록
!ls # 로컬 서버의 파일 목록
![명령어] # 로컬 서버에서 실행
sftp SSH File Transfer Protocol (FTP)으로, 서버에 대한 보안 연결을 만드는 과정이다.
연결을 진행한 후, get 등의 명령어를 통해 파일 업로드 / 다운로드 등의 작업을 진행할 수 있다.
여기서 로컬이란, sftp 접속 명령을 실행했던 곳을 말하며, 경로는 접속 명령 당시의 경로가 된다.
파일 및 디렉토리 관리 (다운로드, 압축, 디스크 관리 등)
wget [option] ... [URL] ...
wget은 'web get'의 약어로, 웹 상의 파일을 다운로드 받을 수 있다.
자주 사용하는 옵션은 아래와 같다.
- -c : 다운로드 중단된 파일을 이어서 받는다.
여러 파일을 다운받기 위해서는 txt파일 내에 URL 여러 개를 입력하여 저장한 후, 아래와 같은 명령어를 사용한다.
vim download_list.txt # 다른 방법으로도 txt파일 생성 가능
URL1
URL2
URL3
URL4
# txt파일 저장 후
wget -i download_list.txt
간단한 vim 사용법은 링크를 참조하자. (또는 'vim 사용법'이라고 구글링하면 쉽게 배워볼 수 있을 것이다.)
리눅스에서 파일을 압축할 때에는 tar 명령어를 사용하며, 결과 파일의 확장자는 tar 또는 tar.gz가 된다.
tar은 엄밀히 말하면 단순히 파일들을 묶어주는(아카이빙) 역할을 한다. 따라서 묶은 파일들의 용량이 줄어들지 않는다. 이에 반해 tar.gz 확장자로 압축하게 되면 gzip을 통해 압축까지 해준다.
보통 확장자가 '.tar.gz'인 파일로 압축할 때에는 '-zcvf', 해당 파일을 해제할 때에는 '-zxvf' 옵션을 많이 사용한다.
tar [옵션] [압축 결과 파일명] [압축할 폴더명(경로)]
tar [옵션] [파일명]
옵션은 다음과 같다.
- -c : 파일을 tar로 묶어 생성한다.
- -x : 기존 tar 파일의 압축을 해제한다.
- -v : 압축 또는 해제할 때 과정을 화면에 출력한다.
- -f : 파일 이름을 지정한다.
- -C : 파일 경로를 지정한다.
- -z : gzip으로 압축 또는 해제한다.
압축할 폴더명은 절대 경로를 사용해주기보다, "cd" 명령어로 압축할 폴더의 상위 폴더까지 가서 명령어를 입력해주는 것이 편하다.
# tar 압축하기 (./example → ./example.tar)
tar -cvf example.tar example
# tar 압축 풀기(./example.tar → ./example)
tar -xvf example.tar
# tar.gz로 압축하기 (./example → ./example.tar.gz)
tar -zcvf example.tar.gz example
# tar.gz 압축파일 풀기 (./example.tar.gz → ./example)
tar -zxvf example.tar.gz
원하는 경로에 압축을 풀고 싶을 경우, 아래와 같이 사용한다.
tar -zxvf tarfile.tar.gz -C ./testdir/ # ./testdir 경로에 압축 풀기
df -h # 전체 디스크의 남은 용량
du -sh [directory path] # 특정 경로가 차지하는 용량
du -sh
원하는 directory가 차지하는 용량으라 사람이 보기 쉽게 정렬하여 알려준다.
현재 디렉토리 용량을 알고싶으면 아무것도 입력하지 않거나 directory path에 '.'을 입력해주면 된다.
최근댓글