Unix Admin (4): 관리 명령어

2015. 12. 22. 13:13

#tar

옵션

* 여러 파일을 하나의 파일로 압축하기 위해서는 우선 tar 명령어를 통해 묶어야 한다.

- f : 묶음 파일명 지정, 생략시 tape로 백업


참고) 파일 정보 확인 --> file 파일명



#top

CPU를 사용하는 프로세스를 확인

top 실행 중 i --> 유휴(idle) process는 보여주지 않음

  *idle process : memory에 프로그램이 올라와 CPU가 실행할 수 있는 상태이나, 현재 사용되고 있지 않는 프로세스 ==> wait queue에 있는 process

  * run queue

  * wait queue 

d --> refresh 시간을 조정

u --> 특정 user만 모니터링

c --> 실제로 실행된 명령행까지 모니터링

f --> top에 표시되는 필드(컬럼)을 수정할 수 있음

h --> 도움말 보기

 

#find

find [경로][옵션][조건]


예제) find /home -name aaa

/home 경로 밑에서 파일명을 조건으로 파일명이 aaa인 파일을 찾겠다.


find /home -user linux

/home 경로 밑에서 유저명을 조건으로 소유자가 user인 파일을 찾겠다.

응용1 (파이프 이용)

find /home -user user2 | ls -la


응용2 (-exec 이용)

find ./ -perm 775 -exec ls -ld {} \;


#which

PATH에 설정된 디렉토리만 검색


실습 예제)

linux@linux-VirtualBox:~/find$ cat > main.c

#include <stdio.h>

int main()

{

  printf("Hello World!\n");

  return 0;

}

linux@linux-VirtualBox:~/find$

linux@linux-VirtualBox:~/find$

linux@linux-VirtualBox:~/find$

linux@linux-VirtualBox:~/find$ cat main.c

#include <stdio.h>

int main()

{

  printf("Hello World!\n");

  return 0;

}

linux@linux-VirtualBox:~/find$ gcc -o abk main.c


abk --> 안됨


--PATH 등록하기
PATH=$PATH:.


./abk

--> Hello World!


which abk

--> ./abk


cd ..

which abk

--> 없음


abk

--> 오류발생


==> 상위 디렉터리에서는 오류가 발생한다.


--PATH 다시 등록

PATH=$PATH:/home/linux/find


which abk

--> /home/linux/find/abk


abk

--> Hello World!


※PATH의 의미: 특정 명령어를 실행할 경우, OS는 PATH에 설정된 디렉터리들을 순서대로 조회하여 해당 명령어가 있는지 조사 한후, 해당 명령어가 있을 경우 실행해준다.


#grep

특정 문자열(패턴)이 어느 파일의 어느 부분에 있는지를 검색

grep <찾는내용> <파일이름>

grep은 해당 문자열(패턴)이 있는 라인 전체(한 줄)을 출력한다.


예제) grep user /etc/passwd


참고) 리다이렉트 - (파이프, |)

ls -l

--> 표준 출력

ls -l | grep main

표준출력을 grep의 입력으로 보내겠다. (ls -l의 결과가 하나의 txt 파일이라고 볼 수 있음)


응용)

linux@linux-VirtualBox:~/src/linux-4.3.3/init$ find . -user linux -exec grep start_kernel {} \;

--> 이건 됨
--> find로 찾은 각각의 파일명이 {}에 인수로 들어가서 전체 파일 개수 n개 만큼 n번 반복해서 grep 명령이 수행된다고 볼 수 있다.
 * find -exec <command> \; --> 찾은 파일 대상으로 특정 명령을 수행하기 때문.
 cf) 어떤 파일이 해당 문자열을 갖고 있는지 찾으려면 ?
  --> grep start_kernel *

linux@linux-VirtualBox:~/src/linux-4.3.3/init$ find . -user linux | grep start_kernel

--> 이건 안됨


*간단히, 특정 이름의 파일을 찾을 때는 | (파이프)를, 내용에 특정 문자열이 있는 파일을 찾으려면 -exec를 이용하면 된다.


-- 대소문자 구분없이 찾기

linux@linux-VirtualBox:~/find$ grep variable *

aaa.c:variable


linux@linux-VirtualBox:~/find$ grep -i variable *

aaa.c:variable

bbb.c:VARIABLE


linux@linux-VirtualBox:~/find$ grep -i VARIABLE *

aaa.c:variable

bbb.c:VARIABLE


grep -R --> 현재 디렉토리 뿐만 아니라 하위디렉터리까지 조회하는 옵션


곰돌곰둘 외부교육정리/4.UNIX Admin (2015.12)

UNIX Admin(3) 사용자 관리와 파일 속성

2015. 12. 21. 17:58

참조) 정규식 예제

ls -l | grep ^l --> l로 시작하는 행 모두 출력


#파일과 디렉토리의 소유와 허가권

파일 생성 시 기본적으로 권한이 666으로 생성됨 (-rw-rw-rw-)

하지만 umask에 설정된 값에 따라 권한이 - 되어 생성되게 된다.

예) umask 0022일 경우 --> 644 (-rw-r--r--)



#하드링크와 소프트링크

* 하드링크

하드링크는 링크수가 0이 될때 실제 파일(데이터)이 삭제된다.

하드링크는 inode가 같다.

하드링크는 inode를 공유하기 때문에, 같은 File system일 때에만 적용할수 있다.

반면에 소프트링크는 다른 File system간에도 설정할 수 있다.

곰돌곰둘 외부교육정리/4.UNIX Admin (2015.12)

Unix Admin(2)기본 명령어 실습

2015. 12. 21. 17:22

(1)실습환경구성

  1. 버츄얼 박스 설치

  2. 리눅스 설치 (15.04)

  3. Putty 환경구성

    언어설정(키보드)

    sudo passwd

    장치 --> 게스트 확장 CD이미지 삽입 (root계정으로 reboot) -->이걸 설치해야 Virtual Box 화면 크기로 볼수 있음. --> 완료후 CD 꺼내기

     SSH 설치

   --  sudo apt-get install ssh (root계정으로 스위치 한뒤 ssh를 설치하게 됨.) --> 완료

     vi 업데이트

   -- apt_get install vim --> 완료

   -- vi /etc/ssh/sshd_config(root로 수정) --> putty로 원격접속 할때 root계정으로 접속할 수 있도록 설정하려는 것임. --> 데몬 재기동 (service ssh restart)

  -- IP 확인 후 putty로 접속하기

  -- ifconfig

  -- UTP8로 변경(putty)

   4. 기타환경구성

      tree설치 

     apt-get install tree

     --> tree 실행


*Fedora : 모든 기능이 포함되어 있으므로 용량이 큼, 따로 다운로드 받을 필요가 없음.

*Ubuntu : 자동업데이트 체크안함(권장) 

  --> 터미널 실행 : ALT+CLT+T


# 시작과 종료

모드 전환 (F1~F6, F7)

Ctrl+Alt+F1~F7

--> F7은 윈도우 창


종료

shutdown -h now --> 바로 끄는것

shutdown -h 10 ==> 10 분후에 종료예약

 취소시? shutdown - c ==> 걸려있던 모든 shutdown예약이 취소됨.

  (*shutdown -r 로 걸려 있는 리부팅 작업도 포함함)




# 계정 추가 및 삭제

adduser test1 ==> 계정추가

계정 추가시 등록되는 곳. --> /etc/passwd

  ** 실제 비밀번호가 등록되는 곳 --> /etc/shadow

자기계정보기 : whoami

  ** /etc/passwd에 설정된 home directory 가 없을 때는 (ubuntu에서는) root가 pwd가 됨.

  


userdel test2 ==> 계정 삭제

* 계정 삭제 시 주의 : 사용중인 계정은 삭제할 수 없다. 또한 root가 아닌 일반 계정은 userdel 명령에 권한이 없다. --> 사용중인 계정 삭제 --> -f 옵션

userdel 명령으로 계정 삭제 시에도 해당 home directory는 남아 있다.

--> 해당 home 디렉터리까지 삭제 --> -r 옵션



adduser VS useradd

useradd --> 계정만 생성 (/etc/passwd) : 홈 디렉터리 및 비밀번호 (/etc/shadow)는 따로 설정해줘야 함

adduser --> 계정 생성시 /etc/passwd, /etc/shadow, home 디렉터리 설정까지 완료해줌 



#Unix/Linux 기본명령어

 특징

 * 대소문자의 구분

 * 여려 명령의 동시 수행 가능 (예: cal; date)

 * 파일 사용권한의 구분

 * 내부명령어(built-in)와 외부명령어(쉘 프로그래밍)로 구분됨

 * 명령어 사용 형식 : 명령어 [옵션] [인수]


#date

date --> linux 설치 시 설정된 시간이 표시됨

date -I --> YYYY-MM-DD

date -u --> 그리니치 천문대 시각(세계표준시)

date --v, date --version ==> linux 버전을 보여줌


#who

접속된 계정 정보를 보여줌

접속모드, user명, ip 정보등을 출력


#cal

cal -3 (앞 달, 뒷달까지)

cal -y (해당 년 12달 전체 보여줌)


#su - (계정명)

su -, su 로 계정명 생략 시 root로 전환 가능

*root 유저는 일반 유저로 switch 시 pw가 필요치 않음


#ls

해당 디렉터리 안의 파일목록을 나열 (*디렉터리까지)

ls /usr/bin --> /usr/bin 안의 파일목록을 나열

ls -a --> 숨겨진 파일을 보여줌

ls -l --> pwd의 파일 정보를 목록형으로 자세히 보여줌 (long format)

  ** 디렉터리 자체에 대한 권한을 보기 ls -ld /usr/bin

  ** 디렉터리에 대한 r, w, x 권한

    r --> 디렉터리 안의 파일 내용에 대한 조회 가능

    w --> 디렉터리 안에 파일 생성 가능, 디렉터리 삭제 가능

    x --> 디렉터리에 cd 가능

ls -i --> 파일의 inode번호를 알 수 있음


#cd

*상대경로와 절대경로 개념을 숙지해야 함.


cd ~user1 --> user1의 home directory로 이동

-rwxr-xr-x 1 root root      37808  8월 16  2013 xprop


cd --> 자신의 홈디렉터리로 이동 (cd ~와 동일)

첫번째 필드 : 파일 형식 (6가지)

- 일반파일
d 디렉토리
c 캐릭터 디바이스
b 블럭 디바이스
p 파이프
l 링크

2~ 10번째 필드 : 파일 권한
자신, 그룹, Other


11번째 필드 --> 

12번째 필드 --> 소유자

1일차캡쳐.zip


13번째 필드 --> 파일크기


#pwd

현재 경로를 출력


#rm

현재 파일을 삭제


예제 파일 작성

$ cat > abc.txt

this is a abc.txt file

ctrl+D

(ctrl+D ==> End Of File, EOF. 이걸 입력하면 입력이 종료되었음을 알려줌)


*cat (노 옵션시) ==> Copy standard input to standard output


rm -r --> 해당 디렉터리 및 디렉터리 안의 파일 모두 삭제


*지우려는 파일이나 디렉토리에 삭제 권한(w)이 있어야 함.

만약 해당 디렉터리에 w권한이 없다면, 그 안의 어떤 파일(디렉터리)에 대해서도 삭제할 수 없다.

예) ~/aaa/bbb

aaa는 bbb디렉터리의 inode에 대한 정보를 갖고 있으므로, 만약 bbb디렉터리를 삭제하게 된다면 aaa디렉터리의 내용도 변경해줘야 함. 따라서 w권한이 필요함.


#cp

*새로 복사한 파일은 사용자의 소유가 됨


*디렉터리에 대한 복사

cp -r 옵션을 주지 않으면 디렉터리는 복사할 수 없음

경우에 따라 결과가 다르다


경우1)

Before

.

├── aaa

│   └── test.txt

├── cba.txt

└── examples.desktop


cp -r aaa bbb


After

.

├── aaa

│   └── test.txt

├── bbb

│   └── test.txt

├── cba.txt

└── examples.desktop


경우2)

Before

.

├── aaa

│   └── test.txt

├── bbb

│   └── test.txt

├── cba.txt

└── examples.desktop


cp -r aaa bbb


After

.

├── aaa

│   └── test.txt

├── bbb

│   ├── aaa

│   │   └── test.txt

│   └── test.txt

├── cba.txt

└── examples.desktop


참고) cp 명령은 복사이기 때문에 기존 존재하던 abc.sql이 삭제 되지 않았음.

├── aaa
│   └── test.txt
├── bbb
│   └── abc.sql
├── cba.txt
└── examples.desktop

cp -r aaa bbb


├── aaa
│   └── test.txt
├── bbb
│   ├── aaa
│   │   └── test.txt
│   └── abc.sql
├── cba.txt
└── examples.desktop


참고2) cp -r 명령으로 디렉터리 복사시 path가 동일하더라도 overwrite 되지 않는다.

단, 노 옵션으로 cp로 파일을 복사하면, overwrite된다.


#touch

 * 파일이 없으면 size가 0인 파일을 생성

 * 파일이 있으면 수정 시간을 현재 시간으로 변경함. (파일 내용은 변경 되지 않음)


#mv

 파일이나 디렉터리의 path를 변경

 여러개의 인수를 동시에 지정시, 맨 마지막 인수는 existing directory만 지정 가능

 

#cat

cat test.sql --> test.sql 파일의 내용을 화면에 표준출력

cat > test.sql --> 표준출력을 test.sql로 리다이렉트. 기존에 파일이 없다면 파일을 생성한다. 기존에 파일이 있다면 overwrite한다.

cat >> test.sql --> 표준출력을 test.sql로 리다이렉트. 기존에 파일이 없다면 파일을 생성한다. 기존에 파일이 있을 경우 기존 text에 붙인다.


cat -n --> 파일 내용을 표준 출력하는데 각 행마다 number를 붙인다.

cat -b --> 파일 내용을 표준 출력하는데 각 행마다 number를 붙인다. 단, 공란 제외

cat -nb <==> cat -b


#more

실습환경 구성 (wget 실습)

1) https://www.kernel.org/ 접속

2) Stable : 4.3.3 의 tar.xz 파일을 오른쪽으로 클릭 후 '링크 주소 복사'



3) Putty에서 사용자 계정(예: linux)의 home directory로 접속후, mkdir src로 디렉터리 생성

cd src로 이동

(4) ~/src에서 wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.3.3.tar.xz 실행

(5) download가 시작된다 (인터넷에 연결되어 있어야 함)



(6)압축해제 후 README 파일로 more를 실습한다.



#head

문서의 윗줄부터 n줄까지만 보여준다. -number 옵션으로 조절가능하며, default값은 10.

head -3 /etc/*.conf ==> 모든 *.conf파일들을 위에서부터 3줄씩만 보여준다.


#tail

문서의 아랫줄부터 n줄까지만 보여준다. -number 옵션으로 조절가능하며, default값은 10.

tail -f 파일명 ==> 해당 파일의 추가되는 아랫줄을 계속해서 덧붙여서 refresh 해준다.

곰돌곰둘 외부교육정리/4.UNIX Admin (2015.12)