본문 바로가기
네이버클라우드/Linux

Linux 3일차 (2023-04-26) Linux 기초 명령어 -다양한 명령어, 강력한 CLI

by prometedor 2023. 4. 26.

다양한 명령어, 강력한 CLI

명령어 해석 순서

alias -> keyword -> function -> builtin -> enable -> 외부 명령어


#compgen -a | column  --> alias
: 현재 시스템에서 사용 가능한 모든 쉘 별칭(alias)을 컬럼 형태로 정렬하여 출력

#compgen -k | column   --> keyword
: 현재 시스템에서 사용 가능한 모든 쉘 키워드를 컬럼 형태로 정렬하여 출력

#compgen -c | column  --> command
: 현재 시스템에서 사용 가능한 모든 명령어를 컬럼 형태로 정렬하여 출력

#compgen -b | column  --> builtin 
: 현재 시스템에서 사용 가능한 모든 내장 명령어를 컬럼 형태로 정렬하여 출력

 

 

파일 내용 보기 

명령어 설명
cat 파일 내용 보기
tac 파일 내용 역순으로 출력하여 보기
nl 행 번호 붙여서 보기
head 위에서 부터 10줄 보기 (default 10줄)
tail 맨 아래에서부터 10줄 보기 (default 10줄)
more 긴 파일 끊어 읽을 때 
less 긴 파일 끊어 읽을 때  --> more 와 달리 파일을 한번에 읽어들이지 않기 때문에 더 빠른 속도를 내는 명령어

 

 

파일 내용 보기 

명령어 설명
$sort 문자열로 정렬
$sort -r 문자열로 거꾸로 정렬
$sort -n 숫자로 정렬
$sort -k key 변경
$wc word counter
$wc -l word counter line
$wc -c word counter char
   
$ls -l /var/log | sort -k 5 파일 크기 순 (문자열로 정렬)
$ls -l /var/log | sort -k 9 파일명 순
   
$sort -u 중복 제거

 

 

| 파이프(pipe)의 활용

명령어 설명
$sort /etc/passwd | nl /etc/passwd 파일의 내용을 알파벳 순으로 정렬하고, 정렬된 결과에 행 번호 부여
$who | sort who 결과를 정렬
$who | sort | nl who 결과를 행 번호 부여하여 정렬
$dpkg -l | nl 설치된 파일 행 번호 부여하여 리스트 출력
$dpkg -l | wc -l 설치된 파일 개수 출력

 

 

grep, 패턴 찾기

명령어 설명
$grep www /etc/services www 라는 문자열을 포함하는 라인만 검색하여 보여줌
$grep -c ftp /etc/services ftp 라는 문자열을 포함하는 행의 개수 보여줌 (c -> count)
$grep -v ftp /etc/services ftp 라는 문자열이 존재하지 않는 행만 보여줌
$grep -i ftp /etc/services 대소문자를 구분하지 않고 ftp 라는 문자열을 포함하는 행만 보여줌
$grep -n ftp /etc/services ftp 라는 문자열을 포함하는 행을 행 번호를 부여하여 보여줌
   
$ls -al / etc | grep "^d" 맨 앞(^) 이 d(directory) 인 것 리스트 자세히 출력
$ls -al / etc | grep "^-" 맨 앞(^) 이 -(file) 인 것 리스트 자세히 출력

 

 

pipe와 grep 함께 사용하기

명령어 설명
$ps -ef > pslist -e  --> 실행 중인 모든 프로세스의 정보 출력

-f  --> 프로세스에 대한 자세한 정보 출력(PPID 확인 가능)

 

 

redirection 입출력 재지향

명령어 설명
$cal > a2 표준 출력을 파일로 재 지향 (같은 이름 있으면 덮어쓰기 됨)
$who >> a3 파일 끝에 이어서 추가
$cat < d1 입력 재 지향  --> 파일 보기
$cat << A > k2 A 입력되기 전 까지 입력한 내용 k2 로 저장

 

 

문자열 다루기

$k="korean"
$echo ${#k}  --> 문자열의 길이 출력
6
$echo `expr length $k`  --> 문자열의 길이 출력
6

$echo '$k'
$k  --> $k 문자열 그대로 출력
$echo "$k"
korean  --> 변수 k의 문자열 출력
$echo $k
korean  --> 변수 k의 문자열 출력

$echo $k_seoul  --> error

$echo ${k}_seoul --> 변수를 감싸줘야 변수의 값을 출력
korean_seoul

파일명에 공백을 포함하려면 " " 로 감싸면 되지만 권장하지 않음

파싱(parsing)

$d=date
$echo $d
date
$d=`date`
$echo $d
2023년 4월 27일 목요일 01시 54분 15초 KST

 

숫자 다루기 - expr, let

$expr 20 + 3
23
$expr 20 \* 3  --> * 연산은 \* 으로 해야 됨
60
$echo $[3 + 5]
8
$echo $[3 * 5]  --> []로 묶을 경우 \ 없이도 연산 가능
15
$let a=5+4 && echo $a
9
$let b=5*4 && echo $b
20
$2 * 3  --> error

 

 

find 검색

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

Option : -name, -user, -group, -uid, -gid, -empty, -perm, -used ...
명령어 설명
-name 파일 이름으로 검색
-user 파일 소유자의 id에 따라서 검색
-uid 파일 소유자의 UID(user ID)에 따라 검색
-uid, -gid uid 와 gid 를 한 번에 검색  --> ex) find . -uid 1000 -gid 100
-newer 지정된 파일보다 최근에 수정된 파일을 검색
-used 파일이 마지막으로 엑세스된 시간에 따라 검색  ex) find . -used 7  --> 7일 이내에 액세스된 파일
-amin 파일이 마지막으로 수정된 시간에 따라 검색 ex) find . -amin -10  --> 10분 이내에 액세스된 파일
-atime access
-ctime change
-mtime modify
-nouser, -nogroup  
-empty 비어있는 파일 찾기
-size <+100M> 100MB 이상의 파일을 찾음
   
-type 파일 종류 별 d(directory), p(pipe), f(file), l(하드링크), s(심볼릭 링크)
-perm 권한
가능한 action

-delete, -ls, -print, -printf,

-exec, -execdir, -ok, -okdir

 

 

find 사용법

명령어 설명
$find / -name *.c 루트 디렉터리(/)에서 확장자가 .c인 파일을 검색확장자가 c 인 파일
$find / -uid 505  
$ find /run -type s -exec ls -AlF {} \; 2>/dev/null   /run 디렉터리에서 소켓 파일을 검색하고, ls 명령어를 사용하여 검색된 소켓 파일들의 상세 정보를 출력  --> socket : 소켓
$ find /run -type p -exec ls -AlF {} \; 2>/dev/null /run 디렉터리에서 파이프 파일을 검색하고, ls 명령어를 사용하여 검색된 소켓 파일들의 상세 정보를 출력  --> pipe : 프로세스 통신
$find /etc -atime 1 24 ~ 48 시간 사이 (하루 ~ 이틀)
$find /etc -atime +1 24시간 이전
$find /etc -atime -1 0 ~ 24 시간 사이
$find /etc -type d \etc 디렉터리에서 디렉터리 형식의 파일 찾기
$find ~ -perm 644 권한으로 찾기
$find /etc (-perm 753 -o -perm 645) /etc 디렉터리에서 권한이 753 또는 645인 파일을 검색
$find / -group root 루트 디렉터리(/)를 포함한 모든 디렉터리에서 그룹이 root인 파일과 디렉터리를 검색
$find / -perm -4000 루트 디렉터리(/)를 포함한 모든 디렉터리에서 setuid 권한이 설정된 파일을 검색하는 명령어입니다.
$find . -name *.c -atime +30 접근 시간으로 찾기  --> 현재 디렉터리(.)를 기준으로 이름이 .c로 끝나는 파일 중에서 액세스 시간(atime)이 30일 이전인 파일을 검색
$find /etc -size +1M 용량으로 찾기  --> /etc 디렉터리에서 크기가 1 메가바이트보다 큰 파일을 검색
$find /etc -size 3M 용량으로 찾기  --> /etc 디렉터리에서 크기가 3 메가바이트인 파일을 검색
$find /etc -size -10M 용량으로 찾기  --> /etc 디렉터리에서 크기가 10 메가바이트보다 작은 파일을 검색
   
find / -name *.py -exec ls -al {} > pyList \; / 디렉토리에서 이름이 .py로 끝나는 파일을 검색하여 해당 파일들의 ls -al 결과를 pyList 파일에 출력
-exec command {} \;

검색되었을 때 특정 명령을 수행함
{}    :  검색된 파일들을 의미
여러 개의 파일이 검색되면 하나씩 치환되면서 해당 명령 실행

;    :  검색된 결과가 여러 개일 때 한 번에 명령을 사용하기 위함임

\    :   ; escpae문자

** 참고

2>/dev/null  --> 표준 에러 출력을 /dev/null로 redirection 하여 에러 메시지를 무시

 

 

filter 사용법 : sort, cut, tr

sort  --> 정렬
-n 옵션 : 정수로 인식하여 정렬

sort -t: -k3 /etc/passwd
--> /etc/passwd 파일에서 : 구분자로 구분된 필드 중 3번째 필드를 기준으로 오름차순으로 정렬


cut  --> 파일의 특정 필드를 추출하는 기능

cut -d : -f 1,4,7 /etc/passwd  
--> /etc/passwd 파일에서 : 구분자로 구분된 1, 4, 7번째 필드를 추출하여 출력


tr  --> 문자 변환 기능

$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
$echo {a..z} | tr -d ' '  --> -d : 잘라내기
abcdefghijklmnopqrstuvwxyz
--> 알파벳 소문자 a부터 z까지의 문자열을 생성하고 이를 공백 없이 출력

 

filter 사용법 : uniq, shuf

$cat << A > my.txt  --> A 입력 시 A 이전 입력까지 my.txt 파일로 저장
> aaa
> aaa
> AAA
> bbb
> bbb
> bbb
> A  

uniq  --> 중복 제거
-c : count
-i : 대소문자 구분x

$uniq my.txt
aaa
AAA
bbb


shuf  --> 랜덤 뽑기
-e : 입력으로 받은 각각의 인자들을 하나의 요소로 간주하여 랜덤으로 선택하도록 지정
-i : 무작위로 선택할 대상의 범위를 지정

$ shuf -e "yang" "kim" "Hong"
kim
yang
Hong

$ shuf -i 1-10  --> 1부터 10까지의 숫자 중에서 랜덤으로 선택하여 출력
5
4
2
1
8
6
3
7
10
9
$ shuf -i 1-45 -n 6  --> 로또 번호 뽑기(1 ~ 45 까지 숫자 중에 6개 뽑기)
25
9
29
38
6
41
$ shuf -i 1-45 -n 6 | paste - - -     --> 3개씩 행 바꾸기(- : 3개)
42      2       37
33      43      10
j23@ace:~/d3/d30$ shuf -i 1-45 -n 6 | paste - - - - -    --> 5개씩 행 바꾸기(- : 5개)
40      24      8       1       39
11

 

 

리눅스에서 압축 유틸리티 사용법

리눅스에서 많이 사용하는 압축 툴

gzip <=> gunzip

bzip2 <=> bunzip2

xz <=> unxz

묶는 명령어 ar, tar 등이 많이 사용됨


디렉터리는 묶어서 압축

먼저 하나의 파일로 묶고, 묶인 파일을 압축

 

 

압축의 실제

 

 

tar 사용법

 https://fip.kaist.ac.kr > 패키지 > apache > httpd/ > httpd-2.4.57.tar.gz  링크 주소 복사 > 명령창에서 wget 뒤에 우클릭 해서 붙여넣고 실행

 

c(create) : 새로운 tar 파일 생성  --> 묶음

x(extract) : 풀기, 추출하기

v(verbose) : 상태 보여줌

z(gzip, gunzip) : 압축할 때는 gzip, 압축을 풀 때는 gunzip

t(list) : 실제로 압축을 풀지는 않고, 어떤 파일이 압축되어 있는지 보여줌

f(file) : file 필수 옵션


tar 명령어 사용 시 옵션 안에 - 를 생략할 수 있음

- 를 옵션 앞에 붙여서 사용하면 옵션들의 순서가 정확해야 함

명령어 설명
$tar xvfz h.tar.gz 묶음 해제 한 번에
$tar xvfz httpd-2.4.57.tar.gz 묶음 해제 한 번에
$tar cvfz hh.tar.gz httpd-2.4.57 묶음 압축 한 번에
$tar xvfJ httpd-2.4.57.tar.xz 묶음 해제 한 번에
$tar cvfJ hh.tar.xz httpd-2.4.57 묶음 압축 한 번에

 

 

윈도우 압축 파일 사용법

압축파일 : aa.zip

$zip -r aa.zip aa
$unzip -d aa aa.zip

 

 

압축 확장자 구분

*.tar.gz  --> gzip

*.tar.Z  --> compress

*tar.bz2 --> bzip2

*tar.xz  --> xz

 

ftp 관련 명령어

$ftp ftp.kaist.ac.kr  
ftp> ? ftp> pwd
ftp> ls ftp> !pwd
ftp> !ls ftp> ?get

 

expr, seq

명령어 설명
$expr 5 \& 0 & 연산  --> 출력 : 0
$expr 5 \| 0 or 연산  --> 출력 : 5
$expr 2 + 5 덧셈 연산  --> 출력 : 7
$expr 3 \* 5 곱셈 연산 --> 출력 : 15
$seq 5 1 ~ 5 까지 순서대로 출력
$seq 5 10 5 ~ 10 까지 순서대로 출력
$seq 0 2 20 0 ~ 20 까지 2칸씩 순서대로 출력
$seq 10 5 100 10 ~ 100 까지 5칸씩 순서대로 출력

 

기본 명령어 정리

명령 내용 명령어
파일 다루기 mkdir, rmdir, cat, touch, rm, mv, rename, cp
사용자 관련 w, who, whoami, who am i, users, login
도움말 보기 man, info, <command> -help, apropos, which, whatis, whereis
파일 내용 보기 cat, tac, nl, more, less, head, tail
허가 소유권 chmod, chown, chgrp, umask
날짜달력 date, cal
압출 관련 gzip, gunzip, bzip2, bunzip2, xz, unxz, tar
정수 다루기 bc, seq, factor, numfmt, expr, let
프로세스 관련 ps, top, nice, renice, kill, killall
filter cut, tr, uniq, shuf, grep, paste, split, join, expand, unexpand
시스템 관련 arch, nproc, hostname, hostid, uptime, uname, du, df, stat,
lsblk, lisinitramfs, lslogins, lsns, lsattr, lscpu, lsipc,
lsmem, lsof, lsusb, lshw, lslocks, lsmod, lspci
입・출력 echo, cat, printf

 

linux 에서 사용되는 명령어 종류

$compgen -k | paste - - - - -

$compgen -b | paste - - - - - - -

alias

$alias h=history
$h
$compgen -a

ㄴ h 만 입력해도 history 목록 확인 가능

function

$function myf()
{
  echo "hello"
  echo "hi"
}
$myf
hello
hi

ㄴ myf 를 입력해서 함수 호출 가능

 

 

표준 매뉴얼

1 실행 프로그램, 쉘 명령
2 system call (kernal 함수)
3 library call (system library)
4 특수 파일 (/dev)
5 파일 format set
6 게임 관련
7 macro package set
8 system 관리 명령
9 kernel routain (비표준)
   
  man page 만들고, 업데이트
  mandb  --> 매뉴얼 페이지들을 검색할 때 사용되는 데이터베이스
mandb -c  --> 새로운 매뉴얼 페이지들을 검색할 수 있도록 데이터베이스를 새로 만든다는 것을 의미

apropos http  --> 키워드나 표현을 검색하여 관련된 매뉴얼 페이지들의 목록을 출력
man -k http  --> 시스템에서 'http'와 관련된 매뉴얼 페이지들을 검색

** 주의
'apropos' 명령어와 유사한 결과를 출력하지만, 'man -k' 명령어는 정확히 키워드에 일치하는 페이지들만 검색

 

도움말 명령어 사용법

man <command>
info <command>
<command> --help
<command> --version
whereis <command>
whatis <command>
which <command>
man -k <command>
apropos <command>