GNU+linux/shell

리눅스 명령어 모음 - 1편

ensuta 2021. 1. 13. 07:16
728x90
반응형

인터넷에서 검색 가능한 다양한 문서를 참고했습니다.

 

구글 검색 최상단부터 개인적인 경험까지 생각하여 공들였으나

모든 명령어와 그 옵션들은 정리할 수 없으니

많이 쓰는 명령어 옵션까지 알려드리겠습니다.

 

리눅스는 C언어로 쓰여진 Unix-like 운영체제로서 unix 명령어를 닯았습니다.

linux의 Shell은 C 언어를 매우 닮았습니다. C 언어 학습을 하면 리눅스 명령어에 대한 이해가 좋아집니다.

더 모르겠으면 --help 나 인터넷 검색으로 알아내세요

ArchWiki우분투 한국 커뮤니티 포럼 추천

 

같이 알아두면 좋은 것들:

와일드카드 활용 

멀티커맨드 활용 (파이프라인, 세미콜론, 파운드 사인)

리눅스 필수 에디터 vi 사용법

더 자세한 리눅스 모듈 관리 알아보기

리눅스 시스템 관리하기 (초급)

이 포스팅은 설명이나 연구기술 소개보단 북마크 해놓고 사전으로써 활용해주시면 좋습니다

브라우저의 찾기 기능 보통 (Ctrl + F)입니다.

계속 업데이트할 예정입니다

date

현재 날짜 출력

매우 간단한 명령어. 직접 해보세요! 

TLI 환경에서 시계 보고 싶을 때 사용한다

콤보로 사용하면 디지털시계로 사용 가능

 

clear 

화면 지우기,클리어,cls 리눅스

윈도우에서 cls 명령과 같은 것. 화면을 지워준다 

alias 로 cls를 등록해 사용할 수도 있다

 

exit

쉘 종료,프로그램 종료,로그아웃

많은 CLI 프로그램에서 exit를 입력하면 꺼진다

쉘 말고도 활용도가 높기 때문에 알아야 한다

정말 간단한 명령어.

 

vi (visual editor)

문서 편집, 파일 생성,파일 열기,메모장

간단한 문서 프로그램 실행 명령.

 

현재 순정 vi는 거의 사용하지 않고 파생 버전인 vim, nvi,elvis 등이 사용된다

마우스가 없던 시절의 편집기이므로 사용법이 어려우나

익숙해지면 매우 강력한 Tool 중 하나.

 

간단한 사용법만 알려준다면

$ vi <file name> ( 순정vi. 현재는 거의 사용하지 않는다)
$ vim <file name> ( 가장 많은 배포판이 사용하는 vim)
$ nvi <file name> (BSD 계열 OS가 사용한다고 한다)

vi는 시작 시 [명령모드] 이다.

' i ' , ' a ' , ' o ' 입력: [명령모드] -> [편집모드] 진입

문서 작성 후 ' Esc ': [편집모드] -> [명령모드]

' : ' (콜론) 입력: [명령모드] -> [ex 명령모드]

' w ' 저장 , ' q ' 끝내기 또는 'wq ' 저장하고 끝내기 

덮어쓰기 경고 발생 시 ' ! '  를 붙여 강제(Force) 명령한다

' w! ' 강제 저장 , ' q! ' 강제로 끝내기, ' wq! ' 강제로 저장 후 끝내기

자세한 설명은 vi 사용법을 참고하자

 

ping

호스트 도달 여부 테스트, 핑확인,핑 테스트

-c (횟수)를 많이 사용

$ ping -c 5 youtube.com         
PING youtube.com (172.217.161.78) 56(84) bytes of data.
64 bytes from nrt20s09-in-f14.1e100.net (172.217.161.78): icmp_seq=1 ttl=114 time=38.2 ms
64 bytes from nrt20s09-in-f14.1e100.net (172.217.161.78): icmp_seq=2 ttl=114 time=40.6 ms
64 bytes from nrt20s09-in-f14.1e100.net (172.217.161.78): icmp_seq=3 ttl=114 time=38.1 ms
64 bytes from nrt20s09-in-f14.1e100.net (172.217.161.78): icmp_seq=4 ttl=114 time=40.3 ms
64 bytes from nrt20s09-in-f14.1e100.net (172.217.161.78): icmp_seq=5 ttl=114 time=39.0 ms

--- youtube.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 38.130/39.243/40.580/1.036 ms

 

ls (list)

파일 나열, 파일 목록, 파일 리스트, 디렉터리 목록 확인

-a -l -r -R 옵션을 많이 사용

 

-a 

숨김 파일도 표시

 

-l

수직으로 나열

 

-r

역순 나열, 오름차순, 내림차순

 

-R

하위 디렉토리 표시

 

-u

atime(접근시간) 출력

 

-c

ctime(변경 시간) 출력

$ ls
bin  boot  dev  etc  home  lib  lib64  lost+found  
mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var

$ ls -al
total 60
drwxr-xr-x  17 root root  4096 Jan  4 22:07 .
drwxr-xr-x  17 root root  4096 Jan  4 22:07 ..
lrwxrwxrwx   1 root root     7 Sep  3 07:30 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Jan  1  1970 boot
drwxr-xr-x  22 root root  3900 Jan 12 15:55 dev
drwxr-xr-x  85 root root  4096 Jan 12 21:44 etc
drwxr-xr-x   3 root root  4096 Dec 17 17:59 home
lrwxrwxrwx   1 root root     7 Sep  3 07:30 lib -> usr/lib
lrwxrwxrwx   1 root root     7 Sep  3 07:30 lib64 -> usr/lib
drwx------   2 root root 16384 Dec 17 15:33 lost+found
drwxr-xr-x   4 root root  4096 Jan 12 01:13 mnt
drwxr-xr-x   8 root root  4096 Jan  4 22:27 opt
dr-xr-xr-x 213 root root     0 Jan 12 15:54 proc
drwxr-x---  10 root root  4096 Jan  8 03:26 root
drwxr-xr-x  26 root root   660 Jan 12 22:20 run
lrwxrwxrwx   1 root root     7 Sep  3 07:30 sbin -> usr/bin
lrwxrwxrwx   1 root root    19 Jan  4 22:07 snap -> /var/lib/snapd/snap
drwxr-xr-x   4 root root  4096 Dec 17 17:24 srv
dr-xr-xr-x  13 root root     0 Jan 12 15:54 sys
drwxrwxrwt  17 root root   380 Jan 13 04:19 tmp
drwxr-xr-x  10 root root  4096 Jan 11 22:17 usr
drwxr-xr-x  12 root root  4096 Jan 12 01:10 var

 

cp (copy)

파일 복사, 디렉터리 복사(옵션 -r 필요)

-r , -i , -u, -v 옵션을 많이 사용

 

-r 

디렉토리 전체 복사, 디렉토리 복사

 

-i

덮어쓰기 전에 묻기, 묻기

 

-u

최신 파일이라면 복사

 

-v 

 복사 진행 작업을 표시

$ ls
testdir  testfile

$ cp -i testfile testfile2
cp: overwrite 'testfile2'?

$ ls
testdir  testfile  testfile2

$ cp -r testdir/ testdir2/

$ ls
testdir  testdir2  testfile  testfile2

$ cp -rv testdir/ testdir2                                  
'testdir/asdf' -> 'testdir2/testdir/asdf'
'testdir/1234' -> 'testdir2/testdir/1234'
'testdir/zxcv' -> 'testdir2/testdir/zxcv'
'testdir/5678' -> 'testdir2/testdir/5678'

 

mv (move)

파일 이동, 디렉터리 이동, 위치 이동,이름 변경 (옵션 없음)

$ ls
testdir  testdir2  testfile  testfile2
$ mv testfile testdir 
$ ls testdir 
1234  5678  asdf  testfile  zxcv

 

mkdir (make directory)

디렉토리 생성, 폴더(folder) 생성

-p 옵션을 많이 사용

 

-p

하위 디렉터리까지 생성

 

-m

디렉토리 생성과 동시에 권한 설정

 

-v

디렉터리 생성 후 메세지 출력

$ ls
testfile

$ mkdir testdir
$ ls
testdir/  testfile


$ mkdir -p asdf/bac/cici/d/
$ ls -R a/
asdf/:
bac/

asdf/bac:
cici/
$ ls
testfile

$ mkdir testdir
$ ls
testdir/  testfile


$ mkdir -p asdf/bac/cici/d/
$ ls -R a/
asdf/:
bac/

asdf/bac:
cici/

asdf/bac/cici:
d/

$ mkdir -v testdir3/
mkdir: created directory 'testdir3/'


asdf/bac/cici:
d/

$ mkdir -v testdir3/
mkdir: created directory 'testdir3/'

$ mkdir -m 711 testdir4/
$ ls -al
total 24
drwxr-xr-x 6 *** users 4096 Jan 13 05:05 .
drwxr-xr-x 5 *** users 4096 Jan 13 04:37 ..
drwxr-xr-x 2 *** users 4096 Jan 13 05:04 testdir3
drwx--x--x 2 *** users 4096 Jan 13 05:05 testdir4

rm (remove)

파일 삭제, 디렉토리 삭제(-r 옵션 필요)

-r -i -f -v  옵션을 많이 사용

 

-r 

디렉토리 삭제 ( rmdir은 위험성이 커서 서버에선 자제한다)

 

-i

삭제 전에 묻기

 

-f 

강제로 삭제

 

-v

삭제하는 동안 삭제 내용 표시

 

※주의! 슈퍼 권한으로 $ rm -rf / 또는 $ rm -rf /* 명령을 절대 수행하지 마세요!! 보통 이중장치가 되어있습니다 

$ rm -ri test/movie_old.mp4 old/

 

cat (concatenate)

파일 내용 출력, 파일 병합,새로운 파일 생성

리다이렉션 연산자 콤보가 많이 쓰임

$ ls
files1  files2  files3

$ cat files1
1

$ cat files2
2

$ cat files3
3

$ cat files1 files2 > files1_2
$ ls
file1  files1_2  files2  files3

$ cat files1_2
1
2

$ cat files1 >> files2
$ cat files2
2
1

$ cat > files4
(파일 작성)


$ cat files4
hello!!!
world!!!

 

tail

파일의 뒷부분부터 출력, 로그 실시간 보기(-f 필요)

 

-(정수)

맨 끝부터 (정수)까지 출력

 

-F

파일 내용 변경 시 자동 갱신 (로그파일에 유용)

$ cat testfiles6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


$ tail -3 testfiles6
13
14
15


$ tail testfiles6
6
7
8
9
10
11
12
13
14
15


$ tail -F testfiles6
6
7
8
9
10
11
12
13
14
15
(명령어가 종료되지 않고 만약 파일 내용 변경시 자동갱신)

 

find

파일 검색, 디렉터리 검색 

exec와의 파이프라인 활용이 정말 많이 쓰인다

 

-name

이름으로 검색

 

-type d, -type f

파일 형식 지정 검색,디렉토리 또는 파일만 지정검색

$ ls
dir1/  dir3/  file1  file3  pic1.jpg  pic3.jpg
dir2/  dir4/  file2  file4  pic2.jpg  pic4.jpg


$ find ./ -name 'file1'
./file1


$ find ./ -name "*.jpg"
./pic1.jpg
./pic2.jpg
./pic3.jpg
./pic4.jpg

find ./ -name "*.jpg" -exec rm {} \;
$ ls
dir1/  dir2/  dir3/  dir4/  file1  file2  file3  file4

$ find ./ -type d
./
./dir1
./dir2
./dir3
./dir4


$ find ./ -type f
./file1
./file2
./file3
./file4

-exec <commands> \;

find 명령 수행 후 콤보로 다른 명령 수행

$ find ./testdir/* -exec echo '{}' \;
a.txt
b.txt
c.txt

(구문 해석)

find ./testdir/*  -- find 명령을 ./testdir/* 에서 찾아라

-exec  그후에(실행 후에) (옵션)

echo 출력하라

'{}' 찾은 모든 파일 또는 디렉터리를 (옵션)

\ find 출력하라

; 명령을 종료

 

출력:

a.txt

b.txt

c.txt

콤보 사용 예시 

 

 

kill

프로세스에 시그널 보내기

주의! $ kill -9 1 명령을 실행하지 마세요! PID: 1 init입니다

프로세스 종료뿐만 아니라 시그널 전송에 많이 쓰임

일반적으로 해당 Process에 문제가 있어서 다시 시작하고자 할 때에는 SIGHUP, SIGTERM, SIGKILL의 순서로 각각 시도하길 바란다

 

-l 

전체 시그널의 리스트 보기

 

-s 

시그널 특정. 시그널 번호 또는 시그널 이름으로 특정

 

-(정수)

-l 옵션의 목록 번호로 시그널 특정

-1 ( 프로세스 재활성화)

-9 (프로세스 강제 종료)

$ kill 1945

$ kill -9 1945

$ kill -HUP 1945

 

killall

프로세스에게 이름으로 종료 요구

 

-e 

긴 이름에 대한 정밀한 일치 요구

 

-i

대소문자 구분 없이 프로세스 이름 일치

 

-g

프로세스를 대신해 프로세스 그룹 종료

 

-l

전체 시그널의 리스트 보기

 

-u

해당 사용자로 실행된 프로세스만 종료

 

-v 

시그널 전송 성공 시 출력

 

-w

프로세스가 종료될 때까지 대기

 

$ killall -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

$ killall Discord
$

ps 

실행 중인 프로세스 표시, 프로세스 표시

-e -f -l 옵션을 많이 사용, grep와 파이프라인 콤보로 활용

 

-e

모든 프로세스 선별

 

-f

완전 출력

 

-l

긴 출력 포맷 지정

$ ps   
   PID TTY          TIME CMD
  25050 pts/0    00:00:00 ps

ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
.
.
.
.
*****     25063   11211  0 06:51 pts/0    00:00:00 ps -ef

chmod (change mode)

시스템 모드 변경, 권한 변경

 

-R 

파일과 디렉터리 모드 변경

 

레퍼런스와 콤보로 사용

권한이 적용되는 사용자들을 구분하기 위해서 사용

u 사용자 파일의 소유자
g 그룹 그 파일의 그룹 멤버인 사용자
o 다른 사람들 그 파일의 소유자나 혹은 그 그룹의 멤버가 아닌 사용자
a 모든 사람 위의 셋 모두, "ugo"와 같다

사용되는 연산자

+ 지정된 모드들은 지정된 클래스들에 더한다
- 지정된 클래스들로부터 지정된 모드들은 지운다
= 지정된 클래스들을 위해서 지정된 모드들이 정확한 모드들로 만들어지게 된다

모드

r 읽기 (read) 파일을 읽거나 디렉터리 안 내용물의 리스트를 보여준다
w 쓰기 (write) 파일이나 디렉터리에 쓴다
x 실행하기 (excute) 파일을 실행하거나 디렉터리 트리로 되돌아간다

모드 대신 세 자리 혹은 4자리 8진수도 가능

 

 

모드의 퍼미션 표기

d rwx rwx rwx
directory 라는 의미 Users 에 대한 퍼미션 Group 에 대한 퍼미션 Other 에 대한 퍼미션

2진수의 퍼미션 표기

r = 4  w = 2  x = 1

rwx = 7

rw- = 6

r-x = 5

rwx rwx rwx = 7 7 7

rwx r-x r-x = 7 5 5

$ chmod ug+rw sample
$ ls -ld sample
drw-rw----   2 unixguy  unixguy       96 Dec  8 12:53 sample

chmod a-rwx sample
$ ls -l sample
----------   2 unixguy  unixguy       96 Dec  8 12:53 sample

$ ls -ld sample2
drw-rw----   2 unixguy  unixguy       96 Dec  8 12:53 sample2
$ chmod ug=rx sample2
$ ls -ld sample2
dr-xr-x---   2 unixguy  unixguy       96 Dec  8 12:53 sample2

$ chmod 664 sample3
$ chmod 0664 sample3
$ chmod +r,-x,ug+w sample3
(3개 모두 같은 의미)

 

lsmod 

시스템에 설치된 모듈 목록 나열

$lsmod
Module                  Size  Used by
.
.
.
.
.
.
.

lsmod 는 시스템에 설치된 모듈 항목을 목록으로 나열하는 명령어로써 리눅스 모듈 관리의 성격을 지닌다.

사용법은 단순하게  lsmod 이나 파이프라인을 통한 lsmod | grep <strings> 등으로 활용될 수 있다. 

 

비슷한 성격을 지닌 명령어: insmod , rmmod , depmod , modprobe

더 자세한 리눅스 모듈 관리 알아보기

 

chroot (Change Root Directory)

루트 디렉토리 변경 , 컨테이너 가상화

 

$ chroot /tmp/new_root /bin/bash
bash-4.4# 

컨테이너 가상화 기능을 이용하여 루트 디렉토리를 변경하는 명령어.

이 명령을 실행하면 해당 프로세스는 /tmp/new_root 를 / 로 하는 컨테이너 내에서만 실행한다.

/tmp/new_root 이상의 파일에는 접근 권한이 없지만 이를 해킹을 통해 뚫는 것이 탈옥(JailBreaking)이라 한다.

 

쿨 부팅으로 하는 시스템 복구, 커널 개발 등에 쓰이는 명령어.  

자세한 활용법은 리눅스 커널패닉 복구하는법 에서 확인하세요.

 

mount / unmount

파일 시스템 마운트/언마운트 (루트 권한 필요)

 

기본 

마운트 된 모든 파티션 보기

$ mount
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
/tmp on /var/tmp type none (rw,noexec,nosuid,bind)
10.4.0.4:/srv/export/setup_server on /nfs/setup_server type nfs (ro,addr=10.4.0.4)

 

디스크/파티션 마운트 

$ mount /dev/hda2 /media/PHOTOS

 

마운트 해제

$ umount /dev/hda2
(물리 언마운트)

umount /media/PHOTOS
(경로 언마운트)

mount -o remount,rw /dev/hda2
(콤보 명령: 재마운트)

 

alias / unalias

문자열 치환, 별칭 사용,명령어 단축, 별명 제거

alias는 셸 세션이 생존하는 동안에만 지속

 

기본: 리스트 출력

$ alias
g=git
ga='git add'
gaa='git add --all'
gam='git am'
gama='git am --abort'
.
.
.
gr='git remote'
gra='git remote add'
gsps='git show --pretty=short --show-signature'
gsr='git svn rebase'
gss='git status -s'
gst='git status'
l='ls -lah'
la='ls -lAh'
ll='ls -lh'
ls='ls --color=tty'
lsa='ls -lah'
md='mkdir -p'
rd=rmdir

(git 관련 명령이 많은데 git 에서 자동으로 설정해준다)

 

alias 해제

 

-a 

모두 해제 옵션 (권장 안함)

$ unlias <alias name>
$ unlias -a

 

alias 만들기 

파이프라인, 와일드카드 등 기능 사용가능

$ alias <new alias>="<real command>"
$ alias todo="cat ~/todo.txt" (간단한 할일목록 띄우는 예제)
$ alias cls="clear" (clear 명령을 cls로 줄여쓰는 예제)
$ alias apachestart='/user/local/apache/bin/apachectl start' (아파치서버 시작예제)

alias 명령은 셸 세션이 생존하는 동안에만 지속되므로 영구설정을 위해서는

.bashrc 의 맨 하단에 커스텀 작성해야 한다

 

unrar 

rar 압축 풀기 / 압축

$ unrar <Options> <File name> <paths>


$ unrar x filename.rar
// 현재 경로로 추출

$ unrar e -kb filename.rar
// 깨진 상태 유지하며 풀기

$ unrar l filename.rar
// 압축파일 내부 내용 출력

$ unrar e filename.rar
// 폴더를 제외하고 덤프파일

$ unrar a filename.rar
// rar 파일 생성

$ unrar r filename.rar
// 압축파일 복구 또는 수정

$ unrar a -p filename.rar
// 비밀번호가 포함된 rar파일 생성

 

sed (stream editor)

텍스트 분해, 텍스트 변환

치환, 수정, 파이프라인 필터로 사용

 

기본 치환

$ sed 's/regxps/replacements/g'
inputFileName > outputFileName

등등 활용이 매우 다양한 명령어 이므로 각종 옵션과 콤보실행은 따로 찾아보는 것을 권장한다

 

반응형