자료실

홈 / 고객센터 / 자료실

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

기본정보
  • 글쓴이
  • 고객지원팀
  • 조회수
  • 3,185회
상세내용

[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!

자료실

유용한 자료들을 모아두었습니다.