다양한 명령어, 강력한 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> |
'네이버클라우드 > Linux' 카테고리의 다른 글
Linux 4일차 (2023-04-27) Linux System 관리 - 리눅스 설치(Ubuntu Linux) (2) | 2023.04.27 |
---|---|
Linux 3일차 (2023-04-26) Linux System 관리 - 리눅스 설치(Rocky Linux) (2) | 2023.04.26 |
Linux 3일차 (2023-04-26) Linux 입문 - 파일 분류 권한의 이해 (2) | 2023.04.26 |
Linux 2일차 (2023-04-25) (4) | 2023.04.26 |
Linux 1일차 (2023-04-24) (0) | 2023.04.24 |