Post

Linux 명령어 1

Linux Cheat Sheet



Cheat Sheet
seren.net/documentation/unix%20utilities/Linux_Cheat_Sheet.htm






리눅스 기초 특수기호 문자



  • >

    표준 출력 리다이렉션으로 출력 방향을 바꿈.

    • ls > test.txt

      출력 내용을 test.txt 파일에 기록한다. 만약 파일이 없다면 생성한다.

    • cat > test.txt

      내용을 입력한 후 입력 내용을 test.txt 파일에 저장한다.

    • >> 이면 ls >> test.txt는 출력된 내용을 test.txt 파일에 덧붙인다. -> 이어쓰기


wsl2에서의 문제인지는 모르겠으나, 권한 거부가 떠서 찾아보니 리다이렉션은 sudo로도 안되는 거라고 한다.

대신 루트로 로그인해서 하거나, tee 명령어가 있다고 한다.
ex) echo test | sudo tee /tmp/foo == cat > test 후 test 입력


  • <

    표준 입력

    • cat < test.txt

      test.txt의 내용을 cat 명령어로 읽은 뒤 화면에 출력

    • <<< here string을 통해 입력값을 전달해줄 수 있다.


  • *

    모든 문자와 일치하는 와일드 카드 문자

    • ls tes*

      test.txt, tes/123.txt 등 일치하는 모든 파일, 디렉토리(내부)가 출력된다.

    • 파일 이름 자리에 *를 적으면 모든 파일을 뜻함.

      ls * ==> 모든 파일 보기


  • ?

    하나의 문자와 일치하는 와일드 카드 문자 //길이가 1인 임의의 문자

    • ls test.tx?

      test.txt, test.txx 등 하나 일치한 파일을 출력한다.


  • [ ]

    대괄호 안에 포함된 문자 중 하나라도 일치되는 문자.

    • ls a[13] : a1 , a3 파일 목록 출력.


  • ;

    명령어 분리자로 한 명령 라인에서 여러 가지 명령을 수행할 수 있도록 함


  • $

    쉘 변수를 가르킴.


  • |

    앞에 나온 명령어의 표준 출력 결과를 다음 명령어의 표준 입력으로 사용

    • ls –al | grep ^d

      모든 파일을 출력하는데 d로 시작하는 파일을 출력.


  • ' ' , " "

    문자를 감싸서 문자열로 만들고 문자열 안의 특수기호 기능도 없앰.

    작은따옴표는 모든 특수기호, 큰 따옴표는 $,`,\를 제외한 모든 특수기호를 일반문자로 간주


  • ` ` 또는 $()

    shell은 ` ` 또는 $()로 감싸인 문자열을 명령으로 해석하게 함.


  • \

    특수문자 앞에 사용, 특수 문자의 효과를 없애고 일반 문자처럼 처리함.


  • || , &&

    한 줄에 여러 명령어 연속 실행

    &&은 앞 명령어가 에러가 나지 않아야 뒷 명령어 실행 (Logical AND)

    ||은 앞 명령어가 에러가 나면 뒷 명령어 실행 (Logical OR)






기본 명령어



  • rm-rf <file name> : file 강제 삭제

  • cp-r (복사할 디렉터리 경로) (붙여넣을 디렉터리 경로) : 파일 복사


디렉터리 생성

  • mkdir –p dir01/dir02 : dir01 디렉터리 안에 dir02디렉터리까지 같이 생성


파일 종류

  • bin : binary파일 , 실행 파일

  • mnt,tmp: 임시파일

  • etc : 설정파일


파일색깔

  • 파랑: 디렉터리 파일

  • 하양: 일반 파일

  • 하늘색: 링크파일

  • 녹색: 실행파일

  • 빨강: 압축파일


파일 경로문자

  • 최상위 디렉터리 : /

  • 현재 디렉터리 : .

  • 상위 디렉터리: ..

  • 홈 디렉터리(root): ~

  • 이전 작업 디렉터리 : -


경로 구분자 /

디렉터리 사이에서는 ‘/’로 경로 구분

  • ex) 현재 root 디렉터리의 하위에 있는 log 디렉터리로 이동 시

    • cd log : 하위 디렉터리로 이동 시 에는 / 생략 가능

    • cd ./log : 현재 디렉터리 안의 log 디렉터리로 이동

    • cd log/ : 파일 이름뒤에 /붙으면 그 파일은 디렉터리란 의미

    • cd ./log/

    • cd /root/log

다 같은 의미임.






man [명령어]



페이지 이동 방법

  • e : 한줄 앞으로

  • y : 한줄 뒤로

  • f : 한 window 앞으로

  • b : 한 window 뒤로

  • d : half window 앞으로

  • u : half window 뒤로

  • 이전 페이지 : page up 키 or b

  • 다음 페이지 : page down 키 or 스페이스바

  • 종료 : q






vi



  • vi -r file : 손상된 파일 회복


  • shift + ↑, ↓ : 한 페이지 앞, 뒤로 이동

  • Ctrl + i, b : 한 화면 위, 아래로 이동

  • Ctrl + d, u : 반 화면 위, 아래로 이동

  • Ctrl + e, y : 한 줄씩 위, 아래로 이동


  • dw : 한 단어 삭제

  • dd : 한 줄 삭제

    ex) 5dd : 커서가 있는 라인부터 5개의 라인 삭제

  • u : 바로 전에 수행한 명령 취소

  • :5, 10 : 5~10번째 행 삭제

  • /name : name 문자열 찾기

  • n : 다음 name으로 이동

  • N : 이전 name으로 이동


  • :w : 저장

  • :wq : 저장하고 vi 종료

  • :w file : file에 저장

  • :q! : 저장하지 않고 vi 강제 종료

  • :r file : file의 내용을 현재 커서가 있는 줄에 출력

  • :e file : 현재 화면을 지우고 file의 내용 출력

  • :5,10 w file : 5 ~ 10줄까지의 내용을 file에 저장


  • :set nu : 행 번호 보여주기

  • :set nonu : 행 번호 보여주기 취소

  • . : 바로 전에 실행한 명령어 재실행


  • :![command] -> vi에서 쉘 실행 ex)!ifconfig

  • :set shell ? -> shell 확인

  • :set shell=/usr/bin/bash : bash로 쉘 변경

  • :!/bin/bash -> bash 쉘 실행








  • head [option] [file]

    파일의 앞부분부터 확인, 기본적으로 처음 10행 출력


  • option

    • -n : 앞부분에서 num행까지 출력

    • -c : num byte까지의 내용 출력






tail



  • tail [option] [file]

    파일의 끝부분부터 확인, 기본적으로 마지막 10행을 출력


  • option

    • -n : 앞부분에서 num행까지 출력

    • -c : num byte까지의 내용 출력






more [file]



  • 파일을 읽어 화면에 화면 단위로 끊어서 출력하는 명령어.

  • 이 명령어는 위에서 아래 방향으로만 출력 되어서 지나간 내용을 다시 볼 수 없는 단점이 있음.


  • 단축키

    • h : more 명령어 상태에서 사용할 수 있는 키 도움말 확인

    • q : more 명령어 종료

    • enter : 1행 아래로 이동

    • space bar, f : 아래로 1페이지 이동

    • b : 1페이지씩 앞으로 이동

    • = : 현재 위치의 행번호 표시

    • /문자열 : 지정한 문자열 검색

    • n:/문자열 : 지정한 문자열을 차례대로 검색

    • v : 현재 열려있는 파일의 현재 위치에서 vi 편집기 실행






cut [option] [file]



  • 데이터의 열을 추출


  • option :

    • -b : 바이트를 기준으로 추출

    • -c : 문자수를 기준으로 추출

    • -f : 파일의 필드를 기준으로 추출

    • -d : 필드 구분자를 지정, 기본 필드 구분은 TAB


1
2
3
4
5
6
ex) 
/etc/passwd에 root:x:0:0:root:/root:/bin/bash가 있을 때

-> cut -f 1 -d ':' /etc/passwd : ':'을 필드 구분자로 지정, 1열의 내용을 추출 -> root

-> cut -f 3-4 -d ':' /etc/passwd : , 3, 4열의 내용을 추출 -> 0:0






diff [option] [file1] [file2]



  • 파일 비교 명령어

  • options :

    • -c : 두 파일간의 차이점 출력

    • -d : 두 파일간의 차이점을 상세하게 출력

    • -r : 두 디렉토리간의 차이점 출력, 서브디렉토리 까지 비교

    • -i : 대소문자의 차이 무시

    • -w : 모든 공백 차이무시

    • -s : 두 파일이 같을 때 알림

    • -u : 두 파일의 변경되는 부분과 변경되는 부분의 근처의 내용도 출력


diff3은 3개 파일 비교






ln



  • Link파일을 만드는 명령어
참고
jhnyang.tistory.com/269






심볼릭 링크



  • 단순히 원본파일을 가리키도록 링크만 시킨 것으로 윈도우에서 ‘바로가기’ 같은 것.

  • 원본파일의 크기와 무관, 원본이 삭제되면 링크파일은 깜박거리면서 원본이 없다는 것을 알려줌.


  • Usage : ln -s 원본 대상

    • ln -s test t : test라는 파일의 심볼릭 링크 파일인 t를 현재 디렉토리에 생성






하드링크



  • 원본과 동일한 내용의 다른 파일을 생성 -> 원본 삭제되어도 링크 파일 속 데이터는 존재함.

  • 원본이 변경되면 링크파일도 변경됨.


  • Usage : ln [option] 원본파일 대상파일(디렉토리)

    • ln test.txt t : test.txt라는 파일의 하드링크 파일인 t를 현재 디렉토리에 생성






chmod



  • 파일권한 변경

  • 쉽게 쓰려면 8진수 형태, 복잡하지만 기능적으로 좋은 심볼릭 형태가 있음.


  • option :

    • -R : 하위 디렉토리의 모든 권한 변경

    • -c : 권한 변경 파일내용을 출력






8진수 형태



  • chmod [option] [8진수 퍼미션] [filename]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
777 : 일반적인 8진수 형태
4777 : SetUid 설정, 4000을 더한다.
2777 : SetGid 설정, 2000을 더한다.
1777 : Sticky bit 설정, 1000을 더한다.

8진수 0~7은 아래와 같이 2진수로 표현이 가능하다
0 : 000
1 : 001
2 : 010
3 : 011
4 : 100
5 : 101
6 : 110
7 : 111

위 2진수 세자리는 rwx 세자리와 일치하며 2진수가 1이면 해당 권한을 부여,
0이면 해당 권한을 제거 한다.

ex) chmod 707 test.cnf 
test.cnf 파일에 대해 user, other 은 모두 rwx로 변경하고 group은 모든 권한을 제거한다.

ex) chmod 555 test.cnf 
test.cnf 파일에 대해 user, group, other 모두 rx의 권한을 주고 w의 권한은 제거한다.






심볼릭 형태



  • chmod [option] [대상] (+/-/=) (rwx) (filename)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
대상
u : user의 권한
g : group의 권한
o : other의 권한
a : 모든 사용자 권한

+ : 해당 권한을 추가한다.
– : 해당 권한을 제거한다.
= : 해당 권한을 설정한데로 변경한다.


ex) chmod u-x,g+r test.cnf 
test.cnf 파일에 대해 
user는 기존 권한에서 x권한만 제거한다. 나머지 권한은 그대로 유지 된다. 
group은 기존 권한에서 r권한을 추가한다. 나머지 권한은 그대로 유지 된다.


ex) chmod u=rx,g=-,o=r test.cnf 
test.cnf 파일에 대해 user는 rx 권한만 부여, group는 모든 권한 제거, 
other은 r권한만 부여 한다






chown



  • 파일과 그룹의 소유권을 변경하는 명령어


Usage
chown [option] [변경할 유저명 : 변경할 그룹명] [파일명]
option
-R => 하위 디렉토리에도 모든 권한 변경


  • 명령어

    • 소유자 : 소유자만 변경한다.

    • :그룹명 : 그룹만 변경한다.

    • 소유자: : 소유자와 그룹 모두 동일한걸로 변경한다.

    • 소유자:그룹명 : 소유자와 그룹을 서로 다른걸로 변경한다. (물론 같은걸 해도 상관없다.)


파일명에는 설정을 위한 파일명 또는 디렉토리명 이용 , 와일드 카드 이용 가능

1
2
3
4
5
6
7
8
9
10
11
12
13
example

1) chown member1 test.cnf 
   test.cnf 파일에 대해 소유자를 member1로 바꾼다.

2) chown :member1 test.cnf 
   test.cnf 파일에 대해 그룹명을 members1로 바꾼다.

3) chown member1: test.cnf 
   test.cnf 파일에 대해 소유자 및 그룹명을 members1로 바꾼다.

4) chown member1:member2 test.cnf 
   test.cnf 파일에 대해 소유자는 member1, 그룹명은 member2로 바꾼다.






find [path] [option] [action]



  • 주어진 조건을 경로에서 검색하여 파일을 찾는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-name [name] : 지정된 이름의 파일을 찾는다.

-user [name] : user 소유의 파일을 찾는다.

-group [name] : group 소유의 파일을 찾는다.

-type [형식] : 지정된 형식의 파일을 찾는다.
  • b : 블록파일
  • c : 문자
  • d : 디렉터리
  • f : 파일
  • l : 링크파일
  • s : 소켓

-perm [mode] : 정확히 같은 권한을 가진 파일을 찾는다.

-perm –[mode] : mode에 있는 권한 중에서 모두 만족하는 것 출력

-perm /[mode] : mode에 있는 권한 중에서 하나만이라도 만족하는 것 출력

-size [+/-]n[bckw] : 지정된 크기의 파일을 찾는다.
  • +n : n보다 크다
  • -n : n보다 작다
  • n : n이다
  • b : 512-byte
  • c : byte
  • k : kilobytes
  • w : 2-byte


  • action
1
2
3
4
5
6
7
8
9
10
11
-inum number : 지정한 아이노드 번호와 파일을 찾는다.

-print : 표준출력으로 검색된 파일명을 출력한다.

-exec [command] { } \; : 찾은 각 파일에 대해 지정된 명령을 실행한다.

-ok [command] { } \; : 실행 여부를 사용자에게 확인한 후 명령을 실행한다.


2>/dev/null : find 옵션 뒤에 붙이면 에러메세지를 모두 버려주고 
              해당 조건에 정확히 부합하는 내용만을 출력해줌

너무 파일이 많고 검색된 내용도 많아서 콘솔화면에 전부 표현할 수 없다면 more을 활용. 쪽단위로 출력할 수 있게 해줍니다.






grep [option] pattern [file]



  • pattern을 file안에서 (옵션에 맞춰) 검색한다.


  • option
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-A(-B) num : 일치하는 줄 아래에(위에) 지정한 줄 수(num)만큼의 내용을 더 보여준다.

-c : 일치하는 줄의 수 출력

-C [num] : 일치하는 줄의 위와 아래에 지정한 줄 수 만큼의 내용을 더 출력, 기본은 2줄

-d 디렉터리 : 읽고자 지정한 파일이 디렉터리일 경우 지정한 값을 실행한다.
 d :
    read : 디렉터리를 보통 파일처럼 읽는다. (기본 값)
    skip :  디렉터리를 건너뛴다.
    recurse(-r) : 디렉터리를 포함하여 하위 디렉터리의 모든 파일을 읽는다. 

-i : 대소문자 구별 x

-l : 일치하는 줄의 파일명만 보여주고, 줄의 내용은 출력하지 않는다.

-n : 일치하는 줄의 내용과 해당 줄의 위치를 출력한다.

-v : 지정한 패턴과 일치하지 않는 내용을 보여준다.



메타문자기능사용 예사용 예 설명
^행의 시작 지시자‘^love’love로 시작하는 모든 행 출력
$행의 끝 지시자‘love$’love로 끝나는 모든 행 출력
.하나의 문자와 대응‘l..e’l다음에 2문자가 오고 e로 끝나는 문자 출력
[][]사이의 문자 중 하나와 대응되면 출력‘[Ll]ove’Love나 love 문자 출력
[^][]사이의 문자에 속하지 않는 문자 출력‘[^A-K]ove’[A-K]ove이외의 문자 출력
x{m}문자 x를 m번 반복‘o{5}’문자 o가 5회 연속으로 나오는 모든 행 출력
x{m,}문자 x를 적어도 m번 반복‘o{5,}’문자 o가 최소한 5번 반복되는 모든 행 출력
x{m,n}m회 이상 n회 이하 반복‘o{5,10}’문자 o가 5회 이상 10회 이하 반복되는 모든 행 출력



1
2
3
4
5
6
7
8
9
10
11
12
13
14
자주 사용하는 문자 클래스

\d - 숫자와 매치, [0-9]와 동일한 표현식이다.

\D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.

\s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 
     맨 앞의 빈 칸은 공백문자(space)를 의미한다.

\S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.

\w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.

\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
메타문자 앞에 역슬래시를 쓰면 메타문자의 특수의미를 무시함, 즉 자체문자로 인식

ex) grep ^\.    : 마침표로 시작되는 줄을 찾음 
    
    grep '\$'   : "$" 문자가 포함된 줄을 찾음 


(1) 패턴을 작성할 때 \(역슬래쉬)가 들어가는 경우(\<, \(..\), x\{m\}) 

(2) 특수문자를 문자자체로 인식하게 하려 \을 사용하는 경우

(3) 패턴에 있어서 파이프( | )를 이용하는 경우

==> 패턴을 따옴표(")나 작은 따옴표(')로 감싸주어야 한다.






sort [option] [file]



  • 텍스트 파일의 내용을 알파벳 순서대로 정렬


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-b : 공백을 무시한다.

-i : 프린트 가능한 문자만 비교

-r : 결과를 역으로 출력

-n : 숫자를 기준으로 정렬

-c : 파일이 정렬되어 있는지 검사

-o : 결과를 지정한 파일에 저장

-u : 필드 내에서 중복되는 값을 제거하고 출력 
    
    ex) abcd가 4줄 중복되면 한 줄만 출력시켜주는 것

-m : 복수의 입력 파일을 병합

-f : 모든 문자를 소문자로 인식






uniq [option]



  • 중복되는 행을 필터링


1
2
3
4
5
6
7
8
9
10
11
12
13
-c : 행이 얼마나 중복되는지 계산하여 출력

-d : 중복되는 행의 내용을 한번만 출력

-D : 중복되는 모든 행의 내용을 출력

-N : 첫 행부터 N행까지는 검사 안함

-u : 중복되지 않는 행만 출력


무작위로 있으면 인식 x ----> sort와 uniq 명령어가 보통은 같이 쓰임.
ex) cat data.txt | sort | uniq –u






Next
Linux Commands 2



This post is licensed under CC BY 4.0 by the author.