[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!
자료실
유용한 자료들을 모아두었습니다.