프로그램

리눅스 정리 - 기본 명령어

secudb123 2025. 1. 6. 17:48

저번 글에선 리눅스를 VMware 가상 머신에 설치했다. 따라서 VMware에서 가상머신을 가동시킨 이후, Putty란 프로그램을 이용해 리눅스 터미널을 이용할 것이다.


 

*리눅스 터미널

Putty를 통해 리눅스 터미널에 root 계정으로 접속하면 기본적으로 아래 이미지와 같은 구조를 보인다.

 

[(계정명)@RLinux ~] 이 프롬프트이며, #까지 출력된다. root 계정이 아니면 #이 ~이 된다.

우리는 #(혹은 ~) 뒤에 커맨드를 입력하면 된다. 

 

지금부터 언급하는 모든 구조는 프롬프트를 생략하고, ~이 아닌 #으로만 표기한다.

 


 

<기호의 종류와 이름>

* = 아스타리크, 유닉스에서는 와일드 카드라고 한다. 윈도우에서 *.* 하면 현 디렉토리 안의 모든 파일이 선택된다. 유닉스에서는 * 만 입력하면 됨.

$ = 쉘

 |  = 파이프 라인


 

*리눅스 명령어 기본 구조

# command -단일문자옵션 --다중문자옵션

단일 문자로 구성된 옵션은 다수 사용이 가능하다.

(ex. -a와 -l을 사용하고 싶을때, # ls -al 로 커맨드 입력.)

 

* 종료 커맨드

Ctrl+D(=^D로 표기된다.)

 

*디렉토리

디렉토리란 파일을 담은 일종의 방이다. 최근 윈도우에선 폴더라는 표현으로도 사용한다.

디렉토리 및 파일의 표현에는 두가지 방법이 있다.

- 절대 경로 표현법: / 디렉토리(루트 디렉토리)를 기준으로 표현한다.

- 상대 경로 표현법: 현재 위치 (./)를 기준으로 표현한다.

리눅스의 디렉토리는 /(루트)를 엣지를 둔 트리 형태의 디렉토리를 구성하고 있다.

 

 

* 디렉토리의 표현

/ : 최상위 루트 디렉토리(절대 경로 표현의 기준)

./ : 현재 디렉토리(상대경로 표현의 기준 : 생략가능)

../ : 현재 디렉토리의 상위 디렉토리

~/ : 각 사용자의 홈 디렉토리

 

디렉토리는 파일을 담은 일종의 방이지만, 동시에 파일의 종류이기도 하다.

이름은 최대 255자이며, 대소문자를 구별한다. 더불어 보통의 파일과는 달리 확장자가 존재하지 않는다.

 


 

 

# cd [디렉토리 명]

해당 명령어는 아래와 같이 사용한다.

# cd directory

현재 위치 기준 하위 디렉토리로 'directory'가 존재하면 이동이 된다.

 


 

# pwd

현재 위치를 절대 경로 표현법으로 출력한다.

 


 

# rmdir [디렉토리명]

remove directory의 약자. 지정한 디렉토리를 삭제한다. 디렉토리 안에 파일이 있다면 삭제할 수 없다.

 


 

# mkdir [디렉토리명]

make directory의 약자. 현재 위치에 지정한 이름대로의 디렉토리를 생성한다. 생성된 디렉토리는 생성한 유저의 소유가 된다.

 

-p :복수 디렉토리를 생성, 띄어쓰기로 구별]

--parents : -p와 동일.

 

필요하다면 생성하고자 하는 상위의 디렉토리까지 생성한다.

 

#mkdir -p ./a/b

현재 위치에 a라는 디렉토리를 생성하고 그 안에 b를 만들라는 뜻이다.

터미널에서 확인해본 결과, a로 이동한 후 b로 이동하는 것이 가능했고, 이후 pwd로 현 위치를 확인하니 아래와 같이 /root/a/b 라고 알려줬다.

뜻대로 되었음

 


 

# [커맨드] --version

해당 커맨드의 커맨드의 버젼을 알려준다.

예를 들어 #mkdir --version을 입력하면 mkdir이란 커맨드의 정보를 알려주는 것이다.

 

 


 

# tree

디렉토리 구조를 출력한다. 이 뒤에 -d를 붙이면 디렉토리만 출력한다.

 


 

#ls

현재 디렉토리의 목록을 출력한다.

 

-a, -all : 숨겨진 파일의 목록까지 전부 출력

-l : 파일에 대한 정보를 자세히 출력

-R : 하위 디렉토리의 내용까지 출력

-h : 파일의 크기를 출력

-k : kb 단위로 파일의 크기 출력

-i : 파일의 inode 번호(고유 번호) 같이 출력

 

# ls -R

이런 식으로 사용하면 된다.

 

# ls *.txt

모든 txt 파일을 출력하라. *(아스타리크)는 해당하는 모든 파일을 셀렉하라는 의미.

 


 

* 리다이렉트

파일 입출력 지시자

> : 표준 출력 지시자. 명령 결과를 파일로 출력(저장)

>> : 추가 표준 출력 지시자. 명령 결과를 파일에 추가.

<  : 표준 입력 지시자. 파일의 내용을 명령의 입력값으로 사용 (디폴트로 모니터에 출력됨)

 


 

# cat [옵션] [출력 대상 파일] : 입출력 제어 명령어

-n: 행 단위 번호

-b : 공백라인 제외해 행 단위 번호

 

# cat a.txt

-> a.txt 를 입력해 모니터에 출력(디폴트 출력)한다.

 

# cat < a.txt > b.txt

->a. txt의 내용을 b.txt 에 출력한다.

 

# cat < /dev/null > a.txt

-> /dev/null 의 내용을 a.txt에 출력한다.

# cat > b.txt

-> b.txt 를 생성하고 입력을 받는다. 커널에 내용을 입력한다.

-> Ctrl+c 혹은 Ctrl+d 로 종료 가능. 두 기능에는 차이점이 있다.

 

 

 

행 변환 없이 Ctrl+D를 하면 마지막 행이 소실되지 않고, 마지막 행 바로 뒤에 프롬프트가 띄워진다.

Ctrl+C는 마지막 행을 소실시키고 공백으로 만든다. 그래서 문서의 마지막 행 다음에 프롬프트가 띄워진다.

 


 

# echo

환경 변수나 입력 내용을 출력

 

# echo (뭔가를 적어요)

-> (뭔가를 적어요)라는 문자열이 출력된다

 

# echo $HOME

-> $HOME의 결과가 출력된다. $HOME은 현재 사용자의 홈디렉토리를 출력한다.

-> 결과적으로 /root가 출력됨.

 

# echo " $HOME"

-> 위와 동일.

 

# echo ' $HOME'

-> $HOME이 출력된다. ' ' 은 환경변수를 문자열로 변경한다.

 

$(쉘)은 변수 연산자이다.

# export TEST="AA"

- export 커맨드를 이용해 변수 TEST는 "AA"로 선언되었다.

이때 #echo $TEST를 커널에 입력하면, 변수 값인 AA가 출력된다.

 

# echo 3 > ./somewhere/a.txt

3이란 값을 [./somewhere/a.txt]에 출력한다.

 


 

 

#cp

파일이나 디렉토리를 복사한다.

-a : 원본의 속성 유지

-r : 하위 디렉토리나 파일 모두 복사

-f : 강제 실행(안 물어봄)

-p : 파일의 소유, 권한 등을 보존한 채 복사

-u : 새 파일 덮어쓰기 금지

 

#cp -arpf  * /test/ <-디렉토리 지정시에는 뒤에도 슬래시 필요. 습관을 들여야 함.

#cp -arpf  * /test <-파일 지정시에는 불 필요. 혹은 확장자 입력.

 

# cp a.txt c.txt

a.txt를 c.txt란 이름으로 복사한다.

 

현재 디렉토리의 모든 파일(*)을 복사(cp)한다. 복사 경로는 ./test/. 이름은 그대로.

옵션은 원본 속성 유지+하위 파일 전부 복사+강제 실행(권한 요구 X)+파일의 소유 및 권환 보존. 

 

#cp -arpf  a.txt ./temp/b.txt

현재 디렉토리의 a.txt를 ./temp/에 b.txt란 이름으로 복사.

복사 파일명 지정을 하지 않으면 이름은 동일하게 복사된다.

 


 

#mv

파일이나 디렉토리를 이동한다.

파일 혹은 디렉토리의 이름을 변경할때도 사용한다(동일 경로에 다른 이름으로 이동 선언 하면 변경 됨)

-리눅스의 기본 이름 변경 명령어: rename

 

-f : 강제 실행(안 물어봄)

-b : 파일이 덮어쓰여질 경우 백업파일 생성

-d : 디렉토리 삭제

-i : 삭제 전 삭제여부 확인

-v : 백업파일 사용

 


 

#rm

파일이나 디렉토리를 삭제한다.

-f : 강제 실행

-r : 대상 중에 디렉토리가 있는 경우 디렉토리도 삭제(옵션 부여하지 않을 경우 디렉토리라고 삭제 안 해준다.)

 

ex)

#rm -f a.txt

 

#rm *

현 디렉토리의 모든것을 삭제해라

 


 

#ln

링크 파일을 생성한다(soft, hard)

 

-s : soft link 생성(디렉토리는 soft 링크만 가능하다.)

-f : 대상이 존재하는 경우 지우고 새로 link 파일 생성

 

*심볼릭 링크(=소프트 링크) 

: 원본 파일의 바로가기 단축 아이콘. 별도의 inode를 지닌다. 링크 카운트가 증가하지 않고, 용량은 '링크 파일'의 용량이다.

a.txt의 심볼릭 링크인 b.txt가 생성되었다. 그 상황에서 a.txt를 지우면, b.txt는 쓰레기 파일(깨진 파일)이 된다.

 

* 하드 링크

: 원본파일과 동일한 inode를 지닌 아이콘. 별개의 존재이나 곧 동일하다. 서로 다른 파일 시스템에서는 생성이 불가하다. 링크 카운트가 증가된다. 원본 파일과 용량이 동일하다.

a.txt의 심볼릭 링크인 c.txt가 생성되었다. 그 상황에서 a.txt를 지워도, c.txt는 멀쩡히 사용 가능하다.

단, a를 편집하면 c가 같이 변경되므로 동시에 조작을 할 경우 오류가 발생한다.

그러나 잘 사용되지 않으며, 디렉토리는 하드링크 생성이 불가능하다.

 


 

# more # less

화면 출력을 화면 단위로 제어해 페이지 단위로 잘라준다.

 

# more [파일명]

# less [파일명]

 

아래와 같이 파이프라인을 사용한 형태로도 사용 가능하다.

#ls -al | more

#ls -al | less

 


 

grep

필터링. 입력한 문자열을 포함한 라인만 출력하게 해준다.

#  [command]  |  grep

 

예시)

#  ls -al | grep conf

conf 문자열이 존재하는 라인만 출력

 

※grep의 결과물도 more/less로 제어하고 싶을 경우 파이프라인을 추가한다.

#  ls -al | grep conf | more

 

※ 이때 grep과 more의 순서를 변경하면 적절치 않다. more이 선행한다면 페이지화 이후 출력한 뒤에 필터링을 적용하게 된다. 즉 grep이 무의미해진다.

 

 


# cat ‐n /etc/passwd

 /etc/passwd의 모든 라인수 출력

 

# cat ‐n /etc/passwd | grep ftp

ftp가 포함된 해당 디렉토리의 라인수 출력

 


 

# env | grep HOME

환경변수의 목록 중 HOME이 포함된 것만을 출력한다.

 

*env는 환경변수의 목록을 출력하며, 변수의 추가 및 제거가 가능하다. 기존 변수의 이름 변경도 가능하다.

env는 나중에 설명.

 


 

#head #tail

각각 앞/뒤 10라인씩만 출력한다. tail을 주로 사용한다.

 


 

Q. 지금까지 배운것으로 검색하는 법

# ls -R | grep (문자열)

현 위치의 모든 하위 디렉토리에 위치한, 입력한 문자열이 포함된 파일을 전부 찾아라.

 

 


 

* 파일 검색 커맨드(잘 사용하지 않음)

 

#find 검색경로 검색조건1 조건2

-name : 파일명으로 검색

-perm : 특정 퍼미션을 가진 파일을 검색

- empty : 크기가 0인 파일 검색

-user : 지정한 소유자가 소유한 파일

-group : 지정한 그룹이 소유한 파일

-nouser : 소유자가 없는 파일

-nogroup :소유자 그룹이 없는 파일

-type : 검색하고자 하는 파일의 종류 지정. b(block) c(char) d(dir) l(slink) f(regular)

- mount : 마운트된 파일 시스템만 검색

-empty : 빈 파일만 검색

-mtime, -atime, -ctime : 변경된 파일 (-숫자)

 

* mtime: 내용 변경 시간, atime: 접근 시간, ctime: 정보변경 시간


 

 

# tar  [옵션] [파일명] [대상]

-c : 압축

-x : 해제

-v : 작업내용 출력

-z: gzip 이용해 압축/혹은 해제

-j : bzip2 사용

-f : 파일명 지정

-p : 퍼미션 유지 

여러 개의 파일을 하나의 파일로 압축한다. tar는 용량을 줄이지 않는다. 용량 압축을 위해서는 gzip 혹은 이외 특별 옵션을 사용한다.

 

# tar -cvfz ./backup/full.tar.gz ‐g ./backup/imsy ./imsy/

[ ./backup/imsy]와 [./imsy/]을 [ ./backup/full.tar.gz]이란 이름의 파일로 압축한다. 최초 백업이 아니라면 증분백업(-g)한다.

 

-g : 첫 번째 백업을 수행할 때는 모든 파일이 백업되는데(첫 백업에는 사용하지 않는다)  이후 압축에는 -g 옵션을 사용하여 변경된 파일만 추가로 백업한다.

 


 

# gzip [파일명] (잘 사용X)

[파일명]을 gz로 압축. (ex. a.txt -> a.txt.gz)

# gzip -d a.txt.gz

a.txt.gz의 압축을 해제

 

 

#bzip2 #comprass :  압축

#bunzip2 #uncomprass : 압축 해제

 

#cpio -idmx < [압축파일명]

: 압축 해제

 


#stat [파일명]

파일의 시간정보 출력

 

*리눅스의 타임 스탬프

atime: (시스템이나 응용 프로그램, 사용자가)  파일에 마지막으로 접근한 시간. ※가장 많이 사용

ctime: 파일의 퍼미션 등 속성이 변경된 시간.

mtime: 파일의 내용이 마지막으로 변경된 시간.

 


 

# touch

파일의 시간 정보를 갱신한다. 존재하지 않는 파일일 경우 빈 파일을 생성한다.

 

-t [YYMMDDhhmi.ss] : 파일의 시간을 임의의 것으로 변경. atime, mtime이 바뀐다.

-a : 최근 사용 시간이 변경된다. atime, ctime

-m : 파일의 최근 수정 시간이 변경된다. ctime, mtime

-r [파일명] : 지정한 파일과 동일한 시간으로 바뀐다.

-c : 파일이 존재하지 않을때 생성하지 않는다.

 

 


01.31

 

# !! 은 해당 서버에 기록된 마지막 커맨드를 불러온다!!!

왜지?