[네이버클라우드] AIaaS 개발자 과정/Linux

[네이버클라우드캠프] 2023.4.26 Linux(2) - 다양한 명령어, 막강한 CLI

_꼬마돌 2023. 4. 30. 17:22
반응형

다양한 명령어, 강력한 CLI

명령어 해석 순서

alias
keyword
function
builtin
외부 명령어

#compgen -a | column
#compgen -k | column
#compgen -c | column
#compgen -b | column

 

sort, wc 정렬, word counter

  $sort /etc/passwd   sort는 파일이나 입력 스트림에서 텍스트를 정렬하는 유틸리티이다.
  /etc/passwd 파일 내의 각 줄을 알파벳순으로 정렬한 결과를 출력
  $sort -r /etc/passwd   -r 옵션이 붙으면 파일의 내용을 역순으로 정렬.
  $wc /etc/services   word counter
  $wc -l /etc/services   word counter line
  $wc -w /etc/services   word counter word
  $wc -c /etc/passwd   word counter character
  $ls -l /var/log | sort -n -k 5 /var/log 디렉토리 내부에 있는 파일들의 정보를 ls -l 명령어를 통해 출력하고, 이를 파일 크기(-k 5)를 기준으로 오름차순(-n)으로 정렬하여 출력.
파일 크기순
  $ls -l /var/log | sort -k 9 /var/log 디렉토리 내부에 있는 파일들의 정보를 ls -l 명령어를 통해 출력하고, 이를 파일 이름(-k 9)을 기준으로 정렬하여 출력.
파일명 순
  $sort -u 정렬된 결과에서 중복된 행을 제거하는 옵션
[root@kwc ~]# touch aaa
[root@kwc ~]# cat > aaa
apple
banana
cherry
apple
banana

[root@kwc ~]# sort aaa
apple
apple
banana
banana
cherry
# sort 했을 때 apple과 banana가 모두 출력된다.

[root@kwc ~]# sort -u aaa
apple
banana
cherry
# -u 옵션을 붙이고 sort하면 중복되는 항목들이 하나씩만 출력된다.

 

Pipe 파이프의 활용 ( | )

'|' 기호(파이프)는 한 명령어의 실행 결과를 다른 명령어의 입력으로 사용할 때 활용된다. 
이를 통해 여러 명령어를 조합하여 더 복잡한 작업을 수행할 수 있다. 
[root@kwc ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:997:994::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
flatpak:x:988:988:User for flatpak system helper:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
geoclue:x:990:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
pipewire:x:989:989:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
polkitd:x:991:991:User for polkitd:/:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
sssd:x:998:995:User for sssd:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-oom:x:992:992:systemd Userspace OOM Killer:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
# sort 명령어만 사용하여 /etc/passwd 파일의 내용을 정렬

[root@kwc ~]# sort /etc/passwd | nl
     1  adm:x:3:4:adm:/var/adm:/sbin/nologin
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  chrony:x:997:994::/var/lib/chrony:/sbin/nologin
     4  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5  dbus:x:81:81:System message bus:/:/sbin/nologin
     6  flatpak:x:988:988:User for flatpak system helper:/:/sbin/nologin
     7  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
     8  games:x:12:100:games:/usr/games:/sbin/nologin
     9  geoclue:x:990:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
    10  halt:x:7:0:halt:/sbin:/sbin/halt
    11  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    12  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    13  mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
    14  nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
    15  operator:x:11:0:operator:/root:/sbin/nologin
    16  pipewire:x:989:989:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
    17  polkitd:x:991:991:User for polkitd:/:/sbin/nologin
    18  root:x:0:0:root:/root:/bin/bash
    19  rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
    20  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    21  sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
    22  sssd:x:998:995:User for sssd:/:/sbin/nologin
    23  sync:x:5:0:sync:/sbin:/bin/sync
    24  systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
    25  systemd-oom:x:992:992:systemd Userspace OOM Killer:/:/usr/sbin/nologin
    26  tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
    # sort 명령어를 | 를 이용하여 nl 명령어와 연결해 실행. 
    # nl 명령어가 함께 실행 되어 행번호가 붙은 것을 볼 수 있다.

 

grep 패턴찾기

특정 문자열 패턴을 검색하여 출력해주는 명령어로, 매우 유용한 검색 도구 중 하나이다.
grep 명령어의 대표적인 옵션들
• ' -i: 대소문자를 구분하지 않음
• ' -v ' : 지정된 패턴을 포함하지 않는 행만 출력 
• ' -c ' 패턴이 일치하는 행의 수를 출력
• ' -n ' : 출력할 때 행의 번호를 함께 출력
• ' -r: 하위 디렉토리까지 모두 검색
• ' -l: 패턴이 포함된 파일 이름만 출력
• ' -w ' : 패턴과 정확히 일치하는 단어만 검색
• ' -E ' : 확장 정규식을 사용
• ' -F ' : 고정 문자열 검색을 사용

grep을 활용하여 /etc/services 에서 www가 포함된 문자열을 검색했다.

[root@kwc ~]# grep -c www /etc/services
9

# -c 옵션을 넣으면 www가 포함된 행의 개수만 보여준다.

 

파이프와 grep 함께 사용하기

grep과 pipe를 함께 사용하여 /etc 디렉터리 안의 디렉터리만 찾아서 출력했다.
이번엔 grep 과 pipe를 함께 이용해 /etc 디렉터리 안의 파일만 찾아서 출력했다.

 

whereis, whatis, which

•  whereis
   명령어나 실행 파일의 위치와 소스 코드와 같은 다른 파일들의 위치를 찾아주는 명령어.
   명령어과 관련된 다른 파일들의 위치를 찾고자 할 때 사용.

• which
  명령어나 실행 파일의 위치를 찾아주는 명령어. 보통 실행 가능한 파일의 위치를 찾는 데 사용됨.
  간단하게 실행 가능한 파일의 위치를 찾고자 할 때 사용.

•whatis
  매뉴얼 페이지에서 검색어에 해당하는 요약 정보를 출력하는 명령어.
  즉, 명령어나 프로그램이 어떤 역할을 수행하는지 요약된 설명을 보여줌.  
[root@kwc ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

[root@kwc ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

[root@kwc ~]# whatis ls
ls (1)               - list directory contents

 

문자열 다루기

[root@kwc ~]# K="Korean"
---
[root@kwc ~]# echo ${#K}                  # 문자열의 길이 출력
6                                         # Korean 문자열은 총 6개의 문자로 이루어져 있기 때문에 6이 출력됨

[root@kwc ~]# echo `expr length $K`       # 문자열의 길이를 출력하는 다른 방법 중 하나
6                                         # 주의할 점은 ` (back tick)을 사용해야 한다는 것이다.

[root@kwc ~]# echo '$K'                   
$K                                        # 문자 그대로 출력

[root@kwc ~]# echo "$K"
Korean                                    # 처음에 K="Korean"으로 지정한 값이 출력

[root@kwc ~]# echo $K
Korean                                    # ""를 사용한 것과 동일하게 지정한 값이 출력된다.

[root@kwc ~]# echo "$K 공백 포함하려면 큰따옴표 사용"
Korean 공백 포함하려면 큰따옴표 사용       # ""를 사용하면 공백(띄어쓰기)가 포함된 문자열을 출력할 수 있다.

 

파싱 (parsing)

문자열을 의미있는 토큰으로 분리하고 파스트리를 구현하는 과정.
[root@kwc ~]# d=date
[root@kwc ~]# echo $d
date


[root@kwc ~]# d=`date`                    # back tick ` 사용
[root@kwc ~]# echo $d
Sun Apr 30 15:48:05 KST 2023

 

숫자 다루기

[root@kwc ~]# 20 + 3
-bash: 20: command not found    # 수식만 입력하면 인식하지 못 함
[root@kwc ~]# expr 20 + 3 
23                              # 정상적으로 계산되어 출력됨

[root@kwc ~]# expr 20 * 3
expr: syntax error: unexpected argument ‘C++tri.cpp’  # 곱셈의 경우엔 \ 를 곱셈기호 * 앞에 입력해주어야 함
[root@kwc ~]# expr 20 \* 3
60                              

[root@kwc ~]# echo $[3 + 5]
8
[root@kwc ~]# echo $[3 * 5]
15                                 # echo를 이용해 이런 식으로도 입력해 쓸 수 있음

[root@kwc ~]# let a=5+4 && echo $a
9
[root@kwc ~]# let b=5*4 && echo $b
20                                # let과 echo를 이용

 

 

find 검색

find   [찾을 위치]   [option]   [수행할 명령]

option: -name, -user, -group, -uid, -gid, -empty, -perm, -used ...
---크기가 100M 이상인 파일 찾기---
[root@kwc ~]# find / -size +100M -exec ls -Alh {} \; 2>/dev/null
-r--------. 1 root root 128T Apr 30 14:27 /proc/kcore
-rw-r--r--. 1 root root 137M Apr 20 00:49 /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el9_1.x86_64/lib/modules

---비어있는 파일 찾기---
[root@kwc ~]# find / -empty 2>/dev/null | more
/boot/efi/EFI/rocky
/data
/dev/mqueue
/dev/hugepages
/dev/shm
/home/acd
/home/j
--More--

------------------------------------------------------------
2>/dev/null              # 오류 메세지를 화면에 출력하지 않도록 하는 구문.

-exec command {} \;      # 검색되었을 때 특정 명령을 수행한다.
                         # {} : 검색된 파일들을 의미. 여러개의 파일이 검색되면 하나씩 치환되면서 해당 명령 실행.
                         # \; : 검색된 결과가 여러개일 때 한 번에 명령을 사용하기 위함

 

Filter 사용법 

[root@kwc ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@kwc ~]# echo {a..z} | tr 'a-z' 'A-Z'
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z   # 소문자 알파벳을 대문자로 치환
[root@kwc ~]# echo {a..z} | tr 'kb' 'KB'
a B c d e f g h i j K l m n o p q r s t u v w x y z   # 소문자 알파벳중 k와 b만 대문자로 치환


[root@kwc ~]# echo "sdfJSDFSFJsdljf" | tr -d 'a-z'
JSDFSFJ                                               # 소문자를 제외한 결과 출력

[root@kwc ~]# echo "4455663333" | tr -s '3'
4455663                                               # 숫자 3을 찾아 중복된 문자를 하나로 줄이고 결과 출력.


[root@kwc ~]# shuf -e "tiny" "stone" "blog"
blog
tiny
stone
[root@kwc ~]# shuf -e "tiny" "stone" "blog"
stone
blog
tiny
[root@kwc ~]# shuf -e "tiny" "stone" "blog"
tiny
blog
stone                                                # 무작위로 섞어서 결과 출력


[root@kwc ~]# shuf -i 1-30 | column
9       10      8       3       22      29      30      19      4       6
14      2       24      17      25      16      21      20      27      13
7       26      5       23      15      12      11      28      18      1      
# 1~30까지 무작위로 섞은 후 행과 열로 구분하여 출력

[root@kwc ~]# shuf -i 1-45 -n 6
19
45
36
21
14
42
# 응용. 1-45까지의 수 중에서 무작위로 6개를 뽑아 출력. 복권 사기 전에 사용하면 좋을 것 같다.

[root@kwc ~]# shuf -i 1-45 -n 6 | paste - - - - - -
4       29      43      1       33      18            # 옆으로 나열하는 방법. -의 개수만큼 나열할 수 있다.

[root@kwc ~]# shuf -i 1-45 -n 6 | paste - - - - - - > num12
[root@kwc ~]# nl num12
     1  29      37      19      30      9       39    # num12 파일로 저장한 뒤 불러오기

 

압축

리눅스에서 많이 사용되는 압축 툴
gzip             ↔    gunzip
compress    ↔    uncompress
bzip2           ↔    bunzip2
xz                ↔    unxz

묶는 명령여 ar, tar 등이 많이 사용된다.
디렉터리는 묶어서 압축한다.
먼저 하나의 파일로 묵은 다음에 묶인 파일을 압축.
alias lh='ls -Alh' 

[root@kwc ~/d3]# touch a1 && cat > a1
Hello a1
NC7 3일차 복습중..                               # a1 파일 생성
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 26 Apr 30 16:55 a1  


[root@kwc ~/d3]# gzip a1                        # a1 파일 압축
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 50 Apr 30 16:55 a1.gz   # 압축파일이 생성됐다.
[root@kwc ~/d3]# gunzip a1                      # 압축풀기
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 26 Apr 30 16:55 a1      # 압축이 풀린 상태.


[root@kwc ~/d3]# bzip2 a1                       # bzip2로 압축해보았다.
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 78 Apr 30 16:55 a1.bz2  # 압축파일이 생성됐다.
[root@kwc ~/d3]# bunzip2 a1.bz2                 # bzip2 해제 할 땐 bunzip2
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 26 Apr 30 16:55 a1      # 압축해제


[root@kwc ~/d3]# xz a1                          # 이번엔 xz로 압축
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 84 Apr 30 16:55 a1.xz   # a1.xz 압축파일 생성
[root@kwc ~/d3]# unxz a1.xz                     # 압축해제
[root@kwc ~/d3]# lh
total 4.0K
-rw-r--r--. 1 root root 26 Apr 30 16:55 a1

 

tar 사용법

  옵션   설명
  c (create)   새로운 tar 파일 생성
  x (extract)   풀기, 추출하기
  v (verbose)   상태 보기
  z (gzip, gunzip)   압축은 gzip, 압축 해제는 gunzip
  t (list)   실제로 압축을 풀지는 않고, 어떤 파일이 압축되어 있는지 보여줌
  f (file)   필수옵션
tar 명령어 사용 시 옵션 앞에 -를 생략할 수 있다.
-를 옵션 앞에 붙여서 사용하면 옵션들의 순서가 정확해야 한다. 

 

압축 파일 확장자 구분

*.tar.gz       //    gzip
*.tar.Z        //     compress
*.tar.bz2    //     bzip2
*.tar.xz      //     xz

 

반응형