리눅스 명령어 정리 – 리눅스(우분투)에서 많이 쓰는 명령어들을 정리하였습니다.
‘디렉토리 및 파일 관리’ 부터 ‘사용자 관리’, ‘서비스 관리’등 쓰임새를 기준으로 분류해보았습니다.
분류들은 사용 빈도를 기준으로 정렬하여 적었고, 분류 내 명령어들도 사용 빈도를 기준으로 적었습니다.
사용 빈도는 무슨 일을 하느냐에 따라 사람에 따라 다르기 때문에 지극히 주관적으로 정했습니다.
저는 서버 관리자가 아니기 때문에 개인적으로 자주 사용 안 하는 명령어들도 있습니다…!
정말 많이 사용되는 명령어들의 상세 사용법은 추가로 정리하도록 하겠습니다.
정리한 명령어들 사이에서도 대체 가능한 명령어가 존재하고 여기에 없더라도 대체 가능한 명령어가 있습니다.
중간에 파이프’|’ 명령어를 사용한 경우도 있습니다. 파이프 명령어는 이전 명령의 결과를 다음 명령어로 넘기는 기능입니다.
우선 리눅스를 처음 배우면서 명령어는 아니지만 가장 황당했던 단축키부터 적겠습니다.
가장 당황했던 단축키는 Ctrl + c 입니다…ㅎ
Ctrl + c : 리눅스에서 실행 중인 명령어나 프로세스를 중단하는 단축키 입니다. 윈도우와 동일하게 복사하기 단축키로 알고 썼던 기억이 있습니다…
바로 정리 시작하겠습니다.
리눅스 명령어 도움말
help [command]: 쉘 내장 명령어에 대한 도움말을 표시
whatis [command]: 명령어에 대한 간단한 한 줄 설명을 제공
info [command]: 는 명령어에 대한 추가 정보와 매뉴얼 페이지를 표시
man [command]:"manual"의 줄임말로, 명령어 및 프로그램에 대한 매뉴얼 페이지를 표시
대부분의 명령어는 –help 옵션을 통해 간략한 도움말을 표시하니 새로운 명령어가 있다면 –help 옵션을 사용해보는 것도 권장 드립니다.
디렉토리 및 파일 관리
cd [directory]: 디렉토리 이동
cd -: 이전 디렉토리로 바로 이동
ls: 현재 디렉토리의 파일 및 디렉토리 목록 출력
tree [directory]: 특정 디렉토리의 하위 디렉토리 및 파일을 트리 구조로 표시
mv [source] [destination]: 파일 이동/이름 변경
cp [source] [destination]: 파일 복사
rm [file]: 파일 삭제
rm -r [directory]: 디렉토리 삭제
find [directory] -name [filename]: 파일 검색
du -sh [directory]: 디렉토리의 전체 크기 확인
du -h: 하위 디렉토리 별 크기 확인
touch [filename]: 빈 파일 생성 또는 수정 시간 업데이트
file [filename]: 파일 형식 식별
stat [file]: 파일의 상세 정보 표시
파일 내용 표시 및 검색
cat 명령어의 경우 파일 내용 전체 표시이기 때문에 기가 단위의 파일을 열면 서버가 힘들어 할 수 있습니다.
이때는 꼭 cat이 아닌 head, tail, less 등의 명령어를 이용해야 합니다.
cat [file]: 파일 내용 전체 표시
head [filename]: 파일의 처음 부분 출력
head -n [filename]: 파일의 처음 지정된 개수의 줄만 출력
tail -f [filename]: 파일의 변경을 실시간으로 감시
tail -n [num_lines] [filename]: 파일의 끝에서부터 지정된 개수의 줄만 출력
less [filename]: 파일을 페이지 단위로 출력하며 스크롤 가능
grep [pattern] [file]: 파일에서 패턴 검색
colordiff [file1] [file2]: 두 파일 간의 차이점 표시
sed -n '5p' [file]: 파일에서 5번째 행만 표시
sed -n '65,74p' [file]: 파일에서 65~74 행만 표시
텍스트 편집기
nano [filename]: 간단한 텍스트 편집기
vim [filename]: 강력한 텍스트 편집기
명령어 찾기
which [command]: 실행 가능한 명령어의 전체 경로 표시
whereis [command]: 명령어, 소스 및 매뉴얼 페이지의 위치 표시 (메뉴얼의 위치도 보여줌)
쉘 변수 및 환경 변수 관리
printenv: 모든 환경 변수 표시
echo $PATH: 현재 환경 변수 PATH 표시
패키지 관리
dpkg -l: 설치된 패키지 목록 표시
sudo apt update: 패키지 목록 업데이트
sudo apt install [package]: 패키지 설치
sudo apt remove [package]: 패키지 삭제
sudo apt upgrade: 시스템에 설치된 패키지 업그레이드
sudo apt dist-upgrade: 시스템을 최신 버전으로 업그레이드
로그 관리
history: 쉘 명령어 히스토리 표시
!n: n번째 명령어 다시 실행
last: 시스템 로그인 기록 표시
dmesg: 시스템 메시지 확인
journalctl: 시스템 로그 확인
파일 압축 및 해제
윈도우에서는 zip만 썼는데 tar.gz, gzip 형태도 있습니다. 모두 압축하는데 사용되는 포맷입니다.
압축률을 최대로 높이고 싶으면 tar.gz을 사용하고 압축 및 해제 속도가 중요하면 zip 포맷을 사용합니다.
저는 파일의 개수에 따라 포맷을 선택하지는 않았는데 gzip은 단일 파일, zip과 tar.gz는 여러 파일과 폴더에 적합하다고도 하네요? ㅎ
tar -czvf [archive.tar.gz] [directory]: 디렉토리를 tar.gz로 압축
tar -xzvf [archive.tar.gz]: tar.gz 파일을 해제
zip [archive.zip] [file1] [file2]: 파일을 ZIP으로 압축
unzip [archive.zip]: ZIP 파일 해제
gzip [file]: 파일을 gzip 형식으로 압축
gunzip [file.gz] 또는 gzip -d [file.gz]: gzip으로 압축된 파일 해제
백그라운드 작업관리
저는 screen을 즐겨 씁니다. tmux도 좋을까요….?
screen: 가상 터미널 세션 관리
jobs: 현재 쉘에서 실행 중인 작업 표시
nohup [command] &: 백그라운드에서 명령 실행
tmux: 터미널 다중 창 및 세션 관리
사용자 및 권한 관리
su [username]: switch user의 줄임말. 현재 사용자 계정에서 로그아웃하지 않고 다른 사용자 계정으로 로그인하여 해당 사용자의 권한을 획득하는 명령어
passwd: 현재 사용자의 비밀번호 변경
id [username]: 사용자 정보 확인
sudo adduser [username]: 새로운 사용자 추가
sudo passwd [username]: 사용자 비밀번호 변경
sudo chown [user:group] [file]: 파일 소유자 및 그룹 변경
sudo chmod [permissions] [file]: 파일 권한 변경
프로세스 관리
htop: 인터랙티브한 프로세스 및 시스템 모니터링
top: 현재 실행 중인 프로세스 확인
ps aux: 실행 중인 프로세스 목록 표시
ps aux --sort=-%cpu: CPU 사용량이 높은 순으로 프로세스 정렬
ps aux --sort=-%mem: 메모리 사용량이 높은 순으로 프로세스 정렬
kill [process_id]: 프로세스 종료
kill -9 [process_id]: 강제로 프로세스 종료
nice: 프로세스의 우선순위 조절
renice: 실행 중인 프로세스의 우선순위 조절
pmap [process_id]: 프로세스의 메모리 맵 표시
ipcs: IPC(Inter-Process Communication) 상태 확인
iotop: 입출력이 높은 프로세스 목록 표시
renice [priority] -p [process_id]: 실행 중인 프로세스의 우선순위 변경
killall [process_name]: 프로세스 이름으로 모든 인스턴스 종료
pstree: 프로세스 계층 구조 트리 표시
서비스 관리
서버 관리자가 아니면 서비스 관련 명령어를 사용할 일은 적은 것 같습니다.
하지만 서비스가 갑자기 먹통이 되었을 때, 서버 사용자가 서비스 상태를 확인 후 보고하는 게 더 좋기 때문에 서비스 상태 확인 명령어는 외우는 게 좋을 것 같습니다.
systemctl list-units --type=service : 모든 서비스 목록 확인
service --status-all: 서비스가 실행 중인지와 부팅 시 자동 시작인지 확인
systemctl list-unit-files | grep enabled: 부팅 시 자동 실행되는 서비스 확인
systemctl start [service]: 서비스 시작
systemctl stop [service]: 서비스 정지
systemctl status [service]: 서비스 상태 확인
sudo systemctl enable [service]: 서비스를 부팅 시 자동 실행으로 설정
sudo systemctl disable [service]: 부팅 시 자동 실행 비활성화
sudo netstat -tulpn: 현재 열린 포트 및 활성화된 서비스 확인
시스템 정보 확인
free -h: 메모리 사용량 확인
cat /proc/meminfo: 메모리 정보 확인
htop: 시스템 리소스 모니터링
df -h: 디스크 공간 확인
mount: 현재 마운트된 파일 시스템 확인
uname -a: 시스템 정보 출력
lsb_release -a: Ubuntu 버전 확인
iostat: 디스크 I/O 통계 확인
ncdu: Ncurses 기반 디스크 사용량 시각화 도구
시간 및 날짜 관리
date: 현재 날짜와 시간 표시
timedatectl: 시스템 시간 및 날짜 설정
네트워크 관리
저는 개인적으로 써본 적이 거의 없는 명령어들…;
ping [hostname]: 호스트에 대한 ICMP 패킷 전송
ifconfig: 네트워크 인터페이스 정보 확인
ufw enable: UFW 방화벽 활성화
ufw allow [port]: 특정 포트 열기
ip a: 네트워크 인터페이스 및 IP 주소 확인
netstat -tuln: 현재 열린 포트 확인
nslookup [domain]: 도메인의 DNS 정보 확인
traceroute [host]: 라우터 경로 추적
lsof -i: 현재 열려있는 포트와 관련된 프로세스 목록 표시
시스템 종료 및 재부팅
개인 컴퓨터가 아니기에 서버 관리자가 아니면 절대로 사용할 일이 없는 명령어긴 합니다 ㅎ
하지만 OS 끄는 법 정도는 알아둬야겠죠?
shutdown: 시스템 종료
reboot: 시스템 재부팅