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 윈도우 시스템"
'네트워크/서버/모의해킹 > 리눅스' 카테고리의 다른 글
17.4.27(53일차 리눅스 명령어-9) (489) | 2017.04.27 |
---|---|
17.4.26(52일차 리눅스 명령어-8) (491) | 2017.04.26 |
17.4.24(50일차 리눅스 명령어-6) (506) | 2017.04.24 |
17.4.21(49일차 리눅스 명령어-5) (496) | 2017.04.21 |
17.4.20(47일차 리눅스 명령어-4) (482) | 2017.04.20 |