앞에서 설명한 명령어 외에 추가적인 명령어를 알아보자.
출력 결과를 파일에 저장하거나, 파일로부터 입력을 받는 등의 작업을 수행할 수 있다.
# 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
는 사용자 암호를 변경하거나 새로운 암호를 설정하는 데 사용한다.
passwd
passwd [사용자]
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