본문으로 바로가기

Linux Shell


명령어 -  shell해석기 --kernel ---cpu



현재 제공하는 쉘 ,위치


[root@CentOS2 /root]# chsh -l

/bin/sh

/bin/bash ----> 기본적으로 사용하는 shell    

/sbin/nologin

/bin/dash

/bin/tcsh ----> csh 확장

/bin/csh  ----> 다른 쉘하고 문법이 호환이 안됨, billy joy이 개발한 쉘


/bin/ksh  ----> 잘사용되지는 않지만 , 본쉘과 호환됨, 명령행 편집기 제공



현재 ksh 를 지원되지 않는다. 'yum' 명령어를 이용하여 ksh 쉘을 설치하도록 한다.

[root@CentOS2 /root]# yum install ksh

[root@CentOS2 /root]# chsh -l

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh


쉘 변경방법


[user1@CentOS2 /home/user1]$ chsh

Changing shell for user1.

암호: centos

New shell [/bin/bash]: /bin/ksh

Shell changed.

[user1@CentOS2 /home/user1]$

[user1@CentOS2 /home/user1]$ ps

PID TTY TIME CMD

5392 pts/3 00:00:00 bash

5425 pts/3 00:00:00 ps

/bin/ksh


ls /bin/*sh

/bin/bash  /bin/csh  /bin/dash  /bin/ksh  /bin/sh  /bin/tcsh


[root@CentOS2 /root]# ssh -l user1 localhost  user1의 루트백 접속


--------------------------------------------------------------------------------------

1)로그인할때 Shell 이 Bash Shell 이면 다음과 같은 순서대로 해당 파일들이 실행된다.



시스템 환경변수 홈계정 환경변수          명령어를 자동으로 사용

/etc/profile -> $HOME/.bash_profile -> $HOME/.bashrc -> /etc/bashrc


/etc/profile

시스템을 사용하는데 필요한 환경 변수들이 들어가 있다.



$HOME/.bash_profile

계정들이 필요한 환경 변수들이 들어가 있다.



$HOME/.bashrc

명령어를 자동으로 사용하기 위한 명령어가 들어가 있다.



2) 로그인 Shell 이 종료될 경우, 다음과 같은 파일이 실행된다.

$HOME/.bash_logout 실행 -> 'bash shell 명령어 사용 기록들' -> $HOME/.bash_history 파일에 저장


-------------------------------------------------------------------------------------------------

Linux 부팅 과정


리눅스 부팅 과정은 다음과 같다.

① 전원 ON

② ROM BIOS 을 통하여 POST 진행

-------------------------------------- 하드웨어 & ROM 담당

③ GRUB 부트로더 실행

④ 커널이미지를 메모리로 로딩 실시

⑤ init 프로세스 실행

-------------------------------------- 리눅스 운영체제 담당

⑥ login

-------------------------------------- 사용자 로그인 실시


grub 부트로더 설정 파일

vi grub.conf


5 # all kernel and initrd paths are relative to /, eg.

6 # root (hd0,0)

7 # kernel /boot/vmlinuz-version ro root=/dev/sda1

8 # initrd /boot/initrd-[generic-]version.img

9 #boot=/dev/sda // 부트로더는 파일시스템에 저장된게 아니라, /dev/sda/장치에 저장되어있음

10 default=0 // 멀티 부팅시 선택하지 않으면, 첫번째 타이틀의 커널로 부팅 실시

11 timeout=5 // 부팅시 부트로더 메뉴 대기 시간

12 splashimage=(hd0,0)/boot/grub/splash.xpm.gz // 부팅시 grub 부트로더 메뉴 그림 출력

13 hiddenmenu // 부팅시 grub 부트로더 메뉴를 숨김

14 title CentOS 6 (2.6.32-504.el6.x86_64) // 부팅 이미지 레이블명

15 root (hd0,0) // sda1 을 의미한다. hd2,1 이라고 하면 3 번째 디스크, 2 번째 파티션

16 kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=7c533aa0-0a72-4a 94-b076-

382622ad8486 rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD crashkernel=auto KEYBOARDTYPE=pc

KEYTABLE=ko rd_NO_LVM rd_NO_DM rhgb quiet

17 initrd /boot/initramfs-2.6.32-504.el6.x86_64.img // initrd 이미지 이름



테스트를 하기 위해서 다음과 같이 수정한다.


1 # grub.conf generated by anaconda

2 #

3 # Note that you do not have to rerun grub after making changes to this file

4 # NOTICE: You do not have a /boot partition. This means that

5 # all kernel and initrd paths are relative to /, eg.

6 # root (hd0,0)

7 # kernel /boot/vmlinuz-version ro root=/dev/sda1

8 # initrd /boot/initrd-[generic-]version.img

9 boot=/dev/sda

10 default=0

11 timeout=60

12 #splashimage=(hd0,0)/boot/grub/splash.xpm.gz

13 #hiddenmenu

14 title CentOS Server 1 (2.6.32-504.el6.x86_64)

15 root (hd0,0)

16 kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=7c533aa0-0a72-4a 94-b076-

382622ad8486 rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD crashkernel=auto KEYBOARDTYPE=pc

KEYTABLE=ko rd_NO_LVM rd_NO_DM rhgb quiet

17 initrd /boot/initramfs-2.6.32-504.el6.x86_64.img

: wq!


mount -a, init 0


부트로더 모드


rhgb quiet 1 싱글 유저 모드(슈퍼 유저 모드 부팅)  ----> 바로 root로 접속하게 됨

rhgb quiet 3 모든 기능을 지원하는 다중 유저 모드

(텍스트 콘솔 부팅, 'startx' 명령어 사용 -> Xwindow 사용 가능)

rhgb quiet 5 모든 기능을 지원하는 다중 유저 모드 (Xwindow 부팅)



싱글모드 패스워드 복구 가능

방향키 위 또는 아래를 눌르면, 메뉴 타임아웃이 멈추고 사라짐, 'e'를 눌르면 타이틀 메뉴으로 입장됨

'grub.conf' 타이틀 메뉴가 나오며, 2 번째를 선택하여 'e'를 눌른다.

quiet 에서 한칸 띄우고 '1'를 입력한 다음 엔터를 실시함 (1 은 슈퍼 유저 모드 부팅)

타이틀 메뉴로 되돌아 왔다면, 'b'를 눌러서 싱글 유저 모드로 부팅을 실시함

부팅 되면 싱글 모드는 로그인 인증 단계 없이 바로 'root'로 접속된다. 그렇기 때문에 패스워드 복구시 사용 가능한

모드이다.

기존 패스워드는 암호화되었기 때문에 복구가 불가능하다. 그래서 'passwd' 명령어를 이용하여 'root'의

새로운 패스워드를 설정한다.  centos1


'tty' 명령어를 이용하여 확인하면, 싱글 유저 모드는 가상 콘솔이 아닌 실제 콘솔로 연결된것으로 나온다.


reboot


싱글 유저 모드 암호 설정

grub

md5crypt

centos

해시값복사

vi /etc/grub.conf

password --md5 $1$ZPXhH/$a33wJKg7smPOO9Cujswhc1

wq!

init 0


p입력후 centos(비밀번호)

2번째 선택 ,e입력

한칸뛰고 quiet 5 모든 기능을 지원하는 다중 유저 모드 (Xwindow 부팅)

타이틀 메뉴로 되돌아 왔다면, 'b'를 눌러서 기본 모드로 부팅을 실시함





커널 부팅

커널이 메모리에 올라가면, 커널이 부팅되면서 각종 장치 드라이버들을 메모리에 올려준다. 다음 정보 확인을

통하여 커널이 메모리에 올린 장치 드라이버들을 확인할 수 있다.


root@CentOS /root]# lsmod  ---> 메모리에 올린 장치 드라이버


Module Size Used by

lp 9242 0

autofs4 26609 3

8021q 25527 0

~ 중간 생략 ~

cdrom 39085 1 sr_mod

sd_mod 36998 3

crc_t10dif 1305 1 sd_mod

pata_acpi 3701 0

ata_generic 3837 0

ata_piix 24409 0

mptspi 16411 2

mptscsih 36636 1 mptspi

mptbase 93615 2 mptspi,mptscsih

scsi_transport_spi 25447 1 mptspi

dm_mirror 14384 0

dm_region_hash 12085 1 dm_mirror

dm_log 9930 2 dm_mirror,dm_region_hash

dm_mod 95622 8 dm_mirror,dm_log


Init 프로세스 실행

커널은 부팅이 완료되면, 마지막으로 init 프로세스를 생성한다. Init 프로세스는 서버를 올려주거나, 파일

시스템 마운트, 네트워크 설정 등 관리자가 필요한 서비스 대한 동작 실시를 담당한다. 또한, Init 프로세스는

부팅시 run-level 결정한다.


inittab파일 및 Run_level 확인

[root@CentOS2 /root]# cd /etc

[root@CentOS2 /etc]# ls -l inittab

-rw-r--r--. 1 root root 884 2017-04-22 00:31 inittab

[root@CentOS2 /etc]# cp inittab inittab.bak



Default runlevel. The runlevels used are:

 18 #   0 - halt (Do NOT set initdefault to this)

 19 #   1 - Single user mode

 20 #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

 21 #   3 - Full multiuser mode

 22 #   4 - unused

 23 #   5 - X11

 24 #   6 - reboot (Do NOT set initdefault to this



[root@CentOS2 /etc]# who -r

         run-level 5  2017-04-25 11:48


---현재 부팅모드의 run level



[root@CentOS /etc]# init 0 // 시스템 종료

[

[root@CentOS /etc]# init 6 // 시스템 재부팅



---------------------------------------------------------------------------------------------

백업 & 복구

데이터 정보를 보존하는 방법을 백업이라고 하며, 나중에 복구를 위해서라도 백업은 필수 작업이다.



완전 백업(Full Backup)

파일 시스템 중에 특정 내용을 전체 백업하는 방식이다. 확실한 복구가 가능하지만, 백업 시간 및 비용은

파일 시스템 용량과 비례한다.


증분백업(Incremental Backup)

최근에 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업하는 방식이다. 백업 시간은 빠르지만,

복구 시간이 느리다.


차등백업(Differential Backup)

완전 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업하는 방식이다. 확실한 복구가 가능하며,

증분 백업보다 복구 시간이 빠르다. 단, 백업 시간 및 비용은 파일 시스템 용량과 비례한다.


--------------------------------------------------------------------------------


tar' 명령어를 이용한 백업

먼저 백업에 사용할 디스크 파티션을 선정하고 파일 시스템 생성 및 마운트를 실시한다.



파티션 선정 및 파일 시스템 생성 & 마운트 실시


[root@CentOS2 /root]# fdisk -l /dev/sdc

Disk /dev/sdc: 213 MB, 213909504 bytes

64 heads, 32 sectors/track, 204 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00024910

Device Boot Start End Blocks Id System

/dev/sdc1 1 204 208880 83 Linux


[root@CentOS2 /root]# mkfs -t ext4 /dev/sdc1


[root@CentOS2 /root]# mkdir /backup


[root@CentOS2 /root]# mount /dev/sdc1 /backup


[root@CentOS2 /root]# df -h /dev/sdc1

Filesystem Size Used Avail Use% Mounted on

/dev/sdc1 194M 1.8M 182M 1% /backup


----------------------------------------------------------------------------------------------------


완전 백업 구성


[root@CentOS2 /root]#

[root@CentOS2 /root]# cd /home

[root@CentOS2 /home]# ls

lost+found user1 user2

[root@CentOS2 /home]# tar -cf /backup/home.tar *

[root@CentOS2 /home]# ls /backup

home.tar lost+found

[root@CentOS2 /home]# tar -tf /backup/home.tar

-c: 새 저장 파일을 만든다.

-t : 저장리스트의 목록을 보여준다.

-f : 파일지정

---------------------------------------------------------------------------------------------------

증분 백업 구성


root@CentOS2 /home]# useradd ccna

[root@CentOS2 /home]# useradd ccnp

[root@CentOS2 /home]# useradd ccie

[root@CentOS2 /home]# ls

ccie ccna ccnp lost+found user1 user2


[root@CentOS2 /home]# tar -cf /backup/cisco.tar ccna ccnp ccie


[root@CentOS2 /home]# ls /backup

cisco.tar home.tar lost+found

[root@CentOS2 /home]# tar -tf /backup/cisco.tar


------------------------------------------------------------------------------------------


백업 스케쥴

일 : 완전 백업

월 : 증분 백업

화 : 증분 백업

수 : 증분 백업


[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home0.tar *  -->일요일

[root@CentOS2 /home]# useradd ccna----> 월요일

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home1.tar * 

[root@CentOS2 /home]# useradd ccnp----> 화요일

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home2.tar * 

[root@CentOS2 /home]# useradd ccie-----> 수요일

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home3.tar * 

[root@CentOS2 /home]# ls /backup/

backup.list  home0.tar  home1.tar  home2.tar  home3.tar

[root@CentOS2 /home]# 



[root@CentOS2 /home]# tar -tf /backup/home0.tar | grep .bashrc(완전 백업)

user1/.bashrc  

user2/.bashrc

[root@CentOS2 /home]# tar -tf /backup/home1.tar | grep .bashrc(증분 백업)

ccna/.bashrc

[root@CentOS2 /home]# tar -tf /backup/home2.tar | grep .bashrc(증분 백업)

ccnp/.bashrc

[root@CentOS2 /home]# tar -tf /backup/home3.tar | grep .bashrc(증분 백업)

ccie/.bashrc



일요일은 완전 백업을 하는 날이기 때문에, 기존에 'backup.list'를 삭제하고 새로 생성하여 백업을

실시한다.



일요일(완전 백업)

[root@CentOS2 /home]# rm /backup/backup.list

rm: remove 일반 파일 `/backup/backup.list'? y

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/homeA.tar *

[root@CentOS2 /home]# ls /backup

backup.list home0.tar home1.tar home2.tar home3.tar homeA.tar

[root@CentOS2 /home]# tar -tf /backup/homeA.tar | grep .bashrc

ccie/.bashrc

ccna/.bashrc

ccnp/.bashrc

user1/.bashrc

user2/.bashrc

[root@CentOS2 /home]# userdel -r ccna

[root@CentOS2 /home]# userdel -r ccnp

[root@CentOS2 /home]# userdel -r ccie

[root@CentOS2 /home]# rm -rf /backup/*

[root@CentOS2 /home]# ls /backup


-------------------------------------------------------------------------------------------



백업 스케쥴

일 : 완전 백업

월 : 증분 백업

화 : 증분 백업

수 : 차등 백업



일요일(완전 백업)

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home0.tar *

[root@CentOS2 /home]#

[root@CentOS2 /home]# cp /backup/backup.list /backup/fullbackup.list

----> list를 백업하여 이름을 fullbackup.list로 바꾼다. 이름은 날짜로 하는것이 좋음 

월요일(증분 백업)

[root@CentOS2 /home]# useradd ccna

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home1.tar *


화요일(증분 백업)

[root@CentOS2 /home]# useradd ccnp

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home2.tar *


수요일(차등 백업)

[root@CentOS2 /home]# useradd ccie

[root@CentOS2 /home]#

[root@CentOS2 /home]# cp /backup/fullbackup.list /backup/backup.list

---> /backup/fullbackup.list의 파일을 다시  /backup/backup.list로 만든다.

[root@CentOS2 /home]#

[root@CentOS2 /home]# tar -g /backup/backup.list -cf /backup/home3.tar *


[root@CentOS2 /home]# ls /backup




완전 백업

[root@CentOS2 /home]# tar -tf /backup/home0.tar | grep .bashrc

user1/.bashrc

user2/.bashrc


증분 백업

[root@CentOS2 /home]# tar -tf /backup/home1.tar | grep .bashrc

ccna/.bashrc


증분 백업

[root@CentOS2 /home]# tar -tf /backup/home2.tar | grep .bashrc

ccnp/.bashrc


차등 백업

[root@CentOS2 /home]# tar -tf /backup/home3.tar | grep .bashrc

ccie/.bashrc

ccna/.bashrc

ccnp/.bashrc

backup.list fullbackup.list home0.tar home1.tar home2.tar home3.tar



-----------------------------------------------------------------------------


백업 복원



[root@CentOS2 /home]# rm -rf /home/*


[root@CentOS2 /home]# ls /backup

backup.list fullbackup.list home0.tar home1.tar home2.tar home3.tar

[root@CentOS2 /home]# tar -xf /backup/home0.tar

[root@CentOS2 /home]# ls

lost+found user1 user2

[root@CentOS2 /home]# tar -xf /backup/home3.tar

[root@CentOS2 /home]# ls

ccie ccna ccnp lost+found user1 user2



------------------------------------------------------------------------------------


rpm -qi httpd  ---> 자세하게 보기     

Name        : httpd                        Relocations: (not relocatable)

Version     : 2.2.15                            Vendor: CentOS

Release     : 39.el6.centos                 Build Date: 

Install Date:                                  Build Host: c6b9.bsys.dev.centos.org

Group       : System Environment/Daemons    Source RPM: httpd-2.2.15-39.el6.centos.src.rpm

Size        : 3085394                          License: ASL 2.0

Signature   : RSA/SHA1, 2014년 10월 18일 (토) 오전 05시 02분 19초, Key ID 0946fca2c105b9de

Packager    : CentOS BuildSystem <http://bugs.centos.org>

URL         : http://httpd.apache.org/

Summary     : Apache HTTP Server




[root@CentOS2 /root]# cd /media/CentOS_6.6_Final/

[root@CentOS2 /media/CentOS_6.6_Final]# 


[root@CentOS2 /media/CentOS_6.6_Final/Packages]# rpm -qf /bin/ls ----> rpm 패키지 찾기

coreutils-8.4-37.el6.x86_64

[root@CentOS2 /media/CentOS_6.6_Final/Packages]# rpm -qf /bin/cp

coreutils-8.4-37.el6.x86_64




[root@CentOS2 /root]# whereis vsftpd 

vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz

[root@CentOS2 /root]# rm /usr/sbin/vsftpd

rm: remove 일반 파일 `/usr/sbin/vsftpd'? y



[root@CentOS2 /media/CentOS_6.6_Final/Packages]# rpm -q vsftpd 설치확인

vsftpd-2.2.2-12.el6_5.1.x86_64

[root@CentOS2 /media/CentOS_6.6_Final/Packages]# rpm -e vsftpd  제거


rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm 

준비 중...               ########################################### [100%]

   1:telnet-server          ########################################### [100%]



rpm -ql telnet-server  -- 목록 나오는것(l)

/etc/xinetd.d/telnet

/usr/sbin/in.telnetd

/usr/share/man/man5/issue.net.5.gz

/usr/share/man/man8/in.telnetd.8.gz

/usr/share/man/man8/telnetd.8.gz



# rpm -i --replacepkgs iputils-20071127-17.el6_4.2.x86_64.rpm ---> 덮어씌우기



root@CentOS2 /media/CentOS_6.6_Final/Packages]# rpm -e xinetd

오류: Failed dependencies:

        xinetd is needed by (installed) amanda-2.6.1p2-8.el6.x86_64 ---->의존성 패키지라서 오류 발생

[root@CentOS2 /media/CentOS_6.6_Final/Packages]#


* 의존성을 무시하고 설치하기

   : rpm -Uvh 패키지파일이름 --nodeps : 의존관계에 있는 다른 패키지가 설치되어 있지 않다해도 강제 설치한다.

* 의존성 무시하고 삭제하기

   : rpm -e 패키지이름 --nodeps : 이 패키지를 필요로 하는 다른 패키지가 있더라도 무시하고 패키지를 삭제한다.




yum erase 패키지이름  --> yum 패키지 삭제하는 명령어


패키지를 삭제하면, 의존성이 걸려있는 패키지를 검색하여 삭제할 수 있다.



- 'yum' 패키지 다운로드 디렉토리 확인

[root@CentOS2 /etc]# cd /var/cache/yum

[root@CentOS2 /var/cache/yum]# ls

x86_64

[root@CentOS2 /var/cache/yum]# cd x86_64/

[root@CentOS2 /var/cache/yum/x86_64]# ls

6

[root@CentOS2 /var/cache/yum/x86_64]# cd 6

[root@CentOS2 /var/cache/yum/x86_64/6]# ls

base extras timedhosts.txt updates




패키지 이름을 모를 경우, 설치하는 방법

[root@CentOS2 /root]# yum list

~ 중간 생략 ~

[root@CentOS2 /root]# mkdir /test

[root@CentOS2 /root]# yum list > /test/yum.list

[root@CentOS2 /root]# cat /test/yum.list | more

~ 중간 생략 ~

[root@CentOS2 /root]# cat /test/yum.list | grep telnet

telnet.x86_64 1:0.17-48.el6 base

telnet-server.x86_64 1:0.17-48.el6 base



[root@CentOS2 /root]# cat /test/yum.list | grep telnet 

telnet.x86_64 1:0.17-48.el6 base

telnet-server.x86_64 1:0.17-48.el6 base

[root@CentOS2 /root]# yum install telnet-server


 업데이트 가능한 패키지 확인

[root@CentOS2 /root]# yum check-update



[root@CentOS2 /root]# yum list dovecot

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

* base: mirror.oasis.onnetcorp.com

* extras: mirror.fairway.ne.jp

* updates: mirror.oasis.onnetcorp.com

Installed Packages

dovecot.x86_64 1:2.0.9-7.el6_5.1 @anaconda-CentOS-201410241409.x86_64/6.6

Available Packages

dovecot.i686 1:2.0.9-19.el6_7.2 updates

dovecot.x86_64 1:2.0.9-19.el6_7.2 updates



root@CentOS2 /root]# yum update dovecot

~ 중간 생략 ~

Dependencies Resolved

===================================================================

Package Arch Version Repository Size

===================================================================

Updating:

dovecot x86_64 1:2.0.9-19.el6_7.2 updates 1.9 M

Transaction Summary

===================================================================

Upgrade 1 Package(s)

Total download size: 1.9 M

Is this ok [y/N]: y

Downloading Packag



yum grouplist

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Group Process

Loading mirror speeds from cached hostfile

* base: mirror.oasis.onnetcorp.com

* extras: mirror.fairway.ne.jp

* updates: mirror.oasis.onnetcorp.com

Installed Groups:

CIFS 파일 서버

Eclipse

FTP 서버

ID 관리 서버

NFS 파일 서버

Perl 지원

SNMP 지원

X 윈도우 시스템



yum groupinfo "X 윈도우 시스템"

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Group Process

Loading mirror speeds from cached hostfile


yum  -y groupinstall "X 윈도우 시스템"