Linux 기본 명령어 (2)

Violet_Evgadn·2023년 4월 26일
0

Linux

목록 보기
4/34

파일 검색/수정

find

리눅스 파일 시스템에서 파일을 검색하는 데 사용하는 명령어로 "표현식"을 사용하여 파일을 검색한다.

find [Option] [Path] [표현식] [검색 Keyword]
# Path 디렉토리 및 하위에 있는 모든 파일 중 표현식과 일치하는 파일들 검색

여기에서 중요한 점이 "하위에 있는 모든 파일들"을 기준으로 검색한다는 것이다. 아래 사진을 보자

현재 practice에는 a1 ~ a8까지의 파일이 존재하고 dir 디렉터리 내에 a9 파일이 존재한다. find를 통해 결과를 확인하면 "./dir/a9"이 나오는 것을 확인할 수 있다. 즉 하위 경로에 존재하는 파일도 검색 대상 것이다.

find에서 Option은 그렇게까지 중요하진 않으며 "표현식"이 매우 중요하다.

표현식

  • -name : 정규 표현식과 일치하는 파일 이름 검색
    • -name을 사용할 경우 "X"를 통해 정규 표현식을 큰 따옴표로 묶어줘야 함
  • -type : 지정된 파일 타입에 해당하는 파일 검색
    • d : 디렉터리
    • f : 일반적인 파일
    • l : 심볼릭 링크
  • -size : 파일 크기를 사용하여 파일 검색
    • X : X보다 큰 Size 파일 검색
    • -X : X보다 작은 Size 파일 검색
    • 단위
      • b : block
      • c : byte
      • k : kb
      • w : 2Byte Word
  • -delete : 검색된 파일 혹은 디렉터리 삭제. Keyword 필요 X
  • -exec : 검색된 파일들에 대하여 지정된 명령 실행
    • -exec를 사용할 때 중요한 요소 2가지
    • {} : 앞에서 검색한 파일들이 들어가야 할 명령어 위치에 넣어줌
    • \; : -exec를 통해 실행할 명령어를 모두 입력했다면 한 칸 띄고 \;를 꼭 붙임으로써 명령어가 끝났음을 알려야 함
    • (ex) 앞에서 검색한 파일들을 이동시킴 : -exec mv {} dir/ \;

표현식들을 분리해 놓은 이유는 "-delete"와 "-exec" 같은 경우 find 명령어 수행 결과물들에 추가로 적용해야 하는 표현식이기 때문이다.

find 명령어는 find [표현식] [Keyword] [표현식2] [Keyword2]... 같이 {표현식, 키워드} 쌍을 계속 이어 붙임으로써 이전 find 명령어의 결과물들에 대한 파일 검색을 실행할 수 있다.

이때 -delete와 -exec는 무조건 find 결과물에 대해서 적용되어야 하는 표현식으로 표현식 2 뒤쪽에만 들어갈 수 있어 분리해 놓은 것이다.

마지막으로 실제 활용 예시 및 결과물 2가지만 보고 다음으로 넘어가자.

현재 디렉토리 내에서 a로 시작하는 모든 파일 삭제 : find . -name "a*" -delete

현재 디렉토리 내에서 test 문구를 포함한 파일 찾아 dir로 복사시키기 : find . -name "*test*" -exec cp {} ./dir \;

touch

touch의 원래 파일 관련 날짜와 시간을 수정하는 명령어이다.

하지만 원래 용도와는 다르게 0바이트 파일을 생성하기 위해 더 자주 사용된다.

Linux나 Unix 계열의 OS에서 파일과 디렉터리는 Inode에 시간 관련 속성인 "atime, ctime, mtime"을 저장한다.

atime, ctime, mtime 총 3개의 시간을 MAC time이라고 부른다.

atime(access time)은 파일을 최근 사용한 시간, ctime(change time)은 파일 최종 상태 변경 시간으로 File Permission이나 File 소유자, 하드 링크 생성 혹은 삭제 시 변경되는 값이며 mtime(modification time)은 최근 파일 변경 시간을 의미한다.

touch [Option] [파일명]
# 만약 Option이 없고 지정한 파일명을 가진 파일이 없으면 파일을 새로 생성함

Option

  • -a : 현 시간으로 atime과 mtime을 수정
  • -c : 지정한 파일명의 파일이 없으면 아무런 동작이 일어나지 않음(즉, 파일을 새로 생성하지 않음)
  • -t : 지정한 시간으로 atime, ctime을 수정하고 mtime은 현재 시간으로 수정한다.
    • YYYYMMDDhhmm.SS(연월일시분.초) 형태로 원하는 시간을 입력한다

file

file 명령어는 지정된 파일의 종류(Type)을 확인하는 명령어이다. 이 때 /usr/share/file 디렉토리의 magic 파일을 참조하여 파일 종류를 표시한다.

file [Option] [파일명]

Option

  • -i : 파일 형식을 MIME 형식으로 표시함
    • MIME 형식 예시 : application/x-executable; charset=binary, text/plain; charset=us-ascii
  • -z : 압축된 파일의 유형을 표시

문서 확인 및 처리

cat

Linux를 미리 사용해본 사람은 cat을 "문서 내용을 출력하는 명령어"라고 알고 있는 사람도 많을 것이다. 하지만 cat의 본 목적은 살짝 다르다.

cat은 "concatenate"의 약어로써 여러 파일의 내용을 하나로 합쳐주는 명령어이다. 단지 Redirection 기호와 같이 사용하지 않을 경우 여러 개의 파일을 합쳐 stdout, 즉 출력문 형식으로 처리하기 때문에 단순 파일을 출력하는 명령으로 알고 있는 것이다.

# 1개 파일을 화면에 출력
cat [Option] [파일명]

# 여러개 파일을 화면에 출력
cat [Option] [파일명1] [파일명2] ...

Option

  • -n : 줄 번호를 화면 왼쪽에 나타냄(비어 있는 행 포함)
  • -b : 줄 번호를 화면 왼쪽에 나타냄(비어 있는 행 제외)
  • -s : 연속되는 2개 이상의 빈 행을 1개 행으로 출력함

more

파일 내용이 너무 많을 때 cat으로 파일을 확인하면 한 번에 모든 내용을 출력하므로 보기가 힘들다. more 명령어를 쓰면 위에서 아래 방향으로 화면 단위로 끊어서 출력한다.

Enter키를 입력하면 한 줄씩 아래로 이동하고 SpaceBar 키를 누르면 한 화면씩 아래로 이동한다. 또한 "Ctrl + b"를 누르면 한 화면 위로 이동할 수 있다.

more [파일명]

Option

  • -n : n에 입력한 값만큼 끊어서 화면에 출력해 준다.
  • +n : n에 입력한 행부터 화면에 출력해 준다.

tail

파일의 마지막 행을 시작으로 파일 내용 일부를 출력해 주는 명령어이다.

기본적으로는 마지막 10줄을 출력한다.

tail [Option] [파일명]

Option

  • -f : tail을 종료하지 않고 파일의 Update 내용을 실시간으로 계속 출력함
    • 주로 시스템 로그를 실시간으로 확인할 때 많이 활용하는 Option
  • -n [라인 수] : 파일의 마지막 줄부터 지정한 라인 수까지 내용을 출력

추가로 첫 행을 시작으로 글의 초반 부분을 출력하고 싶다면 tail 대신 head를 사용하면 된다.

grep

특정 파일 내용이나 문자열 중 지정한 문자열이나 정규표현식과 일치하는 단어를 포함한 행을 출력해 주는 명령어이다.

grep 명령어는 단독으로 쓰이기보다는 tail, ls, cat 등의 파일 내용 출력 명령어와 조합하여 자주 사용되어 사용도는 높지만 사용 난이도도 높은 명령어라고 할 수 있다.

grep [Option] [Pattern] [파일명]
Pattern은 큰 따옴표나 작은따옴표로 묶어주는 것을 추천한다.

grep의 종류는 "grep, egrep, fgrep"이 존재하는데 grep이 egrep과 fgrep의 기능을 모두 수행할 수 있으므로 grep만 알두자.

Option

  • -c : 일치하는 행의 개수를 출력
  • -i : 대소문자를 구분하지 않음
  • -v : 일치하지 않는 행을 출력
  • -n : 검색된 행의 번호와 행 내용을 함께 출력
  • -w : Keyword와 완벽히 일치하는 단어가 포함된 행만 출력
  • -r : 하위 디렉터리를 포함한 모든 파일에서 검색
    • 파일명이 아닌 Directory를 입력
    • Directory를 입력하지 않을 경우 현재 경로를 입력한 것으로 간주
  • -l : 패턴이 포함된 파일의 이름들만 출력

cut

파일이나 입력받은 문자열을 잘라내서 새로운 문자열을 만드는 명령어이다.

cut [Option] [Option 값] [파일 이름]

cut은 특이하게 Option이 필수적인 명령어이다.

어찌 보면 당연한데, "어떻게 문자열을 잘라낼 것인가"를 명시해줘야 하기 때문이다.

Option

  • -c, --characters : 지정해 준 2개 숫자 사이에 있는 문자들을 선택함
    • -c [시작 번호]-[끝 번호]
    • 시작 번호이상 끝 번호 이하의 문자들을 선택
  • -d, --delimiter : 지정한 문자를 구분자로 사용함(Default : Tab)
    • 단독으로는 사용 불가
  • -f, --fields [Num] : 구분자로 인해 분리된 단어들 중 Num번째 단어를 선택함

cut은 이렇게 설명만 보면 잘 이해가 안 될 수 있으니 실제 예시를 통해 확인해 보자.

  • cut -c 4-10 test : 4 ~ 10번째 단어를 선택해라. test의 4번째 단어는 "e", 10번째 단어는 (띄어쓰기를 포함하여) u이다. 따라서 "em Ipsu"가 출력된다.
  • cut -d " " -f 3 test : Delimiter를 " "(띄어쓰기)로 하여 분리하고 3번째 단어를 선택한다는 의미이다. 3번째 단어인 "is"가 출력됨을 알 수 있다.

wc

특정 파일에 대한 통계 자료를 출력해 주는 명령어이다.

그렇게까지 활용도가 높지는 않으나 알아두면 좋긴 하다.

wc [Option] [파일이름]

Option

  • -c : Byte 수를 출력하는 옵션
  • -l : 행의 개수를 출력하는 옵션
  • -L : 가장 긴 행의 문자 개수를 출력하는 옵션
  • -w : 단어 개수를 출력하는 옵션
    옵션을 사용하지 않을 경우 [행(Line) 수][단어] [문자][파일명] 순으로 출력된다.

파일 시스템 디스크 사용량 파악

df

Disk Free의 약자이다. 디스크 여유 공간을 확인하는 명령어로 시스템 전체의 디스크 사용량을 확인할 수 있다.

  • -h : 사람이 보기 좋은 단위(M - 메가바이트, G - 기가바이트) 단위로 디스크 공간 확인 가능
    • 어떤 파일에 Mount 되었는지까지 알려줌
  • -i : inodes에 대한 정보와 어떤 파일에 Mount 되었는지 알려줌
    여기에서 "Mount"라는 용어와 "Inodes"라는 용어가 나오는데 이는 뒤에서 더 자세히 배울 것이다.

du

df 시스템 전체 디스크 공간을 확인한다면 du는 "특정 디렉터리의 디스크 사용량"을 확인하는 것이다.

df는 "시스템 전체의 디스크 사용량"을 위한 명령어로 Option 이외 다른 입력값이 필요 없으나 du는 "특정 디렉터리의 디스크 사용량"을 위한 명령어이므로 Option 이외에 "디스크 사용량을 확인하고 싶은 디렉터리 경로"를 입력할 수 있다.


명령어 입력 역사

history

유저가 리눅스에서 활용했던 명령어를 모두 표시하는 명령어이다.

history [숫자]

가장 최근에 사용된 숫자 개수 명령어를 확인한다.

history -c

모든 히스토리를 삭제한다.

히스토리 명령어 실행 방법

# 바로 직전 사용한 명령을 다시 수행
!!

# 특정 문자열이 포함된 가장 최근 명령 수행
![문자열]

# 히스토리 번호로 명령 수행
![히스토리 번호]

script

script 명령어를 친 이후 입력된 명령어 및 출력된 결과물들을 typescript 파일에 저장한다.

exit 구문을 치거나 ctrl+d를 입하기 전까지 계속해서 typescript 파일에 명령어 기록을 수행한다.

typescript라는 파일이 생성되었으며 cat typescript를 통해 파일 내용을 보면 이전에 수행했던 명령어 및 결과물들을 저장하고 있음을 확인할 수 있다.


기타

echo

주어진 명령어를 터미널에 출력하는 명령어이다.

echo [출력할 문구]

출력할 문구는 따옴표로 둘러싸지 않아도 잘 동작하지만 혼동을 피하기 위해 따옴표로 묶는 것을 권장한다.

alias

alias는 정리할까 말까 고민을 좀 했었다. 필수 명령어는 아니며 다른 명령어처럼 단순 입력으로는 사용할 수 없는 명령어이기 때문이다. 하지만 일단 이런 게 있다 정도는 알고 가는 게 좋을 것 같아 정리해 놓았다.

alias는 별칭이라는 뜻으로 사용자가 명령어 구문을 다른 이름으로 바꿔 사용할 수 있게 해주는 쉘 내부 명령어를 말한다.

alias를 활용하면 길이가 긴 명령어를 간단한 이름으로 등록하여 업무 효율을 높일 수 있다.

현재 등록되어 있는 alias들 확인

alias

새로운 alias 등록

alias [명령어 별칭]='명령어'

현재 디렉터리의 부모 디렉터리로 이동하는 cd ../ 명령을 cdUp 명령어로 처리할 수 있게 해 보자.

원래 cdUp이라는 명령어는 없었는데 alias로 등록해 줌으로써 제대로 부모 디렉터리로 이동했음을 확인할 수 있다.

alias 해제

unalias [명령어 별칭]

alias 영구등록

설정했던 alias는 시스템을 재부팅하고 나면 초기화된다.

매번 alias를 재설정해주기는 귀찮기 때문에 alias를 영구 등록시키는 방법에 대해 알아보자.

  1. Home Directory로 이동하여 ls -al 명령어를 통해 .bashrc 파일 검색
    • .bashrc는 숨김 파일이므로 무조건 -a 옵션을 통해 검색해야 함
  2. vi .bashrc 명령어를 통해 파일 수정
    • 만약 .bashrc 파일이 없다면 새로 생성해 주자.
  3. 위에서 설명한 alias 등록 문구를 .bashrc에 추가해 주고 저장
  4. source ~/.bashrc를 통해 .bashrc 내용을 현재 서버 설정과 동기화시켜줌
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글