앞에서 설명한 명령어 외에 추가적인 명령어를 알아보자.
출력 결과를 파일에 저장하거나, 파일로부터 입력을 받는 등의 작업을 수행할 수 있다.
# ls의 결과를 file.txt로 저장
ls > file.txt
꺽새가 2개이면 기존 파일의 마지막에 결과를 추가한다.
# file.txt의 내용을 sort 명령에 입력으로 전달
sort < file.txt
# 해당 폴더에 대한 ls 명령의 에러 메세지를 error.txt로 저장
ls /nonexistent_directory 2> error.txt
윈도우의 바로가기와 비슷하다고 생각하면 된다.

# hardlink라는 이름의 하드 링크를 생성
ln source_file hardlink
# symlink라는 이름의 심볼릭 링크 생성
ln -s source_file symlink

-h옵션을 주면 조금더 보기 쉽게 표현해준다.


실시간으로(5초마다) 메모리 사용 상태를 확인할 수도 있다.
df는 disk filesystem의 약자로, 파일 시스템의 디스크 사용량을 확인하는 명령어이다.
df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 1.2M 797M 1% /run
/dev/sda1 154G 85G 59G 59% /
tmpfs 3.9G 31M 3.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/loop1 128K 128K 0 100% /snap/someapp/34
/dev/loop2 3.8M 3.8M 0 100% /snap/anotherapp/2
위와 같이 나오게 된다.
passwd는 사용자 암호를 변경하거나 새로운 암호를 설정하는 데 사용한다.
passwdpasswd [사용자]passwd -l [사용자]passwd -u [사용자]passwd -d [사용자]passwd -e [사용자]파일, 디렉토리의 액세스 권한을 말한다. 읽기(Read, r), 쓰기(Write, w), 실행(Execute, x) 총 3개의 권한이 존재한다.

위와 같은 형식으로 표현되며, 맨 앞 글자는 어떤 형태의 파일인지 알려주고 나머지는 세글자 단위로 표현된다.
첫 세글자는 소유자, 가운데 세글자는 그룹, 마지막 세글자는 기타 사용자 순서이다.
r, w, x중에 없는 권한이면 -표시로 나타낸다.
| 첫번째 문자 | 설명 |
|---|---|
| - | 일반 파일 |
| d | 디렉토리 |
| l | 심볼릭 링크 |
| b | 블록 스페셜 파일 |
| c | 문자 스페셜 파일 |
| p | 파이프 |
| s | 소켓 |
| 권한 위치 (순서) | 사용자 범주 |
|---|---|
| 2-4번째 문자 | 소유자 |
| 5-7번째 문자 | 그룹 |
| 8-10번째 문자 | 기타 사용자 |
| 권한 문자 | 권한 |
|---|---|
| r | 읽기 |
| w | 쓰기 |
| x | 실행 |
| - | 해당 권한 없음 |
chmod와 연산자를 사용하여 권한을 변경할 수 있다.
예를 들어, chmod g+w filename은 그룹에 쓰기 권한을 추가하는 명령이며 chmod a-r filename은 모든 사용자의 읽기 권한을 삭제하는 명령이다.
| 연산자 | 설명 |
|---|---|
| + | 권한 추가 |
| - | 권한 삭제 |
| = | 권한 설정 |
| 사용자 범주 | 설명 |
|---|---|
| u | 소유자 |
| g | 그룹 |
| o | 기타 사용자 |
| a | 모든 사용자 |
| 권한 | 설명 |
|---|---|
| r | 읽기 |
| w | 쓰기 |
| x | 실행 |
숫자 모드로도 변경할 수 있는데, 읽기는 4, 쓰기는 2, 실행은 1로 표현하며 합산하여 권한을 나타낸다.
예를 들어, chmod 755 filename은 소유자에게 읽기(4), 쓰기(2), 실행(1) 권한(합산하여 7)을, 그룹과 기타 사용자에게는 읽기(4)와 실행(1) 권한(합산하여 5)을 부여하는 명령이다.
자동화 작업을 수행하기 위한 스크립트 언어이다. 텍스트 파일로 작성되며, 이 파일에는 실행할 쉘 명령이 포함된다.
# 스크립트가 zsh쉘에서 실행되어야 함을 명시
#!/usr/bin/zsh
# echo : 문자열이나 변수를 출력하는 명령
echo "Hello, World!"
위 파일을 test.sh라는 파일로 저장했을 때, 쉘에서 ./test.sh로 실행하면 Hello, World! 가 출력된다.
태스크 : 작업의 가장 기본적인 단위이다. 사용자가 시스템에게 명령을 내릴 때 생성된다.프로세스 : 실행중인 프로그램이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 각 스레드는 독립적인 실행 경로를 가진다. 다른 프로세스의 공간에 직접 접근이 불가하다.잡 : 일련의 연관된 프로세스의 그룹이다. 쉘에서 명령어를 실행하면, 그 명령어는 잡으로 간주되며, 잡은 하나 이상의 프로세스로 구성될 수 있다. ps : Process Status의 약자로, 현재 시스템에서 실행 중인 프로세스의 정보를 출력해준다.ps -ef : 모든 프로세스의 정보를 볼 수 있음ps -u [사용자명] : 특정 사용자에 의해 실행된 프로세스를 보여줌ps -l : 프로세스의 자세한 정보 출력ps -p [프로세스 ID] : 특정 프로세스 ID에 대한 정보 출력앞에서 설명했던 grep과 함께 자주 사용된다.
# 현재 실행중인 모든 프로세스 중, 특정 프로세스의 정보만 출력
ps -ef | grep [process name]
현재 쉘에서 실행 중인 작업(job)의 목록을 보여준다. 주로 & 명령어로 백그라운드에서 실행하거나, ctrl+z를 사용하여 프로세스를 일시 중단한 다음 사용한다.
| 옵션 | 설명 |
|---|---|
| -l | 각 작업의 프로세스 ID를 같이 표시합니다. |
| -n | 마지막에 보여준 것 이후에 상태가 변경된 작업들만 표시합니다. |
| -p | 각 작업의 프로세스 ID만 표시합니다. |
| -r | 실행 중인 작업들만 표시합니다. |
| -s | 중지된 작업들만 표시합니다. |
$ sleep 100 &
[1] 12345
$ jobs
[1]+ Running sleep 100 &
$ jobs -l
[1]+ 12345 Running sleep 100 &
프로세스를 종료시키거나 강제로 종료시킬 때 사용한다.
kill [options] <pid>
만약, 강제로 종료시킨다면 다음과 같이 명령한다.
kill -9 1234
여기서 -9가 강제 종료 옵션이다.
프로세스간에 통신하는 방법 중 하나이다. 비동기적인 통지 시스템으로, 한 프로세스(또는 운영체제 자체)가 다른 프로세스에게 어떤 사건이 발생했음을 알리는데 사용한다.
switch user의 약자로, 로그인한 사용자의 ID를 다른 사용자의 ID로 변경한다.su - # root 사용자로 전환합니다.
su - john # 'john'이라는 사용자로 전환합니다.
su john # 'john'이라는 사용자로 전환합니다.
su -c whoami john # 'john'이라는 사용자로 전환하여 'whoami' 명령어를 실행하고 다시 원래 사용자로 돌아갑니다.
sudo apt-get update
sudo를 통해 실행할 수 있는 명령은 /etc/sudoers 파일에서 정의되며, 이 파일은 sudo visudo 명령을 통해 안전하게 편집할 수 있다.
새로 정의한 사용자를 sudoers에 추가하기 위해서는 다음과 같은 과정을 거친다.
sudo visudo
# visudo 파일 안에서 해당 라인 추가
[사용자 이름] ALL=(ALL:ALL) ALL
여기서 첫 번째 ALL은 모든 호스트에서, 두 번째 (ALL:ALL)은 모든 사용자와 그룹으로, 세 번째 ALL은 모든 명령을 실행할 수 있음을 의미한다.
systemctl은 서비스를 시작하고, 중지하고, 재시작하거나 그 상태를 확인하는 등의 작업을 수행할 수 있다.
# 서비스 시작
systemctl start [서비스이름]
# 서비스 중지
systemctl stop [서비스이름]
# 서비스 재시작
systemctl restart [서비스이름]
# 서비스 상태 확인
systemctl status [서비스이름]
# 시스템 부팅 시 서비스 자동 시작 설정
systemctl enable nginx.service
# 시스템 부팅 시 서비스 자동 시작 설정 해제
systemctl disable nginx.service
ifconfig : 네트워크 구성을 보거나 저장하는 데 사용한다.
sudo apt install net-tools를 설치하여 사용해야 하며
최근에는 ip 명령으로 대체되고 있다고 한다.
dig : DNS(Domain Name System) 서버에 쿼리를 전송하여 정보를 얻는 데에 사용한다.
$ dig google.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54830
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 299 IN A 216.58.210.14
;; Query time: 32 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 17 10:46:22 UTC 2017
;; MSG SIZE rcvd: 55
ip 주소 등을 확인 가능하다.
adduser : 사용자 생성 시 사용adduser [옵션] 사용자명
위 코드를 실행하면, 해당 사용자의 홈 디렉토리를 만들고, 비밀번호를 설정하고, 시스템에 필요한 다른 설정을 수행한다.
deluser : 사용자 제거# 사용자 제거
sudo deluser username
# 사용자 계정, 홈 디렉토리 삭제
sudo deluser --remove-home username
사용자들이 자원을 공유하는 데 사용하는 도구이다. 각 사용자는 기본 그룹에 속하며, 추가적으로 여러 그룹의 멤버가 될 수 있다. 관련 정보는 /etc/group 파일에 저장된다.
chown : 파일 또는 디렉토리의 소유자를 변경chown new_owner filename
# 한 번에 소유자와 그룹을 모두 변경
chown new_owner:new_group filename
groupadd : 그룹 생성sudo groupadd developers
usermod -a -G : 그룹에 사용자 추가sudo usermod -a -G developers john
여기서 -a는 사용자를 그룹에 추가하고, -G는 추가할 그룹을 지정하는 옵션이다.
groupdel : 그룹 삭제sudo groupdel developers
groups : 그룹 확인groups john
# 즉시 종료
sudo shutdown -h now
sudo poweroff
# m분 후 종료
sudo shutdown -h +m
# 즉시 재시작
sudo shutdown -r now
sudo reboot
# m분 후 재시작
sudo shutdown -r +m
~/.vimrc ~/.vimrc 파일을 수정하여 설정을 변경한다.sudo apt update
sudo apt install [package-name]
# 패키지의 구성 파일은 제거하지 않는 삭제
sudo apt remove [package-name]
# 완전 삭제
sudo apt purge [package-name]
# 삭제한 후 필요 없는 종속성 제거
sudo apt autoremove