Linux Command

Table of contents

  1. rename -a, hostnamectl
  2. lsb_release -a
  3. df -h
  4. du -sh
  5. lscpu
  6. free -h
  7. systemctl list-units -t service
  8. ps -ef
  9. curl
  10. sh 또는 ./
  11. tar
  12. Listen port 확인하기
    1. sudo netstat -ltup
    2. sudo ss -lntu
    3. sudo lsof -i:포트번호
  13. alias
  14. rsync
  15. diff
  16. vi 편집기
    1. yy , #yy
    2. p
    3. P
    4. dd, #dd
    5. /{키워드}
    6. ctrl+f , ctrl+b
    7. gg, G
    8. :set number, :set nonumber
    9. :{숫자}

rename -a, hostnamectl

리눅스 커널 정보를 출력한다.

~$ uname -a
Linux user-500R5K-501R5K-500R5Q 5.15.0-92-generic #102~20.04.1-Ubuntu SMP Mon Jan 15 13:09:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
~$ hostnamectl
   Static hostname: test-500R5K-501R5K-500R5Q
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 60c7a7e6eec344e095e9391aa8131f7d
           Boot ID: f54e9139e9f449bda63e721c9777a514
  Operating System: Ubuntu 20.04.6 LTS
            Kernel: Linux 5.15.0-92-generic
      Architecture: x86-64

lsb_release -a

배포 버전을 확인할 수 있다.

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.6 LTS
Release:	20.04
Codename:	focal

df -h

Disk 용량을 확인할 수 있다.

df : 디스크 남은 용량 확인 (기본 명령어)
df -k : 킬로바이트 단위로 남은 용량 확인
df -m : 메가 바이트 단위로 남은 용량 확인
df -h : 깔끔하게 보여줌
df . : 현재 디렉토리가 포함된 파티션의 남은 용량 확인
~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmperfs           785M  2.2M  783M   1% /run
/dev/sda2       117G   37G   75G  33% /
tmpfs           3.9G  143M  3.7G   4% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop0      160M  160M     0 100% /snap/chromium/2738
/dev/loop3       56M   56M     0 100% /snap/core18/2796

du -sh

선택한 폴더나 파일의 용량을 확인한다.

du : 현재 디렉토리에서 서브 디렉토리까지 용량 확인
du -a : 현재 디렉토리의 사용량 파일단위로 출력
du -s : 총 사용량
du -h : 깔끔하게 보여줌
du -sh * : 한단계 서브 디렉토리 기준으로 보여줌
$ du -sh Templates/
4.0K	Templates/

lscpu

~$ lscpu
Architecture:                       x86_64
CPU op-mode(s):                     32-bit, 64-bit
Byte Order:                         Little Endian
Address sizes:                      39 bits physical, 48 bits virtual
CPU(s):                             4
On-line CPU(s) list:                0-3
Thread(s) per core:                 2
Core(s) per socket:                 2

CPU 개수만 조회할 경우 grep -c processor /proc/cpuinfo 명령어를 활용할 수 있다.

free -h

메모리를 확인한다. -h 옵션은 사람이 읽기 쉬운 단위로 출력한다.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          7.7Gi       4.6Gi       216Mi       546Mi       2.8Gi       2.2Gi
Swap:            0B          0B          0B

systemctl list-units -t service

service 프로세스 항목과 상태를 조회한다.

user:~$ systemctl list-units -t service 
  UNIT                                                  LOAD   ACTIVE SUB     DESCRIPTION                                                       
  accounts-daemon.service                               loaded active running Accounts Service                                                  
  acpid.service                                         loaded active running ACPI event daemon                                                 
  alsa-restore.service                                  loaded active exited  Save/Restore Sound Card State   

ps -ef

전체적인 프로세스와 관련된 옵션이다.

  • -e : 커널 프로세스를 제외한 모든 프로세스를 보여준다.
  • f : UID, PID, PPID, C, STIME, TTY, TIME, CMD 등의 필드목록으로, CMD필드의 전체 명령어 형태를 보여준다.
root@master:~/labfile/service# ps -ef | grep docker
root      1485     1  1 Jan14 ?        00:11:50 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root      1939  6201  0 02:39 ?        00:00:00 runc --root /var/run/docker/runtime-runc/moby --log /run/containerd/io.containerd.runtime.v2.task/moby/f15696723766975a8c120d6cd8a6d77161135b013c13ed80c158331843cd1a6a/log.json --log-format json --systemd-cgroup exec --process /tmp/runc-process236202202 --detach --pid-file /run/containerd/io.containerd.runtime.v2.task/moby/f15696723766975a8c120d6cd8a6d77161135b013c13ed80c158331843cd1a6a/0a2cb1a2031224ed66bb0bb8b9a23bc295c7b0c7d29a37ed774f14d8072f8f6d.pid f15696723766975a8c120d6cd8a6d77161135b013c13ed80c158331843cd1a6a
root      1957 15646  0 02:39 pts/0    00:00:00 grep --color=auto docker
root@master:~/labfile/service#

curl

curl(client url) 명령어는 프로토콜들을 이용해 URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때 사용하기 위한 명령줄 도구 및 라이브러리이다.

쉽게말해 예를들어 자바스크립트 환경에서 REST API(http)를 테스트하고싶다면 보통 ajax, fetch 를 이용해 요청을 보내는 것과 같이, SHELL(커맨드라인 환경)에서 REST API(http) 테스트 하고 싶으면 curl 명령어를 이용하면 된다 라고 이해하면 된다.

-s : –silent 진행 내용이나 메시지들을 출력하지 않음
-f : –fail HTTP 오류 시 자동으로 실패 (출력 없음)

root@master:~/labfile/service# curl http://10.105.74.121 | grep Hello
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   318  100   318    0     0  63600      0 --:--:-- --:--:-- --:--:-- 63600
        <p>Hello,  hostname-server-7c85cc96dc-2j9lv</p> </blockquote>
root@master:~/labfile/service#
root@master:~/labfile/service#
root@master:~/labfile/service# curl -sf http://10.105.74.121 | grep Hello
        <p>Hello,  hostname-server-7c85cc96dc-2j9lv</p> </blockquote>
root@master:~/labfile/service#

sh 또는 ./

.sh 확장자가 나오길래, 뭐지 싶었는데 찾아보니 shell script 확장자였다.

실행하는 방법은 파일 권한을 변경 후 실행하면 된다…고 한다.

우선 파일 권한은 chmod 명령어를 사용하여 변경해준다.
744 등을 주어도 되지만, 간단하게
$chmod +x filename.sh <– 쓰기 권한 추가하기 로 실행이 된다.

sh filename.sh 또는 ./filename.sh 으로 실행한다.

root@master:~# ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
root@master:~#

tar

tar -zcvf target.tar.gz file1 file2 dir1 dir2 : 파일 압축
tar -zxvf target.tar.gz : 압축 해제

-c : –create 신규 아카이브 생성
-x : –extract 아카이브 풀기
-v : –verbose 처리 과정을 상세히 표시
-f : –file=ARCHIVE 파일을 대상으로 아카이빙

root@master:~# tar -zcvf testtar2.tar.gz a.out b.out
a.out
b.out
root@master:~#
root@master:~#
root@master:~# mv testtar1.tar.gz ./test/testtar1.tar.gz^C
root@master:~# mkdir testtar
root@master:~# mv testtar1.tar.gz ./testtar/testtar1.tar.gz
root@master:~#
root@master:~# cd testtar/
root@master:~/testtar# ls
testtar1.tar.gz
root@master:~/testtar# tar zxvf testtar1.tar.gz
a.out
b.out
root@master:~/testtar# ls
a.out  b.out  testtar1.tar.gz
root@docker1:~/labfile/dockerfile_dir# ls
add_data.tgz   Dockerfile    Dockerfile.11  Dockerfile.3  Dockerfile.5  host.html
copy_data.tgz  Dockerfile.1  Dockerfile.2   Dockerfile.4  Dockerfile.6  index.html
root@docker1:~/labfile/dockerfile_dir#

// 파일 압축
root@docker1:~/labfile/dockerfile_dir# tar -cvf target.tar Dockerfile.1 Dockerfile.2
Dockerfile.1
Dockerfile.2
root@docker1:~/labfile/dockerfile_dir# ls
add_data.tgz   Dockerfile.1   Dockerfile.3  Dockerfile.6  target.tar
copy_data.tgz  Dockerfile.11  Dockerfile.4  host.html
Dockerfile     Dockerfile.2   Dockerfile.5  index.html
root@docker1:~/labfile/dockerfile_dir#
root@docker1:~/labfile/dockerfile_dir#  

// 압축 해제
root@docker1:~/labfile/dockerfile_dir# tar -xvf target.tar
Dockerfile.1
Dockerfile.2
root@docker1:~/labfile/dockerfile_dir#
root@docker1:~/labfile/dockerfile_dir# ls
add_data.tgz   Dockerfile.1   Dockerfile.3  Dockerfile.6  target.tar
copy_data.tgz  Dockerfile.11  Dockerfile.4  host.html
Dockerfile     Dockerfile.2   Dockerfile.5  index.html
root@docker1:~/labfile/dockerfile_dir#

Listen port 확인하기

아래와 같이 3가지 방법으로 확인이 가능하다.

sudo netstat -ltup

Netstat 은 아래와 같이 open 되어있는 모든 listen port를 확인하는데 사용할 수 있다.

  • -l 옵션 : netstat에 모든 수신 소켓을 표시한다.
  • -t 옵션 : 모든 TCP 연결을 표시한다.
  • -u 옵션 : 모든 UDP 연결을 표시한다.
  • -p 옵션 : 포트에서 수신하는 어플리케이션/데몬의 이름을 표시한다.
  • -n 옵션 : 서비스 이름 대신 port 번호를 표시한다.
user@user:~$ sudo netstat -ltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN      899/cupsd           
tcp        0      0 localhost:37485         0.0.0.0:*               LISTEN      1034/containerd     
tcp        0      0 localhost:postgresql    0.0.0.0:*               LISTEN      1129/postgres       
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN      796/systemd-resolve 
tcp        0      0 localhost:4000          0.0.0.0:*               LISTEN      35497/ruby2.7       
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      899/cupsd           
tcp6       0      0 [::]:9090               [::]:*                  LISTEN      982/java            
udp        0      0 0.0.0.0:58210           0.0.0.0:*                           894/avahi-daemon: r 
udp        0      0 mdns.mcast.net:mdns     0.0.0.0:*                           2999/chrome         
udp        0      0 0.0.0.0:mdns            0.0.0.0:*                           894/avahi-daemon: r 
udp        0      0 testuser-500R5K-501:34197 0.0.0.0:*                           2999/chrome         
udp        0      0 localhost:domain        0.0.0.0:*                           796/systemd-resolve 
udp        0      0 0.0.0.0:631             0.0.0.0:*                           975/cups-browsed    
udp6       0      0 [::]:mdns               [::]:*                              894/avahi-daemon: r 
udp6       0      0 [::]:44146              [::]:*                              894/avahi-daemon: r 

sudo ss -lntu

netstat 과 유사하여, 위 옵션은 TCP/UDP 에대한 수신 대기 포트를 숫자로 표시한다.

~$ sudo ss -lntu
Netid            State             Recv-Q             Send-Q                         Local Address:Port                          Peer Address:Port            Process            
udp              UNCONN            0                  0                                    0.0.0.0:57192                              0.0.0.0:*                                  
udp              UNCONN            0                  0                              127.0.0.53%lo:53                                 0.0.0.0:*                                  
udp              UNCONN            0                  0                                    0.0.0.0:631                                0.0.0.0:*                                  
udp              UNCONN            0                  0                                224.0.0.251:5353                               0.0.0.0:*                                  
udp              UNCONN            0                  0                                224.0.0.251:5353                               0.0.0.0:*                                  
udp              UNCONN            0                  0                                    0.0.0.0:5353                               0.0.0.0:*                                  
udp              UNCONN            0                  0                                       [::]:38371                                 [::]:*                                  
udp              UNCONN            0                  0                                          *:1716                                     *:*                                  
udp              UNCONN            0                  0                                       [::]:5353                                  [::]:*                                  
tcp              LISTEN            0                  4096                               127.0.0.1:41397                              0.0.0.0:*                                  
tcp              LISTEN            0                  4096                           127.0.0.53%lo:53                                 0.0.0.0:*                                  
tcp              LISTEN            0                  511                                  0.0.0.0:8887                               0.0.0.0:*                                  
tcp              LISTEN            0                  5                                  127.0.0.1:631                                0.0.0.0:*                                  
tcp              LISTEN            0                  244                                127.0.0.1:5432                               0.0.0.0:*                                  
tcp              LISTEN            0                  4096                               127.0.0.1:4000                               0.0.0.0:*                                  
tcp              LISTEN            0                  50                                         *:1716                                     *:*                                  
tcp              LISTEN            0                  5                                      [::1]:631                                   [::]:*                                  
tcp              LISTEN            0                  511                                        *:15611                                    *:*                                  
tcp              LISTEN            0                  50                                         *:9090                                     *:*         

sudo lsof -i:포트번호

openfile 에서 확인하며 -i 옵션은 모든 네트워크 파일을 확인할 수 있다. 특정 포트를 확인하고 싶은 경우는 :포트번호를 입력한다.

~$ sudo lsof -i:4000
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby2.7 7795 root   11u  IPv4  87943      0t0  TCP localhost:4000 (LISTEN)

alias

# nano /root/.bashrc 파일에서 맨 아래 줄에 다음 내용 추가한다.

alias conrm='docker container rm -f $(docker container ps -aq)'

이후 ctrl+o (저장) > enter > ctrl+x (종료) 를 통해 저장한다.

rsync

rsync 는 Remote Sync 의 약자로, rsync 를 통해 서버 간의 동기화나 백업을 진행할 수 있다.

사용 방법은 아래와 같다.

rsync options src dest

-a, –archive : 압축 모드

-v, –verbose : 상세한 정보 출력

-h : human-readable, output numbers in a human-readable format

diff

diff 는 두 파일 사이의 내용을 비교하는 명령어이다.

-r : 두 디렉토리간의 차이점 출력, 서브디렉토리 까지 비교

rsync 와 diff 에 대한 예제를 아래와 같이 확인해 보자.

# 파일 비교
user1@user1-500R5K-501R5K-500R5Q:~$ ls ./Documents/
mystudy.md  _.naver.com

# rsync
user1@user1-500R5K-501R5K-500R5Q:~$ rsync -avh ./Documents/ ./backup
sending incremental file list
created directory ./backup
./
_.naver.com
mystudy.md

sent 8.07K bytes  received 88 bytes  16.31K bytes/sec
total size is 7.87K  speedup is 0.96
user1@user1-500R5K-501R5K-500R5Q:~$ 


# rsync 결과 확인 - 폴더와 함꼐 파일이 생성됨
user1@user1-500R5K-501R5K-500R5Q:~$ ls ./backup/
mystudy.md  _.naver.com
user1@user1-500R5K-501R5K-500R5Q:~$ 

# 파일 비교 - 내용이 없으므로 동일함 확인
user1@user1-500R5K-501R5K-500R5Q:~$ diff -r ./Documents/ ./backup/


# 파일 수정
user1@user1-500R5K-501R5K-500R5Q:~$ vi ./Documents/mystudy.md 


# 파일 비교 - 내용이 다름을 확인
user1@user1-500R5K-501R5K-500R5Q:~$ diff -r ./Documents/ ./backup/
diff -r ./Documents/mystudy.md ./backup/mystudy.md
2,9d1
< remote-theme: just-the-docs/just-the-docs
< update
< 1
< 2
< 3
< 
< 
< remote-theme: just-the-docs/just-the-docs
193c185
< [Spring Boot + Nginx 연동해서 배포하기](https://velog.io/@u-nij/Spring-Boot-Nginx-%EC%97%B0%EB%8F%99%ED%95%B4%EC%84%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0)
---
> [Spring Boot + Nginx 연동해서 배포하기](https://velog.io/@u-nij/Spring-Boot-Nginx-%EC%97%B0%EB%8F%99%ED%95%B4%EC%84%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0)
\ No newline at end of file

# rsync - 다른 부분을 rsync
user1@user1-500R5K-501R5K-500R5Q:~$ rsync -avh ./Documents/ ./backup
sending incremental file list
./
mystudy.md

sent 5.48K bytes  received 38 bytes  11.03K bytes/sec
total size is 7.97K  speedup is 1.44

# 파일 비교 - 내용 동일
user1@user1-500R5K-501R5K-500R5Q:~$ diff -r ./Documents/ ./backup/
user1@user1-500R5K-501R5K-500R5Q:~$ 
user1@user1-500R5K-501R5K-500R5Q:~$ 

vi 편집기

yy , #yy

커서가 위치한 행을 복사한다. # 에는 복사할 행의 수를 지정

p

커서가 위치한 행의 아래쪽에 붙인다.

P

커서가 위치한 행의 위쪽에 붙인다.

dd, #dd

커서가 위치한 행을 잘라둔다. 삭제와 같은 기능 , # 에는 잘라둘 행의 수를 지정한다.

/{키워드}

찾기 명령어로, 다음 찾기는 n 이전 찾기는 N 으로 찾을 수 있다.

ctrl+f , ctrl+b

다음 또는 이전 페이지로 이동한다.

gg, G

파일의 제일 첫 문장이나 끝 문장으로 이동한다.

:set number, :set nonumber

좌측에 라인번호를 표시하거나 숨길 수 있다.

:{숫자}

숫자 번째 문장으로 이동한다.