본문 바로가기
Code/개발지식

[Unix, Linux] 자주 사용하는 유닉스 쉘 명령어

by 코드포휴먼 2020. 9. 10.

[Tip]

ctrl A : 명령문 맨 앞

ctrl E : 명령문 맨 뒤

ctrl C : 명령문 실행 전에 명령 취소

파일명 길 때 tab 하면 자동완성

 

 

[Introduction]

man

man 명령어를 치면 명령어에 대한 매뉴얼을 볼 수 있다. 

 

man man

매뉴얼 자체에 대한 매뉴얼을 보여준다.

매뉴얼은 키보드 상하(↑↓)로 움직이거나 Space바로 페이지를 업다운 할 수 있다. 

매뉴얼을 검색한 뒤 : 로 쓰인 곳 뒤에 / 슬래시를 입력하여 검색을 할 수 있다. (ex. /tips)

  • SYNOPSIS : man 명령어에 파라미터를 추가하는 방법이 나와있다. 
  • DESCRIPTION : 명령어가 어떻게 작동하는지 자세한 설명을 볼 수 있다. 
  • SEE ALSO : 현 페이지와 관련되거나 연결된 매뉴얼 페이지를 확인해볼 수 있다. 

 

man -f man

man 옵션에서 -f제목에 "man"이 있는 모든 설명 페이지를 받아볼 수 있다. (ex. man -f ls)

 

 

[Shell & File System]

파일 시스템을 통해 하드디스크, 즉 작업 공간에 파일을 저장할 수 있다.

파일 시스템은 디렉토리 구조에 설계되어 있다.

루트 디렉토리/ 슬래시로 표현되고, 디렉토리는 다른 디렉토리를 포함할 수 있다.

 

[pwd]

pwd

파일 시스템에서 현재 위치한 곳을 말해준다.

 

[mkdir]

mkdir 디렉토리명

디렉토리 생성한다.

 

[touch]

touch 파일명

파일을 새로 생성한다.

혹은 이미 존재하는 파일의 수정시간 현재 시각으로 변경한다.

예를 들면 아래와 같다.

%%%%% touch test.txt

%%%%% ls -l

-rw-r--r--  1 taeekim  2020_seoul  2 Jul 30 18:46 test.txt


%%%%% touch test.txt test2.txt

%%%%% ls -l

-rw-r--r--  1 taeekim  2020_seoul  2 Jul 30 18:48 test.txt

-rw-r--r--  1 taeekim  2020_seoul  0 Jul 30 18:48 test2.txt

 

touch -t YYYYMMDDttmm 파일명

존재하는 파일의 수정시간 원하는 일자로 변경한다.

예를 들면 아래와 같다.

%%%%% ls -l 

-rw-r--r--  1 taeekim  2020_seoul  2 Jul 30 18:48 test.txt


%%%%% touch -t 202501010842 test.txt

%%%%% ls -l

-rw-r--r--  1 taeekim  2020_seoul  2 Jan  1  2025 test.txt

과거, 미래는 시간이 출력되지 않고 연도만 찍힌다.

 

[rmdir]

rmdir 디렉토리명

디렉토리 삭제한다.

 

[rm]

rm -r 디렉토리명

비어있지 않은 디렉토리삭제한다. yes로 대답한다.

 

rm 파일명

파일삭제한다.

 

[ls]

ls

현재 위치에 존재하는 파일과 디렉토리 리스트를 출력한다.

 

ls -l

ls 명령어의 상세 리스트 출력 옵션이다.

예를 들면 아래와 같다.

%%%%% ls -l

total 8

-rwxrwxrwx  1 taeekim  2020_seoul  32 Jul 29 18:43 print_groups.sh
-rw-r--r--  1 taeekim  2020_seoul   0 Jul 31 04:56 print_groups_2.sh

(파일/디렉토리 구분, access rights) (링크수) (소유자) (그룹) (bytes수) (마지막 수정 월, 일, 시간) (파일명) 

-                     read

d                    write

                      execute

첫 문자에는 -, d 외에 다른 문자(sticky bit)가 표시될 수 있다.

또한 원하는 파일명만 부여 가능하다.

%%%%% ls -l print_groups.sh

-rwxrwxrwx  1 taeekim  2020_seoul  37 Jul 31 04:56 print_groups.sh

 

ls -a

숨김 파일을 보여준다.

예를 들어 . .. 따위가 있다.

. .. 은 linux, unix OS에서 자체적으로 만들어둔 디렉토리다. 뒤로 가기와 앞으로 가기를 디렉토리로 표현한 것이다.

 

ls -al

.디렉토리를 포함한 상세 리스트를 볼 수 있다. 

명령어 옵션은 순서가 상관없기 때문에 ls -al ls -la은 같은 뜻이다.

예를 들면 아래와 같다.

%%%%% ls -al

total 8

drwxr-xr-x   3 taeekim  2020_seoul  102 Jul 29 18:43 .

drwxr-xr-x  11 taeekim  2020_seoul  374 Jul 29 22:14 ..

-rwxrwxrwx   1 taeekim  2020_seoul   32 Jul 29 18:43 print_groups.sh

 

ls -t 

수정시간최근(마지막) 순서대로 정렬한 리스트를 출력한다.

 

ls -U

생성시간빠른 순서대로 정렬한 리스트를 출력한다.

 

ls -m 

좌우 , 콤마로 구분해서 리스트를 출력한다.

 

ls -p

폴더에는 / 슬래시를 추가하여 구분해서 출력한다.

 

[cd]

cd .

자기 디렉토리로 간다.

 

cd ..

부모 디렉토리로 간다.

 

cd /경로

원하는 경로로 이동한다 (tab을 치면 갈 수 있는 경로 자동완성)

 

cd 

홈 디렉토리로 간다.

 

[chmod ①]

chmod는 접근 권한을 제어하는 명령어다.

첫 번째 방법은 chmod [대상+권한] [파일명/디렉토리명] 과 같은 방식이다.

 

access rights

  • read
  • write
  • execute

사용자 집단

  • u (user, 소유자)
  • g (group, 그룹)
  • o (other, 다른 사람)
  • a (all, 즉 user group other에 모두 적용)

동작

  • + : adding right
  • - : removing right

 

chmod o+w 파일명/디렉토리명

다른 사람에게 쓰기 권한을 부여한다.

예를 들면 아래와 같다.

%%%%% ls -l
-rw-r--r--   1 taeekim  2020_seoul    0 Jul 30 17:42 test.txt

%%%%% chmod o+w test.txt 

%%%%% ls -l

-rw-r--rw-   1 taeekim  2020_seoul    0 Jul 30 17:54 test.txt

access rights는 user | group | others 순으로 나열된다. 

 

 

chmod a+x 파일명/디렉토리명

모든 사용자에게 실행 권한을 부여한다.

예를 들면 아래와 같다.

%%%%% chmod a+x test.txt 

%%%%% ls -l

-rwxr-xrwx   1 taeekim  2020_seoul    0 Jul 30 18:09 test.txt

 

chmod g-rx 파일명/디렉토리명

그룹에게서 읽기 권한실행 권한제거한다.

예를 들면 아래와 같다.

%%%%% chmod g-rx test.txt

%%%%% ls -l

-rwx---rwx   1 taeekim  2020_seoul    0 Jul 30 18:09 test.txt

 

[chmod ②]

chmod의 두 번째 방법은 chmod [권한숫자조합] [파일명/디렉토리명] 과 같은 방식이다.

  • r = 4
  • w = 2
  • x = 1

만약 rwx rw- r-- 조합의 접근 권한을 부여하고 싶다면

      421 420 400을 대신 부여하는 방식이다.

→     7    6    4  로 합한 수 한자리를 결과적으로 이용한다.  

 

 

chmod 764 파일명/디렉토리명

소유자에게 읽기/쓰기/실행 권한을, 그룹에게 읽기/쓰기 권한을, 다른 사람에게 읽기 권한을 부여한다.

예를 들면 아래와 같다.

%%%%% chmod 764 test.txt

%%%%% ls -l

-rwxrw-r--   1 taeekim  2020_seoul    0 Jul 30 17:54 test.txt

 

[echo]

echo 파라미터

입력한 파라미터를 표준 출력(standard output)에 재생(replay)한다.

예를 들면 아래와 같다.

%%%%% echo code4human

code4human

 

[cat]

cat 파일명

파일의 내용을 보여준다. 파일에 접근하진 못한다.

(tip : tab을 누르면 파일 이름이 자동완성된다.)

 

cat -e 파일명

파일의 내용을 보여주되, 줄바꿈(hard return) 표시로 $(non-printable characters)를 출력한다.   

예를 들면 아래와 같다.

%%%%% cat -e test.txt

hello$

myname$

is$

tenakim$

a.k.a.code4human$

 

[more]

파일에 접근하여 내용을 보여주고 man처럼 동작해서 문서 paginate한다.

예를 들면 아래와 같다.

%%%%% more t*.txt

hello

myname

is

tenakim

a.k.a.code4human
test.txt (END)

길이가 긴 문서의 경우 :로 접근 가능하며 arrows로 PgUp PgDown 할 수 있고 스페이스바로 페이지를 넘길 수 있다. 

또한 \로 원하는 부분을 검색할 수 있다.

검색부분이 많으면 스페이스바를 이용해서 다음 부분으로 넘어간다. 

중단하려면 q 입력한다.

 

[head]

head 파일명

파일의 앞부분만 출력한다.

 

head -n 라인수 파일명

앞에서부터 출력할 라인 수를 지정한다.

예를 들면 아래와 같다.

%%%%% head -n 2 practice.txt 

lsjflsdjlsdfj

djfjdljfsd

 

head -c 바이트수 파일명

앞에서부터 출력할 바이트 수를 지정한다.

예를 들면 아래와 같다.

%%%%% head -c 2 practice.txt

ls%

 

참고로 쉘에서 실행하면 결과 바로 뒤에 command prompt가 보이게 된다.

hard return 이후 $ 또는 %가 없기 때문이다.

%%%%% sh

sh-3.2$ head -c 2 practice.txt

lssh-3.2$

 

[tail]

tail 파일명

파일의 뒷부분만 출력한다.

 

tail -n 라인수 파일명

뒤에서부터 출력할 라인 수를 지정한다.

예를 들면 아래와 같다.

%%%%% tail -n 2 practice.txt

djfjdljfsd

fldjsl

 

tail -c 바이트수 파일명

뒤에서부터 출력할 바이트 수를 지정한다.

주의할 것은 줄바꿈 표시 $ 또는 %라인 끝에 포함되어 있으므로 지정한 바이트보다 한개 적게 출력된다.이 부분은 쉘로 실행해도 동일하다.

예를 들면 아래와 같다.

%%%%% tail -c 3 practice.txt 

sl

%%%%% sh

sh-3.2$ tail -c 3 practice.txt 

sl

 

[env, export - 환경변수]

$변수

변수 = 값 으로 변수를 선언하고 $변수 로 활용한다. 

예를 들면 아래와 같다.

%%%%% truc=bidle
%%%%% dream=coder

%%%%% echo dream
dream

%%%%% echo $dream

coder

 

export 변수

환경변수를 선언한다.

선언된 환경변수는 실행하는 프로그램에 전달 가능하다.

로컬 쉘에서 선언한 변수는 다른 프로그램을 실행할 때 인식되지 않는다. 

예를 들면 아래와 같이 bash 대신 sh로 다른 쉘을 사용해보면 서브 쉘(subshell)은 변수 dream을 인식하지 못 해서 출력하지 않는다.

%%%%% sh  

sh-3.2$ echo $dream

sh-3.2$ exit

exit

 

export 명령을 통해 내 환경으로 가져온 환경변수는 서브 쉘에서도 인식한다.

%%%%% export dream

%%%%% sh

sh-3.2$ echo $dream

code

 

env

환경 프로그램을 볼 수 있다. 선언한 환경변수가 있다면 함께 출력된다.

예를 들면 아래와 같다.

%%%%% env

USER=taeekim

LOGNAME=taeekim

HOME=/Users/taeekim

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki

MAIL=/var/mail/taeekim

SHELL=/bin/zsh

TERM=linux

SSH_CLIENT=10.51.9.2 36946 22

SSH_CONNECTION=10.51.9.2 36946 10.15.1.6 22

SSH_TTY=/dev/ttys001

TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000cf080033h2/T/

SHLVL=1

PWD=/Users/taeekim/Desktop/trash

OLDPWD=/Users/taeekim

dream=coder

_=/usr/bin/env

 

[grep]

grep 검색어 파일명

파일내용을 검색어 필터링을 걸어 존재하는 라인만 보여준다.예를 들면 아래와 같다.

%%%%% cat hello.txt

hi Guten Tag, taeekim!

this is not hello!


%%%%% grep ta hello.txt

hi Guten Tag, taeekim!

 

grep -v 검색어 파일명

역으로 검색어가 포함되지 않은 라인만 보여준다.

예를 들면 아래와 같다.

%%%%% cat hello.txt

hi Guten Tag, taeekim!

this is not hello!


%%%%% grep -v ta hello.txt 

this is not hello!

 

grep -i 검색어 파일명

insensitive 하게 검색한다. 

즉, 대소문자(lower and upper case)구분하지 않고 필터링한다.

예를 들면 아래와 같다.

%%%%% cat hello.txt

hi Guten Tag, taeekim!

this is not hello!


%%%%% grep -i TAG hello.txt 

hi Guten Tag, taeekim!

 

댓글