리눅스 시스템의 기초(2)

PHP中文网
PHP中文网원래의
2017-06-20 11:19:382403검색
Linux 디스크 관리
I/O 포트: I/O 장치 주소
모든 것이 파일입니다:
open(), read(), write(), close( )
블록 장치: 블록, 액세스 단위 "블록", 디스크
문자 장치: 문자, 액세스 단위 "문자", 키보드
장치 파일: 장치 드라이버 프로그램과 연결됨
장치 번호:
메이저 번호: 메이저 번호, 장치 유형 식별
마이너 번호: 마이너 번호, 동일한 유형 식별
하드 디스크 인터페이스 유형:
병렬:
IDE: 133MB/s
SCSI: 640MB/s
Ser: 기본 포트:
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
rpm: 분당 회전 수
/dev/DEV_FILE
디스크 장치의 장치 파일 이름 지정:
IDE: /dev/hd
SCSI, SATA, SAS, USB: /dev/sd
다른 장치: a-z
/dev/sda, /dev/sdb , . ..
동일한 장치의 다른 파티션: 1,2, ...
/dev/sda1, /dev/sda5
기계적 하드 드라이브:
track : 트랙
실린더: 실린더
secotr: 섹터
512bytes
파티션 방법:
실린더별
0 트랙 0 섹터 : 512bytes
MBR: 마스터 부트 레코드
446바이트: 부트 로더
64바이트: 파티션 테이블
16바이트: 파티션 식별
2바이트: 55AA
4 기본 파티션
3개의 기본 파티션 + 1개의 확장(N 논리 파티션)
논리 파티션
파티션 관리 도구: fdisk, parted, sfdisk
fdisk: 하드 디스크의 경우 일반적으로 최대 15개의 파티션을 관리합니다.
# fdisk -l [-u] [device...]
# fdisk device
하위 명령: 관리 기능
p: 인쇄 , 기존 파티션 표시
n: 새로 만들기, 생성
d: 삭제, 삭제
w: 쓰기, 디스크에 쓰고 종료
q: 종료, 업데이트를 취소하고 종료
m: 도움 받기
l: 파티션 ID 나열
t: 파티션 ID 조정
커널이 새 파티션을 인식했는지 확인:
# cat / proc/partations
하드 디스크 파티션 테이블을 다시 읽도록 커널에 알립니다:
partx -a /dev/DEVICE
-n M:N
kpartx - a /dev/DEVICE
-f: force
CentOS 5: partprobe
partprobe [/dev/DEVICE]
사용
Linux 파일 시스템 관리:
Linux 파일 시스템: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap
swap: 스왑 파티션
CD: iso9660
윈도우: fat32, ntfs
Unix: FFS, UFS, JFS2
네트워크 파일 시스템: NFS, CIFS
클러스터 파일 시스템: GFS2, OCFS2
분산 파일 시스템: ceph,
moosefs, mogilefs, GlusterFS, Luster
"저널" 기능 지원 여부에 따라:
저널링 파일 시스템: ext3, ext4, xfs, ...
저널링이 아닌 파일 시스템: ext2, 파일 시스템의 vfatfcomponents :
커널의 모듈 : ext4, xfs, vfat
user space management 도구 : mkfs.ext4, mkfs.xfs, mkfs
Linux 가상 파일 시스템: VFS
파일 시스템 생성:
mkfs 명령:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
'LABEL': 라벨 설정
:Mke2fs: EXT 시리즈 파일 시스템 특수 관리 도구
-T {EXT2 | EXT4} 2048 |
-j: -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i와 동일 #: 데이터 공간 inode의 모든 바이트 수에 대해 하나씩 생성합니다. ; 이 크기는 블록 크기보다 작아서는 안 됩니다.
-m #: 관리자용으로 예약된 공간의 비율입니다. -O FEATURE[,...]: 지정된 기능 활성화
-O ^FEATURE: 지정된 기능 끄기
mkswap: 스왑 파티션 생성
mkswap [옵션] 장치
-L 'LABEL'
전제 조건: 파티션의 ID를 82로 조정합니다.
기타 일반적으로 사용되는 도구:
blkid: 블록 장치 속성 보기 information
blkid [OPTION]... [DEVICE]
-U UUID: 지정된 UUID를 기준으로 해당 장치를 찾습니다
-L LABEL: 지정된 LABEL을 기준으로 해당 장치를 찾습니다
e2label: 확장 시리즈 파일 시스템을 관리하는 LABEL
# e2label DEVICE [LABEL]
tune2fs: 확장 시리즈 파일 시스템의 조정 가능한 매개변수 값을 재설정
-l: 지정된 파일 시스템 슈퍼 블록 정보를 봅니다. 슈퍼 블록
-L 'LABEL': 볼륨 레이블 수정
-m #: 관리자용으로 예약된 공간 비율 수정
-j: ext2를 ext3으로 업그레이드
-O: 파일 시스템 속성 활성화 또는 비활성화
-o: 파일 시스템의 기본 마운트 옵션 조정
-U UUID: UUID 번호 수정
dumpe2fs:
-h: 슈퍼 블록 정보 보기
파일 시스템 감지:
fsck: 파일 시스템 CheCk
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 오류 자동 수정
-r: 대화형 오류 수정
참고 : FS_TYPE은 파티션의 기존 파일과 동일한 유형이어야 합니다.
e2fsck: 확장 시리즈 파일에 대한 전용 검색 및 복구 도구
-y: 자동 응답은 '예'입니다. -f: 강제 복구 ;
파일 시스템 관리:
추가 파일 시스템을 루트 파일 시스템의 기존 디렉터리와 연결한 다음 이 디렉터리를 다른 파일에 대한 액세스 항목으로 사용하는 것을 마운트라고 합니다.
이 연관성을 공개하는 프로세스는 장치를 마운트 포인트로 연관시킵니다. 또는 마운트 지점을 사용할 수 있습니다
umount
참고: 마운트 지점 아래의 원본 파일은 마운트가 완료된 후 일시적으로 숨겨집니다.
마운팅 방법: mount DEVICE MOUNT_POINT
mount: /etc/mtab 파일
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device: 지정을 확인하여 현재 시스템에 마운트된 모든 장치를 표시합니다. 장치 마운트
(1) 장치 파일: 예: /dev/sda5
(2) 볼륨 레이블: -L 'LABEL', 예: -L 'MYDATA'
(3) UUID, - U 'UUID': 예: -U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 의사 파일 시스템 이름: proc, sysfs, devtmpfs, configfs
dir: 마운트 지점
미리 존재합니다. 빈 디렉토리를 사용하는 것이 좋습니다.
프로세스에서 사용 중인 장치는 마운트 해제할 수 없습니다.
공통 명령 옵션:
마운트할 장치의 파일을 지정합니다. 시스템 유형
-r: 읽기 전용, 읽기 전용 마운트
-w: 읽기 및 쓰기, 읽기-쓰기 마운트; /etc/mtab을 업데이트하지 않음
-a: 자동 마운트를 지원하는 모든 장치를 자동으로 마운트합니다(/etc/fstab 파일에 정의되어 있으며 마운트 옵션에 "자동 마운트" 기능이 있음)
-L 'LABEL': 볼륨 레이블은 마운트 장치를 지정합니다.
-U 'UUID': UUID로 마운트할 장치를 지정합니다.
-B, --bind: 디렉터리를 바인딩합니다. 다른 디렉터리로
참고: 커널에서 추적하는 모든 마운트된 장치 보기: cat /proc/mounts
-o 옵션: (파일 시스템 마운트 옵션)
async: 비동기 모드
sync: 동기화 모드;
atime/noatime: 디렉터리 및 파일 포함
diratime/nodiratime: 디렉터리의 액세스 타임스탬프
auto/noauto: 자동 마운트 지원 ​​여부
exec/noexec: 파일 시스템에서 애플리케이션 실행을 프로세스로 지원할지 여부
dev/nodev: 이 파일 시스템에서 장치 파일 사용을 지원할지 여부
suid/nosuid:
remount: remount Load
ro:
rw:
user/nouser: 일반 사용자가 이 장치를 마운트하도록 허용할지 여부
acl: 이 파일 시스템에서 acl 기능을 활성화합니다.
참고: 위 옵션은 쉼표로 구분하여 동시에 여러 번 사용할 수 있습니다.
기본 마운트 옵션: defaults
rw, suid, dev, exec, auto, nouser 및 async
제거 명령:
# umount DEVICE
# 마운트 해제 mount_point
지정된 파일 시스템에 접근하는 과정 보기:
# FUSER -V Mount_point
해당 지역에 방문 중인 파일 시스템의 모든 프로세스 종료:
# FUSER -km MOUNT_POINT
스왑 파티션 마운트:
Enable: swapon
swapon [OPTION]... [DEVICE]
-a: 모든 스왑 파티션을 활성화합니다.
-p PRIORITY: 우선순위 지정;
Disable: swapoff [OPTION]... [DEVICE]
메모리 공간 사용량 상태:
free [OPTION]
- m: in MB
-g: GB
파일 시스템 공간 사용량과 같은 정보를 보기 위한 도구:
df:
-h: 사람이 읽을 수 있음 [ 옵션]... DIR
-h: 사람이 읽을 수 있음
-s: 요약
설명 명령: mount, umount, free, df, du, swapon, swapoff, 퓨저
에 대한 구성 파일 파일 마운트: /etc/fstab
각 줄은 마운트할 파일 시스템을 정의합니다.
마운트할 장치 또는 의사 파일 시스템
마운트 클릭
파일 시스템 유형 마운트 옵션
덤프 빈도
자체 검사 순서
마운트할 장치 또는 의사 파일 시스템:
장치 파일, LABEL(LABEL="" : 백업 없음1: 덤프 간격 day2: 격일로 덤프
자체 검사 순서:
0: 자체 검사 없음
1: 첫 번째 자체 검사 검사는 일반적으로 1만 사용합니다.
...
파일 시스템에 대한 다른 개념:
Inode: 인덱스 노드, 인덱스 노드
주소 포인터:
Direct 포인터:
간접 포인터:
3차 포인터:
inode 비트맵: 각 inode가 유휴 상태인지 여부를 식별하는 상태 정보
링크 파일:
하드 링크:
여러 파티션에 걸쳐 만들 수 없습니다.
파일에 대한 하드 링크를 생성하면 새로운 참조 경로가 생성됩니다. 참조 횟수
기호 링크:
는 파티션을 교차할 수 있습니다.
크기는 가리키는 경로 문자열의 길이입니다. 대상 파일 inode의 참조 횟수를 늘리거나 줄이지 마세요.
ln [-sv] SRC DEST
-s: Symbolic Link
-v: verbose
파일에 대한 관리 작업 영향:
파일 삭제:
파일 복사:
파일 이동:

1. 블록 크기가 2048인 20G 파일 시스템을 만듭니다. ext4 및 볼륨 레이블 TEST에서는 부팅 후 이 파티션이 /testing 디렉터리에 자동으로 마운트되어야 하며 기본적으로 acl 마운트 옵션이 있습니다.

(1) 20G 파티션을 생성합니다. ) 형식:
mke2fs - t ext4 -b 2048 -L 'TEST' /dev/DEVICE
(3) /etc/fstab 파일 편집
LABEL='TEST'
/testing ext4
defaults, acl 0 03. 다음 기능을 완료하는 스크립트를 작성하세요.
(1) 현재 시스템에서 인식되는 모든 디스크 장치를 나열합니다. 2) 디스크 수가 1이면 해당 공간 사용량 정보를 표시합니다.
그렇지 않으면 마지막 디스크의 공간 사용량 정보를 표시합니다.
if [ $disks -eq 1 ];
fdisk -l /dev/[hs] da
else
fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh ]d[a-]" | tail - 1 | cut -d' ' -f2)
fi
bash 스크립팅 사용자 상호 작용:
읽기 [옵션]... [이름. ..]
- p 'PROMPT'
-t TIMEOUT
bash -n /path/to/some_script
스크립트에서 구문 오류 감지
배쉬 -x /path/to/ some_script
디버그 실행
예:
#!/bin/bash
# 버전: 0.0.1
# 작성자: 에듀
# 설명: 읽기 테스트
read -p "디스크 특수 파일 입력: " diskfile
[ -z "$diskfile" ] && echo "Fool" && 종료 1
if fdisk -l | grep "^Disk $diskfile" &> /dev/null; then
fdisk -l $diskfile
else
ex it 2
fi
RAID:
저렴한 디스크의 중복 배열
                                       : 저렴한 디스크의 중복 배열 RAID
IO 기능 향상:
병렬 디스크 읽기 및 쓰기;
내구성 향상
디스크 중복성 달성
레벨: 함께 구성된 여러 디스크는 다르게 작동합니다.RAID가 구현되는 방법 :
external Disk Array : 확장 카드를 통해 적응 기능을 제공합니다.
RAID-0: 0, 스트라이프 볼륨, 스트립
RAID-1: 1, 미러 볼륨, 미러;
RAID-2
...
RAID-5 :
RAID-6
RAID10
RAID01
RAID-0:
향상된 쓰기 성능;
사용 가능한 공간: N*min(S1,S2 ,...)
내결함성 없음
최소 디스크 수: 2, 2+
RAID-1:
읽기 성능 향상, 쓰기 성능이 약간 저하됨
Available space: 1*min(S1,S2,...)
With redundancy
Minimum number of disks: 2, 2+
RAID-4:
1101, 0110, 1011
RAID-5:
읽기 및 쓰기 성능 향상
사용 가능한 공간: (N-1)*min(S1,S2 ,...)
내결함성: 디스크 1개
최소 디스크 수: 3, 3+
RAID-6:
향상된 읽기 및 쓰기 성능
사용 가능 가능한 공간: (N- 2)*min(S1,S2,...)
내결함성: 디스크 2개
최소 디스크 수: 4, 4+
혼합형
RAID-10:
읽기 및 쓰기 성능 향상
사용 가능한 공간: N*min(S1,S2,...)/2
내결함성: 각 미러 세트는 하나만 가질 수 있습니다.
최소 디스크 수: 4, 4+
RAID-01:
RAID-50, RAID7
JBOD: 디스크 한 묶음 초
기능: 여러 디스크의 공간을 하나의 큰 연속 공간으로 결합합니다.
사용 가능한 공간: sum(S1,S2,...)
공통 수준: RAID-0, RAID- 1, RAID-5, RAID-10, RAID-50, JBOD
구현:
하드웨어 구현
소프트웨어 구현
CentOS 6에서 소프트웨어 RAID 구현:
커널의 md(다중 장치)와 결합
mdadm: 모드 도구
명령 구문 형식: mdadm [모드] [옵션]
지원되는 RAID 수준: LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
Mode:
Create: -C
극복: -a: 감시: - F
관리: -F, -R, -a
& LT; Raiddevice & GT ;: /DEV /MD#& & LT ;comComponent-devices>: 모든 블록 장치
-C: 생성 모드
-n #: # 블록 장치를 사용하여 이 RAID를 생성합니다.
-l #: 생성할 RAID 수준을 지정합니다.
-a {yes|no}: 대상 RAID를 자동으로 생성합니다. 장치 장치 파일
-c CHUNK_SIZE: 블록 크기를 지정합니다.
-x #: 여유 디스크 수를 지정합니다.
예: 10G 여유 공간이 있는 RAID5를 만듭니다.
-D: 습격에 대한 자세한 정보를 표시합니다.
mdadm -D /dev/md#
관리 모드:
-f: 지정된 디스크를 손상된 것으로 표시합니다.
-a: 디스크 추가
-r: 디스크 제거
md 상태 관찰:
cat /proc/mdstat
MD 장치 중지:
mdadm -S /dev/md#
watch 명령:
-n #: 새로 고침 간격(초)
watch -n# 'COMMAND'
LVM2:
LVM: 논리 볼륨 관리자, 버전: 2
dm: 장치 매퍼, 하나 이상의 기본 블록 장치를 논리 장치로 구성하는 모듈
/ dev /dm-#
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/ root
pv 관리 도구:
pvs: 간단한 pv 정보 표시
pvdisplay: pv 세부 정보 표시
pvcreate /dev/DEVICE: pv 생성
vg 관리 도구:
vgs
vgdisplay
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath... ]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
먼저 pvmove를 수행하세요
vgremove
lv 관리 도구:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvremove /dev/VG_NAME/LV_NAME
논리 볼륨 확장:
# lvextend -L [+]# [mMgGtT] /dev/VG_NAME/LV_NAME
# resize2fs /dev/VG_NAME/LV_NAME
논리 볼륨 줄이기:
# umount /dev/VG_NAME/LV_NAME
# e2fsck - f /dev/VG_NAME/LV_NAME
# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
# 마운트
스냅샷: snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
파일 시스템 마운트 사용법:
광 디스크 장치 마운트:
디스크 장치 파일:
IDE: /dev/hdc
SATA: /dev/sr0
심볼릭 링크 파일:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
umount /dev /cdrom
dd 명령: 파일 변환 및 복사
사용법:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: 블록 크기 , 복사 단위 크기;
count=#: 복사할 bs 수;
디스크 복사:
dd if=/dev/sda of=/dev/sdb
MBR 백업
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
MBR에서 부트로더를 삭제합니다.
dd if=/dev /zero of=/dev/sda bs=256 count=1
두 가지 특수 장치:
/dev/null: 데이터 블랙홀
/dev/zero: 제로 침공 기계;
btrfs 파일 시스템:
Technical Preview
Btrfs(B-tree, Butter FS, Better FS), GPL, Oracle 2007 ,
ext3/ext4, xfs
핵심 기능:
다중 물리 볼륨 지원: btrfs는 온라인 "추가", "제거" 및 "수정을 통해 여러 기본 물리 볼륨으로 구성될 수 있습니다. ";
기록 중 복사 업데이트 메커니즘(CoW): "내부" 업데이트 대신 포인터 복사, 업데이트 및 교체;
데이터 및 메타데이터 확인 코드: 체크섬
하위 볼륨 : sub_volume
스냅샷: 스냅샷을 지원하는 스냅샷
투명 압축:
파일 시스템 생성:
mkfs.btrfs
-L 'LABEL'
-d: raid0, raid1, raid5, raid6, raid10, 단일
-m : raid0, raid1, raid5, raid6, raid10, 단일, dup
-O ;
-O list-all: 지원되는 모든 기능 나열
속성 보기:
btrfs 파일 시스템 표시
마운트 파일 시스템:
마운트 -t btrfs /dev/sdb MOUNT_POINT
투명한 압축 메커니즘:
mount -o 압축={lzo|zlib} DEVICE MOUNT_POINT
하위 명령: 파일 시스템, 장치, 균형, 하위 볼륨
압축, 압축 해제 및 보관 도구
압축/압축 해제: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz : .xz
zip/unzip
tar, cpio
1, gzip/gunzip
gzip [옵션]... 파일...
- d: 압축 해제 , gunzip
-c와 동일: 결과를 표준 출력으로 출력합니다.
-#: 1-9, 압축 비율을 지정합니다.
zcat: 명시적으로 확장되지 않습니다. 텍스트 파일 내용 보기 전제하에
2, bzip2/bunzip2/bzcat
bzip2 [OPTION]... FILE...
-k: 유지, 원본 파일 유지
-d: 압축 풀기
-#: 1-9, 압축 비율, 기본값은 6입니다.
bzcat: 명시적인 확장 없이 텍스트 파일 콘텐츠 보기
3, xz/unxz/xzcat
bzip2 [OPTION]... FILE ...
-k: 유지, 원본 파일 유지
-d: 압축 해제
-#: 1-9, 압축 비율, 기본값
xzcat: 명시적 확장 없이 텍스트 파일 콘텐츠 보기
4, tar
tar [옵션]...
(1) 아카이브 만들기
tar -f /PATH/TO/SOMEFILE.tar FILE...
tar -cf /PATH/TO/SOMEFILE.tar FILE ..
(2) 아카이브의 파일 목록 보기
tar -t -f /PATH/TO/SOMEFILE.tar
(3) 아카이브 확장
tar -x -f /PATH /TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
압축 도구와 결합: 보관 및 압축
-j: bzip2, -z: gzip, -J: xz
bash 스크립트:
if 문, bash -n, bash -x
CON 부분:
bash 명령:
명령의 실행 상태 결과를 사용합니다.
Success: true
Failure: flase
성공 또는 실패 의미 : 사용된 명령에 따라 다름 ;
단일 분기:
if CONDITION; then
if-true
fi
조건이면
if-true
else
if-false
fi
다중 분기:
if CONDITION1;
만약-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
...
esle
모두 -false
fi
처음으로 "true" 조건이 발생하면 해당 분기를 실행한 다음 종료합니다.
예: 사용자가 파일 경로를 입력하고, 파일 형식을 결정합니다. !/bin/bash
#
read -p "파일 경로를 입력하세요: " filename
if [ -z "$filename " ] then
echo " 사용법: 파일 경로를 입력하세요."
exit 2
fi
if [ ! -e $filename ]; then
echo "해당 파일이 없습니다."
종료 3
fi
if [ -f $filename ] then
echo "공통 파일입니다."
elif [ -d $filename ]; then
echo "디렉토리."
elif [ -L $filename ] then
echo "기호 파일입니다."
else
echo "다른 유형."
fi
참고: if 문은 중첩될 수 있습니다.
루프: for, while , 까지
루프 본문: n 번 실행될 수 있습니다.
시작 조건:
for 루프:
for 목록의 변수 이름;
루프 본문
done
실행 메커니즘:
목록의 요소를 "변수 이름"에 순차적으로 할당합니다. 루프 본문은 각 할당 후에 한 번 실행됩니다. 요소가 소진되고 주기가 종료됩니다.
예: 10명의 사용자를 추가하고, user1-user10은 사용자 이름과 동일합니다. if [ ! $UID -eq 0 ]; "루트만."
exit 1
for i in {1..10}; if id user$i &>
cho "user$i가 존재합니다."
else
useradd user $i
then
에코 "사용자 $i" | passwd --stdin user$i &> /dev/null
echo "사용자$i 추가가 완료되었습니다."
fi
fi
done
목록 생성 방법:
(1) 목록을 직접 제공합니다.
(2) 정수 목록:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 목록을 반환하는 명령
$(COMMAND)
(4 ) glob
(b) 변수 참조;
$@, $*
예: 특정 경로에 있는 모든 파일의 유형을 확인
#!/bin/bash
#
for 파일 안으로 $(ls /var); do
if [ -f /var/$file ]; then
echo "공통 파일."
elif [ -L /var/$file ];
echo "Symbolic File."
ELIF [-d /var /$ 파일];
#!/bin/bash
#
declare -i estab=0
declare -i listening=0
declare -i other=0
for state in $( netstat -tan | grep "^tcp>" | awk '{print $NF}') do
if [ "$state" == 'ESTABLISHED' ]; estab++
elif [ "$state" == 'LISTEN' ]; then
let listening++
else
let other++
fi
완료
echo "설정됨: $estab"
echo "LISTEN: $listen"
echo "알 수 없음: $other"
/etc/rc.d/rc3.d 디렉토리 각각 K와 S로 시작하는 파일이 여러 개 있습니다.
각 파일을 개별적으로 읽습니다. K로 시작하는 파일의 출력은 파일에 stop을 더한 것이고, S로 시작하는 파일의 출력은 파일 이름에 start를 더한 것입니다.
"K34filename stop"
"S66filename start"
Linux 패키지 관리:
API: 애플리케이션 프로그래밍 인터페이스
POSIX: 휴대용 OS
프로그램 소스 코드 --> 컴파일 --> 어셈블리 --> 링크
공유 컴파일: .so
ABI: 애플리케이션 바이너리 인터페이스
Windows는 Linux
라이브러리 수준 가상화:
Linux: WINE
Windows: Cywin
시스템 수준 개발
C
C++
애플리케이션 수준 개발
java
Python
php
perl
ruby
바이너리 애플리케이션용
바이너리, 라이브러리, 구성 파일, 도움말 파일
패키지 관리자:
debian: deb, dpt
redhat: rpm, rpm
rpm: Redhat 패키지 관리자
RPM은 패키지 관리자입니다
Gentoo
Archlinux
소스 코드: 이름 -VERSION.tar.gz
버전: major.minor.release
rpm 패키지 명명 방법:
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release.arch:
release: release.OS
zlib-1.2.7-13.el7.i686.rpm
공통 아치:
x86: i386, i486, i586, i686
x86_64: x64, x86_64 , amd64
powerpc: ppc
플랫폼 독립적: noarch
testapp: Unpacking
testapp-VERSION-ARCH.rpm: 기본 패키지
testapp-devel-VERSION-ARCH.rpm: 하위 패키지
testapp-testing-VERSION-ARHC.rpm
패키지 간에 종속성이 있습니다.
프런트 엔드 도구
zypper: suse의 rpm 프런트 엔드 관리 도구
dnf: Fedora 22+ rpm 패키지 관리자 프런트 엔드 관리 도구 ;
바이너리 프로그램이 의존하는 라이브러리 파일 보기:
ldd /PATH/TO/BINARY_FILE
이 시스템에 로드된 라이브러리 파일 관리 및 보기:
ldconfig
/sbin/ldconfig -p: 이 시스템에 캐시된 사용 가능한 모든 라이브러리 파일을 표시합니다. 라이브러리 파일 이름 및 파일 경로 매핑 관계
구성 파일은 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
캐시 파일: /etc/ld.so.cache
패키지 관리:
기능: 설치, 제거, 쿼리, 업그레이드 및 확인과 같은 패키지 관리 작업을 빠르고 쉽게 구현할 수 있도록 하나 또는 여러 패키지 파일로 컴파일된 프로그램 구성 요소 목록(각 패키지에 고유함)
파일 목록
설치 또는 제거 중 실행 스크립트
2, 데이터베이스(공개)
패키지 이름 및 버전
기능 설명;
설치로 인해 생성된 각 파일의 파일 경로 및 코드 확인 정보
패키지 관리 방법:
패키지 관리자 사용: rpm
프런트엔드 도구 사용: yum, dnf
패키지를 얻는 방법:
(1) 시스템 릴리스 CD 또는 공식 서버
CentOS 이미지:
(2) 프로젝트 공식 웹사이트
( 3) 제3자 조직:
Fedora-EPEL
검색 엔진:
(4) 만들어 보세요 본인
권장 사항: 적법성 확인
소스 적법성;
CentOS 시스템의 rpm 명령 관리 패키지:
설치, 제거, 업그레이드, 쿼리, 확인, 데이터베이스 유지 관리
설치:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v: verbose
-vv:
-h: #으로 패키지 관리 실행 진행률을 표시합니다. 각 #은 2% 진행률을 나타냅니다
rpm -ivh PACKAGE_FILE ...
[install-options]
--test: 설치를 테스트하지만 실제로 설치 프로세스를 실행하지는 않습니다.
--nodeps: 종속성을 무시합니다.
-replacepkgs: 재설치; --nosignature : 소스 적법성을 확인하지 않습니다.
--nodigest: 패키지 무결성을 확인하지 않습니다.
--noscipts: 패키지 스크립트 조각을 실행하지 않습니다.
%pre: 사전 설치 스크립트; --nopre
% post : 설치 후 스크립트; --nopost
%preun: 설치 전 스크립트; --nopreun
%postun: 설치 후 스크립트; --nopostun
rpm { -U|--업그레이드} [설치 옵션] PACKAGE_FILE ...
rpm {-F|--freshen} [설치 옵션] PACKAGE_FILE ...
upgrage: 이전 버전의 프로그램 설치 패키지, 이전 버전 패키지가 존재하지 않으면 "업그레이드",
freeshen: 이전 버전 패키지가 설치되어 있으면 "업그레이드"; 존재하지 않으면 업그레이드 작업이 수행되지 않습니다 --force: 강제 업그레이드;
참고: (1) 커널을 업그레이드하지 마십시오. Linux는 여러 커널 버전의 공존을 지원하므로 새 버전의 커널을 직접 설치하는 것이 좋습니다. (2) 설치 후 원본 패키지의 구성 파일이 수정된 경우, 레벨이 길어지면 새 버전에서 제공하는 동일한 구성 파일이 이전 버전의 구성 파일을 직접 덮어쓰지 않고, 새 버전은 이름이 변경된 후에도 유지됩니다(FILENAME.rpmnew).
Query:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a: 모든 패키지
-f: 보기 지정 파일을 생성하기 위해 어떤 패키지가 설치되어 있습니까?
-p /PATH/TO/PACKAGE_FILE: 쿼리 아직 설치되지 않은 패키지 파일
--능력을 제공하는 것: 지정된 CAPABILITY를 쿼리하는 것
--필요한 CAPABILITY가 어떤 패키지에 의존하는지를
[query-options]
--changelog: rpm 패키지의 변경 로그를 쿼리
-c: 프로그램 구성 파일 쿼리
-d: 문서 쿼리 프로그램
-i: information
-l: 지정된 패키지 설치 후 생성된 모든 파일 보기
--scripts: 패키지와 함께 제공되는 스크립트 조각
- R: 지정된 패키지가 의존하는 CAPABILITY를 쿼리합니다.
--제공: 지정된 패키지에서 제공하는 CAPABILITY를 나열합니다.
Usage:
-qi PACKAGE, -qf FILE, - qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa
제거:
rpm {-e| -- 삭제} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ..
확인:
rpm {-V| --verify} [select-options] [verify-options]
S 파일 크기가 다름
M 모드가 다름(권한 및 파일 형식 포함)
5개 다이제스트(이전 MD5 합계)가 다름
D 장치 메이저/마이너 번호 불일치
L readLink(2) 경로 불일치
U 사용자 소유권이 다름
G 그룹 소유권이 다름
        T m시간이 다릅니다
          P 기능이 다릅니다
패키지 소스 합법성 확인 및 무결성 확인:
무결성 확인: SHA256
출처 적법성 검증 : RSA
공개 키 암호화:
대칭 암호화: 암호화와 복호화가 동일한 키를 사용합니다.
비대칭 암호화: 키가 쌍으로 되어 있습니다.
공개 키: 공개 키, 모든 사람에게 공개됩니다
비밀 키: 개인 키, 공개할 수 없습니다
가져오기에 필요한 공개 키:
rpm --import /PATH/FROM/GPG-PUBKEY -FILE
CentOS 7개 배포 디스크 제공 키 파일: RPM-GPG-KEY-CentOS-7
데이터베이스 재구성:
rpm {--initdb|--rebuilddb }
initdb: 초기화
데이터베이스가 미리 존재하지 않으면 생성하고, 그렇지 않으면 아무 작업도 수행하지 마세요.
rebuilddb: 다시 빌드
현재 존재 여부에 관계없이 직접 다시 빌드하세요.
검토: Linux 패키지 관리 구현, rpm 패키지 관리자
프로그램 관리 구현을 위한 rpm 명령:
설치: -ivh, --nodeps, --replacepkgs
제거: -e, --nodeps
업그레이드: -Uvh, -Fvh, --nodeps, --oldpackage
쿼리: -q, -qa, -qf, -qi, -qd, -qc, -q -- 스크립트, -q --changlog, -q --provides, -q --requires
확인: -V
GPG 키 가져오기: --import, -K, --nodigest, -- nosignature
데이터베이스 재구성: --initdb, --rebuilddb
Linux 패키지 관리(2)
CentOS: yum, dnf
URL: ftp://1 72.16. 0.1/pub/
YUM: yellow dog, Yellowdog Update Modifier
yum 저장소: yum repo
저장된 많은 rpm 패키지 및 패키지 관련 메타데이터 파일( 특정 디렉터리: repodata);
파일 서버:
ftp://
http://
nfs: //
file:///
yum 클라이언트:
구성 파일:
/etc/yum.conf: 모든 저장소에 공통 구성 제공
/ etc/yum.repos.d/*.repo: 구성 제공 웨어하우스 포인팅의 경우
웨어하우스 포인팅 정의:
[repositoryID]
name=이 저장소의 이름
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1 |0}
failovermethod={roundrob 우선순위 }
기본값은 무작위 선택을 의미하는 roundrobin입니다.
cost=
기본값은 1000
교실 yum 소스: http://172.1 6. 0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
yum 사용법 명령:
yum [옵션] [명령] [패키지 ...]
       명령은 다음 중 하나입니다.
        * install package1 [패키지2] [...]
        * 업데이트 [패키지1] [패키지2] [. ..]
        * 업데이트로 [패키지1] [패키지2] [...]
        * check-update
        * 업그레이드 [패키지1] [패키지2] [...]
        * 업그레이드로 [패키지1] [패키지2] [...]
        * 배포-동기화 [패키지1] [패키지2] [...]
        * 제거 | 패키지1 지우기 [패키지2] [...]
        * 목록 [...]
        * 정보 [...]
        * 제공 | 기능1을 제공하는 것 [기능2] [...]
        * 정리 [ 패키지 | 메타데이터 | 만료 캐시 | rpmdb | 플러그인 | 모두 ]
        * makecache
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [숨김] [groupwildcard] [...]
       * groupremove group1 [group2] [...]
        * groupinfo group1 [...]
        * 검색 string1 [string2] [...]
        * shell [파일 이름]
        * 해결됨ep dep1 [dep2] [. ..]
        * localinstall rpmfile1 [rpmfile2] [...]
           (기존 이유로만 유지됨 - 설치 사용)
        * localupdate rpmfile1 [rpmfile2] [...]
           (기존 이유로만 유지됨) - 업데이트 사용)
        * package1 다시 설치 [패키지2] [...]
        * package1 다운그레이드 [패키지2] [...]
        * deplist package1 [패키지2] [...]
        * repolist [all|enabled |disabled]
        * 버전 [ 모두 | 설치됨 | 가능 | 그룹-* | 그룹 없음* | 그룹리스트 | groupinfo ]
        * 기록 [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
        * check
        * help [명령]
    显示仓库列表:
    repolist [all|enabled|disabled]
    显示程序包:
    list
    # 냠 목록 [전체 | glob_exp1] [glob_exp2] [...]
    # yum 목록 {사용 가능|설치됨|업데이트} [glob_exp1] [...]
    安装程序包:
    install package1 ] [ ...]
    reinstall package1 [package2] [...]  (중신안装)
    升级程序包:
    update [패키지1] [패키지2] [...]
    다운그레이드 패키지1 [패키지2] [...] (降级)
    检查可用升级:
    check-update
   卸载程序包:
    제거 | 패키지 1 지우기 [패키지 2] [...]
    查看程序包information:
    info [...]
    查看指定的特性(可以是某文件)是由哪个程序包所提供:
    제공 | whatprovides feature1 [feature2] [...]
    清理本地缓存:
    clean [ 패키지 | 메타데이터 | 만료 캐시 | rpmdb | 플러그인 | 모두 ]
    构建缓存:
    makecache
    搜索:
    search string1 [string2] [...]
    以指정의 关键字搜索程序包name及요약信息;
지정된 패키지가 의존하는 기능 보기:
deplist package1 [package2] [...]
yum 거래 내역 보기:
history [info|list|packages-list|packages- info| summary|addon-info|redo|undo|rollback|new|sync|stats]
로컬 패키지 설치 및 업그레이드:
* localinstall rpmfile1 [rpmfile2] [...]
(유지 기간: 레거시 이유만 - 설치 사용)
* LocalUpdate RPMFile1 [RPMFILE2] [...]
(레거시 이유로만 유지됨 - 업데이트 사용) up1 [Group2] [...]
* groupupdate group1 [group2] [ ...]
* grouplist [숨김] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
사용 방법 CD를 로컬 yum 저장소로 사용:
(1) /media/cdrom
# mount -r -t iso9660 / dev/cdrom /media/cdrom
과 같은 디렉토리에 CD를 마운트합니다. (2) 구성 파일 생성
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum 명령줄 옵션:
--nogpgcheck: gpg 확인을 비활성화합니다.
-y: 자동 응답은 "예"입니다.
-q: 자동 모드;
- -disablerepo=repoidglob: 여기에 지정된 저장소를 일시적으로 비활성화합니다.
--enablerepo=repoidglob: 여기에 지정된 repo를 일시적으로 활성화합니다.
--noplugins: 모든 플러그인을 비활성화합니다.
yum의 repo 구성 파일에서 사용할 수 있는 변수:
$releasever: 현재 OS 릴리스의 주요 버전 번호
$basearch: 기본 플랫폼
$YUM0- $YUM9
$basearch/ os
yum 저장소 만들기:
createrepo [options]
패키지 컴파일 및 설치:
testapp- VERSION-release.src.rpm --> rpmbuild 명령을 사용하여 바이너리 형식으로 패키지를 만든 다음 설치합니다.
소스 코드 --> 컴파일(gcc ) --> -> 실행
소스 코드 구성 형식:
여러 파일: 파일의 코드 간에 파일 간 종속성이 있을 수 있습니다.
C, make ( 구성 --> Makefile.in --> makefile)
java: maven
C 코드 컴파일 및 설치 3단계:
./configure:
(1) 옵션을 통해 매개변수를 전달하고, 활성화된 기능, 설치 경로 등을 지정합니다. 실행 시 사용자 사양과 Makefile.in 파일을 참조하여 makefile이 생성됩니다.
(2) 종속성을 확인합니다. 외부 환경;
make:
makefile 파일을 기반으로 애플리케이션을 빌드합니다.
make install
개발 도구:
autoconf: 구성 스크립트 생성
automake: Makefile.in 생성
권장사항: 설치하기 전에 INSTALL 및 README를 확인하세요
오픈 소스 프로그램의 소스 코드 받기:
공식 자체 구축 사이트:
apache.org (ASF)
mariadb.org
...
코드 호스팅:
SourceForge
Github.com
code.google.com
c/c++: gcc (GNU C 컴파일러)
C 소스 컴파일 코드:
전제조건: 개발 도구 및 개발 환경 제공
개발 도구: make, gcc 등
개발 환경: 개발 라이브러리, 헤더 파일
glibc: 표준 라이브러리
"패키지" 그룹"을 통해 개발 구성 요소 제공
CentOS 6: "개발 도구", "서버 플랫폼 개발",
1단계: 스크립트 구성
옵션: 설치 위치 지정 , 활성화된 기능 지정
--help: 지원되는 옵션 가져오기
옵션 범주:
설치 경로 설정:
--prefix=/PATH/TO/SOMEWHERE: 기본값 지정 설치 위치, 기본값은 /usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE: 구성 파일 설치 위치
시스템 유형:
선택 기능: 선택 기능
--disable-FEATURE
--enable-FEATURE[=ARG]
옵션 패키지: 옵션 패키지
--with-PACKAGE[=ARG]
--without-PACKAGE
두 번째 단계: make
3단계: make install
설치 후 구성:
(1) 내보내기 바이너리 프로그램 디렉터리를 PATH에 추가 환경 변수
/etc/profile.d/NAME.sh
파일 편집 export PATH=/PATH/TO/BIN:$PATH
(2) 라이브러리 파일 경로 내보내기
Edit /etc/ld.so.conf.d/NAME.conf
새 라이브러리 파일이 있는 디렉터리를 이 파일에 추가하세요.
시스템에서 캐시를 재생성하도록 합니다.
ldconfig [-v]
(3) 헤더 파일 내보내기
링크 기반으로 구현됨:
ln -sv
(4) 도움말 매뉴얼 내보내기
/etc/man.config 파일 편집
MANPATH 추가
Linux 네트워크 속성 관리
LAN: 이더넷, 토큰 링
Ethernet: CSMA/CD
충돌 도메인
브로드캐스트 도메인
인터넷 프로토콜
라우팅 프로토콜
라우팅 프로토콜
OSI, TCP/IP
tcp/ip 레이어:
애플리케이션 레이어
전송 계층
인터넷 계층
데이터링크 레이어
물리적 레이어
전송 레이어 프로토콜:
tcp, udp, sctp
네트워크 레이어 프로토콜:
ip
ip 프로토콜:
IPv4 주소 분류:
점으로 구분된 소수점: 0-255
0000 0000 - 1111 1111
0.0.0.0-255.255.255.255
범주 A:
0 000 0000 - 0 111 1111: 1-127
네트워크 수: 126, 127
각 네트워크의 호스트 수: 2^24- 2
기본 서브넷 마스크: 255.0.0.0
개인 네트워크 주소: 10.0.0.0/8
카테고리 B:
10 00 0000 - 10 11 11 11:128-191
번호 네트워크 수: 2^14
각 네트워크의 호스트 수: 2^16-2
기본 서브넷 마스크: 255.255.0.0
개인 네트워크 주소: 172.16.0.0/16-172.31.0. 0 /16
카테고리 C:
110 0 0000 - 110 1 1111: 192-223
네트워크 수: 2^21
각 네트워크의 호스트 수: 2^ 8-2
기본 서브넷 마스크: 255.255.255.0
개인 네트워크 주소: 192.168.0.0/24-192.168.255.0/24
Class D: 멀티캐스트
1110 0000 - 1110 1111 : 224-239
클래스 E:
240-255
서브넷 마스크:
172. 16.100.10 0/255.255.0.0, 172.17.1.1
교차 네트워크 통신: 라우팅
호스트 라우팅
네트워크 라우팅
기본 라우팅
Linux 호스트를 네트워크에 연결:
IP /마스크
경로: 기본 게이트웨이
DNS 서버
기본 DNS 서버
보조 DNS 서버
세 번째 DNS 서버
구성 ation 방법:
정적 사양:
ifcfg: ifconfig, 경로, netstat
ip: 개체 {링크, 주소, 경로}, ss, tc
config file
system-config-network-tui(설정)
CentOS 7:
nmcli, nmtui
동적 할당:
DHCP: 동적 호스트 구성 프로토콜
네트워크 인터페이스 구성:
인터페이스 이름 지정 방법:
CentOS 6:
Ethernet: eth[0,1,2,...]
ppp: ppp[0,1,2,...]
ifconfig 명령
ifconfig [인터페이스]
# ifconfig -a
# ifconfig IFACE [up|down]
                                ~ ~ IFACE IP 넷마스크 IFACE IP 넷마스크 IFACE IP 넷마스크
경로 명령어
경로 관리 명령어
                                                                                                                                                       을 통해 ]
T 대상: 192.168.1.3 게이트웨이: 172.16.0.1
~]# 경로 추가 -host 192.168.1.3 gw 172.16.0.1 dev eth0
대상: 192.168.0.0 게이트웨이: 172.16 .0.1
                                   ~   
기본 경로, 게이트웨이: 172.16.0.1
     
~]# Route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
     
~]# Route add default gw 172.16.0.1
R : 삭제: Route Del
route Del [-st | -Host] 대상 [gw gw] [netmask nm] [[dev] if]
대상: 192.168.1.3 Gatement: 172.16 .0.1
~]# 경로 del -host 192.168.1.3
대상: 192.168.0.0 게이트웨이: 172.16.0.1
~]# Route del -net 192.168.0.0 netmask 255.255.255.0器Dns 서버는
/ETC/Resolv.conf
를 지정합니다.
nameServer DNS_SERVER_IP1
NameServer DNS_SERVER_IP2
Namerver DNS_SERVER_IP3
:: fqdn-& gt; IP
      |ㅋㅋㅋ
     
netstat 명령:
     
netstat - 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 가상 연결 및 멀티캐스트 구성원 인쇄 |-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|- p]
​​​​​​​
-t: tcp 프로토콜 관련
​​​​​
-u: udp 프로토콜 관련
​​​​​​​​
-w:​​원시 소켓 관련
​​​​
-l: 감독 중 status
-a: 모두 상태 n
-N: IP 및 포트를 숫자로 표시
-E: 확장 형식
-P: 관련 프로세스 및 PID 표시
일반적인 조합:
-- tan, -uan, -tnl, -unl
라우팅 테이블 표시:
netstat {--route|-r} [--numeric|-n]
-r: 커널 경로 테이블 표시
: -s: 디지털 형식
인터페이스 통계 표시:
NetStat {-interfaces | -i | -i} [if] [--lll | -a] [ --extend|-e] [--program|-p] [--numeric|-n]
                                                     요약: ifcfg 제품군 명령 구성
ifconfig/route/netstat
ifup/ifdown
Linux 네트워크 구성(2)
구성 L inux 네트워크 속성: ip 명령
ip 명령: ip - 라우팅 표시/조작, 장치, 정책 라우팅 및 터널
ip [ 옵션 ] OBJECT { 명령 | 도움말 }
OBJECT := { 링크 | 경로 }
링크 개체:
ip 링크 - 네트워크 장치 구성
set
dev IFACE
설정 가능한 속성:
위 및 아래: 지정된 인터페이스를 활성화하거나 비활성화합니다.
[dev IFACE]: 인터페이스 지정
[up]: 활성화된 인터페이스만 표시
ip 주소 - 프로토콜 주소 관리
ip addr { add del } IFADDR dev STRING
[label LABEL]: 주소
[scope {global|link|host}] 추가 시 네트워크 카드 별칭을 지정합니다. 도메인
global: 전역적으로 사용 가능
링크: 링크만 사용 가능
호스트: 로컬에서 사용 가능;
[브로드캐스트 주소]: 브로드캐스트 주소 지정
ip 주소 표시 - 프로토콜 주소 확인
[dev DEVICE]
[레이블 패턴]
[기본 및 이차 ]
ip 주소 플러시 - 플러시 프로토콜 주소
show
ip 경로 - 라우팅 테이블 관리
ip 경로 추가
와 동일한 형식을 사용하세요. 추가 경로: ip 경로 추가 TARGET via GW dev IFACE src SOURCE_IP
TARGET:
호스트 경로: IP
네트워크 경로: NETWORK/MASK
게이트웨이 추가: ip 경로 추가 def 대체를 통해 GW dev IF ACE
ip 경로 삭제
경로 삭제: ip 경로 del TARGET
ip 경로 표시
ip 경로 플러시
[개발자 IFACE]
[prefix를 통해]
ss 명령:
형식: ss [OPTION]... [FILTER]
옵션:
-t: tcp 프로토콜 관련
-u : UDP 프로토콜 관련
-w: Naked 소켓 관련
-x: Unix sock 관련
-l: Listen 상태 연결
-a: 모두
- n : 숫자 형식
-p: 관련 프로그램 및 PID
-e: 확장 정보
-m: 메모리 사용량
-o: 타이머 정보
FILTER : = [ 상태 TCP-STATE ] [ 표현 ]
TCP의 일반적인 상태:
tcp 유한 상태 기계:
LISTEN: 청취
ESTABLISHED: 설정된 연결
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
표현:
dport =
sport =
예: '( dport = :ssh 또는 sport = :ssh )'
일반적인 조합:
-tan, -tanl, -tanlp, -uan
Linux 네트워크 속성 구성 (3) : 구성 수정 파일
IP, MASK, GW, DNS 관련 구성 파일: /etc/sysconfig/network-scripts/ifcfg-IFACE
라우팅 관련 구성 파일: /etc/sysconfig/network-scripts/route- IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
DEVICE: 이 구성 파일이 적용되는 장치
HWADDR: 해당 장치의 MAC 주소;
BOOTPROTO: 이 장치를 활성화할 때 사용되는 주소 구성 프로토콜, 일반적으로 사용되는 dhcp, static, none, bootp;
NM_ControlLED: NM은 NetworkManager의 약어입니다. CentOS6에서는 "를 권장합니다. no";
ONBOOT: 시스템 부팅 시 이 장치를 활성화할지 여부;
TYPE: 인터페이스 유형; 공통 이더넷, 브리지;
UUID: 장치의 고유 식별;
IPADDR: IP 주소를 지정하세요.
NETMASK: 서브넷 마스크
GATEWAY: 기본 게이트웨이
DNS1: 첫 번째 DNS 서버를 가리킵니다.
DNS2: 두 번째 DNS 서버를 가리킵니다.
USERCTL : 일반 사용자가 이 장치를 제어할 수 있는지 여부
PEERDNS: BOOTPROTO 값이 "dhcp"인 경우 dhcp 서버에서 할당한 DNS 서버 포인팅 정보를 /etc/resolv.conf에 직접 덮어쓸 수 있는지 여부 file;
/etc/sysconfig/network-scripts/route-IFACE
두 가지 스타일:
(1) TARGET via GW
(2) 세 줄마다 정의 a Route
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
네트워크 카드에 대한 여러 주소 구성:
if 구성:
ifconfig IFACE_ALIAS
ip
ip addr add
구성 파일:
ifcfg-IFACE_ALIAS
DEVICE=IFACE_ALIAS
참고: 게이트웨이 별칭은 dhcp를 사용하여 부팅할 수 없습니다. 프로토콜;
Linux 네트워크 속성 구성 tui(텍스트 사용자 인터페이스):
system-config-network-tui
을 사용하여 찾을 수도 있습니다.
참고 : 네트워크 서버를 다시 시작해야 합니다.
현재 호스트의 호스트 이름을 구성하세요.
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
네트워크 인터페이스 관련 udev 구성 파일을 식별하고 이름을 지정합니다.
/etc/udev/rules.d/70-pertant-net.rules
네트워크 카드 제거 드라이버:
modprobe -r e1000
动 네트워크 카드 드라이버 로드 중:
Modprobe E1000
Centos 7 네트워크 속성 구성
전통적인 이름: 이더넷 ETH [ 0,1,2, ...],,, wlan[0,1,2,...]
예측 가능한 기능
udev는 다양한 명명 체계를 지원합니다.
펌웨어, 토폴로지
(1) 네트워크 카드 명명 메커니즘
네트워크 장치에 대한 시스템 명명 방법:
(a) 마더보드에 통합된 장치에 대해 펌웨어 또는 BIOS에서 제공하는 인덱스 정보가 있는 경우 사용 가능하고 예측 가능한 경우 이름은 eno1과 같이 이 인덱스를 기반으로 지정됩니다.
(b) PCI-E 확장 슬롯에 대해 펌웨어 또는 BIOS에서 제공하는 인덱스 정보가 사용 가능하고 예측 가능한 경우 이를 기반으로 이름을 지정합니다. ens1과 같이 이 인덱스에
(c) 하드웨어 인터페이스의 물리적 위치 정보를 사용할 수 있는 경우 enp2s0과 같이 이 정보를 기반으로 이름을 지정할 수 있습니다. 사용자가 명시적으로 시작하면 MAC 주소 enx2387a1dc56을 기반으로 이름을 지정할 수도 있습니다.
(e) 위 모두 사용할 수 없는 경우 기존 이름 지정 메커니즘이 사용됩니다.
위 이름 지정 중 일부 메커니즘에는 biosdevname 프로그램의 참여가 필요합니다.
(2) 이름 구성 형식
en: ethernet
wl: wlan
ww: wwan
이름 유형 :
o: 통합 장치의 장치 인덱스 번호
s: 확장 슬롯의 인덱스 번호
x: MAC 주소를 기반으로 한 이름 지정
ps: enp2s1
네트워크 카드 장치 이름 지정 프로세스:
1단계:
udev, 보조 도구 프로그램/lib/udev/rename_device, /usr/lib/udev/rules.d/60-net.rules
2단계:
biosdevname은 /usr/lib/udev/rules.d/71-biosdevname.rules
을 기반으로 합니다. 3단계:
다음에 따라 네트워크 인터페이스 장치를 감지합니다. / usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD, ID_NET_NAME_SLOT, ID_NET_NAME_PATH
기존 명명 방법으로 돌아가기:
(1) /etc/default 편집 / grub 구성 파일
GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb Quiet"
(2) grub2에 대한 구성 파일 생성
grub2-mkconfig -o /etc/grub2.cfg
(3) 시스템 다시 시작
주소 구성 도구: nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - 네트워크 인터페이스 표시 및 관리
connection - 네트워크 연결 시작, 중지 및 관리
IP 주소와 같은 속성을 수정하는 방법:
#nmcli 연결 수정 IFACE [+|-]setting.property value
settings.property:
ipv4.addresses
ipv4.gateway
ipv4.dns1
ipv 4.방법
수동
네트워크 인터페이스 구성 tui 도구: nmtui
호스트 이름 구성 도구: hostnamectl
status
set-hostname
참조:
웹 클라이언트 도구:
lftp, ftp, lftpget, wget
# lftp [-p port] [-u user[,password]] SERVER
하위 명령:
get
mget
ls
help
# lftpget URL
# ftp
# wget
wget [옵션] ... [ URL]...
-q: 무음 모드
-c: 업로드 재개
-O: 위치 저장
--limit-rates=: 전송 속도 지정
검토: ip 명령, ss 명령; CentOS 7
ifcfg, ip, netstat, ss
구성 파일:
/etc/sysconfig/ network-scripts/
ifcfg-IFNAME
route-IFNAME
CentOS 7: nmcli, nmtui
Linux 프로세스 및 작업 관리
커널 기능: 프로세스 관리, 파일 시스템, 네트워크 기능, 메모리 관리, 드라이버, 보안 기능
프로세스: 실행 중인 프로그램의 복사본
존재 수명 주기
프로세스 정보 저장을 위한 Linux 커널의 고정 형식: task struct
여러 작업의 task struct 구성 요소 작업 목록
프로세스 생성:
init
아버지-자식 관계
프로세스: 상위 프로세스에 의해 생성됨
fork(), clone()
프로세스 우선순위:
0-139:
1-99: 실시간 우선순위;
100-139: 정적 우선순위; 우선 순위 높음
좋은 값:
-20,19
Big O
O(1), O(logn), O(n), O(n ^ 2), O(2^n)
프로세스 메모리:
페이지 프레임: 페이지 프레임, 페이지 데이터를 저장하는 데 사용
저장 페이지
MMU: 메모리 관리 Unit
IPC: Inter Process Communication
동일한 호스트에서:
signal
shm: 공유 메모리
semerphor
다른 호스트에서:
rpc: 원격 처리 호출
소켓:
Linux 커널: 선점형 멀티태스킹
프로세스 유형:
데몬 프로세스: 시스템 부팅 프로세스 중에 시작되는 프로세스,
포그라운드 프로세스: 터미널을 통해 시작된 터미널 관련 프로세스
참고: 포그라운드에서 시작된 프로세스는 데몬 모드에서 실행되도록 백그라운드로 보낼 수도 있습니다.
프로세스 상태:
실행 상태: running
준비 상태: 준비
절전 상태:
인터럽트 가능: 인터럽트 가능
무인터럽트: 가능
정지 상태: 일시중지됨 메모리에 있지만 수동으로 시작하지 않으면 예약되지 않습니다.
좀비 상태: Zombie
프로세스 분류:
CPU-Bound
IO-Bound
"Linux 커널 설계 및 구현", "Linux 커널에 대한 심층적인 이해"
Linux 프로세스를 보고 관리하기 위한 도구: pstree, ps, pidof, pgrep, top, htop,glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
pstree 명령:
pstree - 프로세스 트리 표시
ps: 프로세스 상태
ps - 현재 프로세스의 스냅샷을 보고합니다
Linux 시스템의 각 프로세스 관련 정보는 /proc/PID 디렉터리의 각 파일에 저장됩니다.
ps [옵션]...
옵션: 두 가지 스타일 지원
공통 조합: aux
u: 프로세스 상태 정보 표시의 사용자 중심 구성
a: 터미널 관련 프로세스;
x : 터미널과 관련 없는 프로세스
~]# ps aux
USER e, 가상 메모리 세트
RSS: 상주 크기, 상주 메모리 세트
STAT: 프로세스 상태
R: 실행 중
S: 방해받지 않는 수면
D: 방해받지 않는 수면
T: 중지됨
Z: 좀비
+
일반적으로 사용되는 조합: -ef
-e : 모든 프로세스 표시
-f: 전체 형식 프로그램 정보 표시
자주 사용되는 조합: -eFH
-F: 전체 형식 프로세스 정보 표시
-H: 프로세스 표시- 프로세스 수준 형식의 관련 정보
일반적인 조합: -eo, axo
-eo pid,tid,class,rtprio,ni,pri ,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni: 좋은 값
pri: 우선순위, 우선순위
psr: 프로세서, CPU
rtprio: 실시간 우선순위
pgrep, pkill:
pgrep [옵션] 패턴
pkill [옵션] 패턴 I u-UID: 유효 사용자
-UID : 실제 사용자
-터미널: 지정된 터미널과 관련된 프로세스 -a: 프로세스 이름의 전체 형식을 표시합니다​​​​​​​​
-P pid: 상위 프로세스가 속한 프로세스 목록을 표시합니다. 여기에 지정된 프로세스
​​​​​​​​​
pidof:​​​​​​
프로세스 이름을 기반으로 PID를 가져옵니다.
top:
다음과 같은 내장 명령이 많이 있습니다:
Sort:
P: CPU 점유 비율 기준
M: 메모리 점유 비율
T: 누적 CPU 시간
헤더 정보 표시:
가동 시간 정보: l 명령
작업 및 CPU 정보: t 명령
cpu는 각각 1(숫자)
을 표시합니다. 메모리 정보 : m 명령
Exit 명령: q
새로 고침 간격 수정: s
지정된 프로세스 종료: k
옵션: ㅋㅋㅋ                                                                                                   기본값은 3초입니다.     
                          
htop 명령 :
     
옵션:
     
-d #: 지연 시간;
명령:
s: 선택한 프로세스의 시스템 호출을 추적합니다.
l: 선택한 프로세스에서 연 파일 목록을 표시합니다. : 변경 선택된 프로세스 지정된 CPU 코어에 바인딩
t: 프로세스 트리 표시
참고: Fedora-EPEL 소스
검토:
L inux 기본:
CPU: 타임슬라이스
메모리: 선형 주소 공간
I/O:
시간 공유 다중화
프로세스 보기 도구: pstree, ps, pgrep, pidof, top, htop
Linux 프로세스 보기 및 관리(2)
Linux 프로세스 보기 및 관리 도구: pstree, ps, pidof, pgrep, top, htop, glazes, pmap, vmstat, dstat, kill, pkill, job , bg, fg, nohup
vmstat 명령:
vmstat [options] [delay [count]]
procs:
r: 대기 중인 프로세스 수 에 run ;
b: 중단 불가능한 대기 상태의 프로세스 수; (차단된 대기열의 길이)
memory:
swpd: 사용된 총 스왑 메모리 양
free;
buffer: 버퍼에 사용된 총 메모리 양
cache: 캐시에 사용된 총 메모리 양;
si: 데이터 스왑 입력 데이터 속도(kb/s)
so: 스왑에서 나가는 데이터의 데이터 속도(kb/s)
io:
bi: 블록 장치에서 데이터를 읽는 속도 (kb/s)
bo: 블록 장치에 데이터를 저장하는 속도
system:
in: 인터럽트, 인터럽트 속도; , 프로세스 전환 속도;
옵션:
-s : 메모리 통계 표시
pmap 명령:
pmap - 프로세스의 메모리 맵 보고
pmap [옵션] pid [...]
-x: 정보 표시 자세한 형식:
다른 구현:
# cat /proc/PID/maps
glances命令:
glances [-bdehmnrsvyz1] [-B 바인딩] [-c 서버] [-C conffile] [-p 포트] [-P 비밀번호] [--password] [-t 새로 고침] [-f 파일] [-o 출력]
内建命令:
 a  자동으로 프로세스 정렬     l  로그 표시/숨기기
 c CPU%를 기준으로 프로세스 정렬           b 네트워크 I/O용 바이트 또는 비트
 m  MEM%별로 프로세스 정렬           w  경고 로그 삭제
 p  이름별로 프로세스 정렬           x  경고 및 중요 로그 삭제
 i I/O 속도를 기준으로 프로세스 정렬       1 전역 CPU 또는 CPU별 통계
 d  디스크 I/O 통계 표시/숨기기         h  이 도움말 화면 표시/숨기기
 f  파일 시스템 통계 표시/숨기기      t  네트워크 I/O를 조합으로 보기
n  네트워크 통계 표시/숨기기          u  누적 네트워크 I/O 보기
 s  센서 통계 표시/숨기기          q  Quit(Esc 및 Ctrl-C도 작동함)
 y  hddtemp 통계 표시/숨기기
용용选项:
-b: 以Byte为单位显示网卡数据速率;
-d: 关闭磁盘I/O模块;
-f /path/to/somefile: 设定输入文件位置;
-o {HTML|CSV}:输流格式;
-m: 禁用mount模块
-n:
-t #: 延迟时间间隔
-1:每个CPU 的 关数据单独显示;
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR: 指明监听于本机哪个地址
客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址
dstat命令:
dstat [-afv] [옵션..] [지연 [개수]]
-c: 显示cpu상关信息;
-C #,#,... ,total
-d: 显示disk相关信息;
-D total,sda,sdb,...
-g:显示page상关统计数据;
-m: 显示메모리상수统计数据;
-n: 显示network상关统计数据;
-p: 显示process상상 关统计数据;
-r: 显示io请求相关的统计数据;
-s: 显示swapped 相关的统计数据;
--tcp
--udp
--unix
-raw
--소켓
--ipc
--top-cpu:显示最·용 CPU적 进程;
--top-io: 显示最·용 io적 进程;
--상단- mem: 显示最? 用内存的进程;
--top-lantency: 显示延迟最大的进程;
kill命令:
Process 프로세스 관리를위한 제어 신호를 프로세스 관리로 제공합니다. 일반적으로 사용되는 신호:
1) SIGHUP: 프로세스를 닫지 않고 구성 파일을 다시 읽습니다.
2) SIGINT: 실행 중인 프로세스를 중지합니다.
9) SIGKILL: 실행 중인 프로세스를 종료합니다.
15) SIGTERM: 실행 중인 프로세스를 종료합니다.
18) SIGCONT:
19) SIGSTOP:
신호 방법 지정:
( 1) 신호의 숫자 식별 1, 2, 9
(2) 신호의 전체 이름 SIGHUP
(3) HUP
에 대한 신호 프로세스:
kill [-SIGNAL] PID...
"이름" 아래의 모든 프로세스 종료:
killall [-SIGNAL] 프로그램
Job Control for Linux
포그라운드 작업: 터미널을 통해 시작되고 시작 후 항상 터미널을 차지합니다.
백그라운드 작업: 터미널을 통해 시작할 수 있지만 시작 후에는 백그라운드에서 실행됩니다(터미널 해제).
어떻게 작동하게 합니까? 작업이 백그라운드에서 실행되고 있나요?
(1) 작업 실행
Ctrl+z
(2) 아직 시작되지 않은 작업
# COMMAND &
이러한 작업은 백그라운드로 전송되지만 실행하지만 여전히 터미널과 관련되어 있습니다. 백그라운드로 보내고 싶다면 터미널과의 관계를 벗기세요:
# nohup COMMAND &
모든 작업 보기:
# jobs
작업 제어:
# fg [[%]JOB_NUM]: 지정된 백그라운드 작업을 다시 포그라운드로 가져옵니다.
# bg [[%]JOB_NUM]: 백그라운드로 전송된 작업은 백그라운드에서 계속 실행됩니다. ;
# kill [%JOB_NUM]: 지정된 작업을 종료합니다.
프로세스 우선순위 조정:
정적 우선순위: 100-139
프로세스가 기본적으로 시작되는 경우 nice 값은 0이고 우선순위는 120입니다.
renice 명령:
renice [-n] 우선순위 pid...
보기:
ps axo pid, comm, 관련되지 않은 명령: sar , tsar, iostat, iftop
Linux 작업 계획, 주기적 작업 실행
미래의 특정 시점에 작업 실행: at, 배치
작업 실행 주기 : CronaMail 서비스 :
SMTP : 간단한 메일 변속기 프로토콜, 우편물을 전송하는 데 사용됩니다.
mailx - 인터넷 메일 보내기 및 받기
MUA: 메일 사용자 에이전트
mailx [-s 'SUBJECT'] 사용자 이름[@hostname]
메일 본문 생성:
(1) 직접 지정, Ctrl+d
(2) 입력 리디렉션
(3) 파이프를 통해
echo -e "당신은 몇 살입니까?" |
at 명령:
at [옵션] TIME
TIME:
HH:MM [YYYY-mm-dd]
정오, 자정,
tomorrow
now+#{분, 시간, 일, 또는 주}
공통 옵션:
-q QUEUE:
-l: 작업 실행을 기다리는 지정된 대기열 나열 ; atq
-d와 동일: 지정된 작업 삭제; atrm
-c와 동일: 특정 작업 작업 보기
-f /path/from/somefile: 지정된 파일에서 작업 읽기
참고: 작업 실행 결과는 관련 사용자에게 이메일로 통보됩니다.
배치 명령:
시스템이 여기에 지정된 작업을 실행하기 위해 자체 여유 시간을 선택하도록 합니다. ;
주기적인 작업 일정: cron
관련 패키지:
cronie: 메인 패키지는 crond 데몬과 관련 보조 도구를 제공합니다.
cronie-anacron: cronie를 위한 보충 프로그램; ; cronie 작업의 실행 상태를 모니터링하는 데 사용됩니다. 과거에 실행해야 할 시점에 cronie의 작업이 정상적으로 실행되지 않으면 anacron이 해당 작업을 다시 시작합니다.
crontabs: 시스템 제공을 위해 CentOS를 포함합니다. 유지 관리 작업
crond 데몬이 실행 중인지 확인하세요.
CentOS 7:
systemctl status crond
...running...
C 엔트OS 6:
service crond status
주기적으로 실행되도록 예약된 작업은 지점 간 작업을 구현하는 crond에 제출됩니다.
시스템 cron 작업: 시스템 유지 관리 작업
/etc/crontab
사용자 cron 작업:
crontab 명령
시스템 cron 작업
# 직업 예시 정의:
# .--------------- 분(0 - 59)
# | .--------------- 시간(0 - 23)
# | ------------ 일(1 - 31)
# | 1 - 12) OR jan,feb,mar,apr ...
# | .---- 요일(0 - 6) 또는 sun,mon, 화, 수, 목, 금, SAT
# |
#****** 실행 예정
| 에코 명령을 실행하십시오 ​​특정 시점에서 유효한 값 범위 내;
(2) *
주어진 시점에서 유효한 값 범위 내의 모든 값
은 "모든..."을 의미합니다. ;
(3) 이산 값:,
#,#,#
(4) 연속 값: -
#-#
(5) 지정된 시간 범위에서 단계 크기를 정의합니다.
/#: #은 단계 크기입니다.
예: echo 명령 매 3시간
0 * /3 * * * gentoo /bin/echo "안녕하세요!"
사용자 cron:
crontab 명령 정의, 각 사용자는 전용 cron 작업 파일을 가집니다: /var/spool/cron/USERNAME
crontab 명령:
crontab [-u user] [-l | -r | -e] [-i]
-l: 모든 작업 나열
-e: 편집 작업
-r: 모든 작업 제거
-i: 사용자가 대화형 모드에서 지정된 작업을 선택적으로 제거할 수 있도록 하기 위해 사용됩니다.
-u 사용자: 실행만 가능합니다. 루트로 지정하고 지정된 사용자에 대한 cron 작업을 관리합니다.
참고: 실행 결과는 이메일로 관련 사용자에게 통보됩니다.
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
cron 작업의 경우 % 를 명령에 사용하려면 이스케이프해야 합니다.
생각:
(1) 두 번째 수준에서 작업을 실행하는 방법은 무엇입니까?
* * * * * for min in 0 1 2; sleep 20; done
(2) 7분마다 작업을 실행하는 방법은 무엇입니까?
sleep 명령 :
수면 NUMBER[SUFFIX]...
SUFFIX:
s: 초, 기본값
m: 분
h: 시간
d: 일
;
CentOS 5 및 6 시작 프로세스
Linux: 커널+rootfs
커널: 프로세스 관리 , 메모리 관리, 네트워크 관리, 드라이버 프로그램 , 파일 시스템, 보안 기능
rootfs:
glibc
라이브러리: 함수 수집, 함수, 호출 인터페이스
프로세스 호출: 프로시저
함수 호출: 함수
프로그램
커널 디자인 학교:
단일 커널 디자인: Linux
모든 기능을 동일한 프로그램에 통합
마이크로 커널 디자인 : 윈도우, 솔라리스
각 기능은 별도의 하위 시스템을 사용하여 구현됩니다.
Linux 커널 기능:
모듈화 지원: .ko
모듈의 동적 로드 및 언로드 지원;
구성요소 : /코어 파일 : /boot /vmlinuz-version release
ramdisk :
centos 5 : /boot/initrd-version-release.img
centos 6 : /boot /initramfs -VERSION-release.img
모듈 파일:/lib/modules/VERSION-release
CentOS 시스템 시작 프로세스:
POST: 전원 켜기 자체 테스트
ROM; : CMOS
BIOS: 기본 입출력 시스템
ROM+RAM
BOOT 순서:
부팅 프로그램이 있는 첫 번째 장치는 이 시작에 사용되는 장치입니다.
bootloader: boot loader, program
windows: ntloader
Linux:
LILO: LInux LOader
GRUB: GRAND 균일 부트로더
GRUB 0.X: GRUB 레거시
GRUB 1.x: GRUB2
특징: 제공되는 메뉴 사용자가 시스템 또는 다른 커널 버전을 부팅하도록 선택하고, 사용자가 선택한 커널을 메모리의 특정 공간에 로드하고, 압축을 풀고, 확장하고, 시스템 제어를 커널로 전송할 수 있습니다.
446: 부트로더
64: fat
2: 55AA
GRUB:
부트로더: 1단계
디스크: 2단계
커널:
자체 초기화:
식별 가능한 모든 하드웨어 장치를 감지합니다.
하드웨어 드라이버를 로드합니다(드라이버는 램디스크의 도움으로 로드될 수 있습니다).
루트 파일 시스템을 마운트합니다.
사용자 공간에서 첫 번째 애플리케이션 실행: /sbin/init
init 프로그램 유형:
SysV: init, CentOS 5
구성 파일: /etc/inittab
Upstart: init, CentOS 6
구성 파일: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS 7
구성 파일: /usr/lib/systemd/system, /etc/systemd/system
ramdisk:
커널의 기능 중 하나: 버퍼링 및 캐싱을 사용하여 작업 수행 디스크의 파일에
ramdisk --> ramfs
CentOS 5: initrd, 도구 프로그램: mkinitrd
CentOS 6: initramfs, 도구 프로그램: mkinitrd, dracut
시스템 초기화:
POST --> 부트로더(MBR) --> rootfs(읽기 전용) -->
/sbin/init
CentOS 5:
실행 수준: 시스템 운영이나 유지 관리 등의 응용 목적으로 설정합니다.
0 -6: 7개 레벨
0: 종료
1: 단일 사용자 모드(루트, 로그인 필요 없음), 단일, 유지 관리 모드
2: 다중 사용자 모드, 네트워크가 시작됩니다. 기능은 있지만 NFS를 시작하지 않습니다.
3: 다중 사용자 모드, 일반 모드,
4: 예약 수준
5 : 다중 사용자 모드, 일반 모드;
6: 다시 시작
기본 수준:
3, 5
스위치 수준:
초기화 #
보기 수준:
runlevel
who -r
구성 파일: /etc/inittab
각 줄은 작업과 해당 프로세스를 정의합니다
id:runlevel:action:process
action:
wait: 이 레벨로 전환하고 한 번 실행합니다.
respawn: 이 프로세스가 종료되면 다시 시작하세요. : 기본 실행 수준 설정은 생략됩니다.
sysinit: 시스템 초기화 방법을 설정합니다. 여기서 일반적으로 /etc/rc.d/rc.sysinit를 지정합니다.
id :3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1 :1:wait:/etc/rc.d/rc 1
...
l6:6:wait:/etc/rc.d/rc 6
설명: rc 0 --> /etc/rc.d/rc0.d/
K*: K##*: ##실행 순서는 숫자가 작을수록 더 작아집니다. 번호, 서비스는 일반적으로 다른 서비스에 따라 다릅니다.
S*: S##*: ## 실행 순서는 숫자가 작을수록 더 일찍 실행되며 일반적으로 서비스입니다.
for srv in /etc/rc.d/rc0.d/K*; do
$srv stop
done
/etc/rc.d/rc0 .d/s*; Do s $ SRV Start
done
Chkconfig 명령
모든 수준에서 서비스 설정을 확인하여 서비스를 시작하거나 닫습니다. 설정 상황:
chkconfig [ --list] [이름]
추가:
SysV 서비스 스크립트는 /etc/rc.d/init.d(/etc/init.d)에 있습니다. d)
chkconfig --이름 추가
#!/bin/bash
#
# chkconfig: LLLL nn
삭제:
chk config --del name
지정된 링크 유형 수정
chkconfig [--levellevels] name
--level LLLL: 레벨 지정 생략하면 2345를 의미합니다.
참고: 일반 수준에서 마지막으로 시작된 S99local 서비스는 /etc/rc.d/init.d 서비스 스크립트에 연결되지 않지만 다음을 가리킵니다. /etc/rc.d/rc.local 스크립트 따라서 서비스 스크립트를 작성하여 /etc/rc.d/init.d/ 디렉토리에 배치하는 것이 불편하거나 불필요하며, 명령을 실행하려는 경우 컴퓨터가 켜지면 자동으로 /etc/rc.d/rc.local 파일에 직접 배치할 수 있습니다. ;
tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
...
tty6: 2345:respawn:/usr/sbin/mingetty tty6
mingetty는 로그인 프로그램을 호출합니다.
/etc/rc.d/rc.sysinit: 시스템 초기화 스크립트
(1) 설정 호스트 이름;
(2) 환영 메시지 설정
(3) 활성화 udev 및 selinux;
(4) /etc/fstab 파일에 정의된 파일 시스템을 마운트합니다.
(5) 루트 파일 시스템을 검색하고 읽기-쓰기 모드로 다시 마운트합니다.
(6) 시스템 시계를 설정합니다.
(7) 스왑 장치를 활성화합니다.
(8) /etc/sysctl.conf 파일에 따라 커널 매개변수가 설정됩니다. lvm 및 소프트웨어 raid 장치 활성화
(10) 추가 장치용 드라이버 로드
(11) 작업 정리;
요약: /sbin/init --> (/etc/inittab) --> 기본 실행 수준 설정 --> 시스템 초기 스크립트 실행 및 시스템 초기화 완료 --> 닫아야 하는 경우 시작하려면 서비스를 시작해야 합니다. --> 로그인 터미널 설정
CentOS 6:
init 프로그램은: upstart, 해당 구성 파일:
/etc/inittab, /etc /init/*.conf
참고: /etc/init/*.conf 파일 구문은 upstart 구성 파일 구문 형식을 따릅니다.
POST --> BIOS) --> 부트 로더(MBR) --> rootfs --> /sbin/init --> ;(/etc/inittab, /etc/ init/*.conf) --> 기본 실행 수준 설정 --> 해당 수준에서 서비스 닫기 또는 시작 --> 터미널 시작
GRUB(부팅 로더)
grub: GRand Unified Bootloader
grub 0.x: grub Legacy
grub 1.x: grub2
grub Legacy
1단계: mbr
stage1_5: mbr 뒤의 섹터는 stage1의 부트로더가 stage2가 위치한 파티션의 파일 시스템을 인식할 수 있게 해줍니다.
stage2: 디스크 파티션(/boot/grub/ )
구성 파일: /boot/grub/grub.conf <-- /etc/grub.conf
stage2 및 커널은 일반적으로 기본 디스크 파티션에 배치됩니다.
기능:
(1) 제공 메뉴 및 대화형 인터페이스
e: 편집 모드, 메뉴 편집에 사용됨
c: 명령 모드, 대화형 인터페이스
(2) 사용자가 선택한 커널 또는 운영 체제를 로드합니다.
매개변수가 커널에 전달되도록 허용
이 메뉴를 숨길 수 있습니다
(3) 메뉴에 대한 보호 메커니즘을 제공합니다
메뉴 편집을 위한 인증
활성화된 커널 또는 작동을 인증합니다. system
장치 식별 방법:
(hd#,#)
hd#: 번호로 표시되는 디스크 번호는 0
부터 시작합니다.
#: 파티션 번호 , 숫자로 표시되고, 번호 매기기는 0x (hd0,0)에서 시작합니다.
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 설정 첫 번째 시작 시 사용되는 커널 파일 ; 또한 커널에서 지원하는 많은 cmdline 매개변수를 추가할 수 있습니다.
예: init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 램디스크 설정 선택한 커널에 대한 추가 파일을 제공합니다.
grub 명령줄 인터페이스를 통해 시스템을 수동으로 부팅합니다.
grub>
grub> 커널 /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
구성 파일 : /boot/grub/grub.conf
구성 항목:
default=#: 기본 시작 메뉴 항목을 설정합니다. 제목 번호는 0부터 시작합니다.
timeout=#: 메뉴 항목이 옵션 선택을 기다리는 시간을 지정합니다.
splashima=(hd#,#)/PATH/TO/XPM_PIC_FILE: 메뉴 배경 이미지 파일 경로를 지정합니다.
hiddenmenu; : 메뉴 숨기기 ;
password [--md5] STRING: 메뉴 편집 인증
title TITLE: 여러 번 나타날 수 있는 메뉴 항목 "제목"을 정의합니다.
root(hd# ,#): grub 검색 stage2 및 커널 파일이 있는 장치 파티션입니다. grub의 "루트"입니다.
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]: 시작된 커널
initrd / PATH/TO/INITRAMFS_FILE: 커널과 일치하는 ramfs 파일 ;
password [--md5] STRING: 선택한 커널 또는 운영 체제를 부팅할 때 인증
grub-md5-crypt 명령
단일 사용자 모드 시작:
(1) grub 메뉴 편집(편집할 제목을 선택한 다음 e 명령 사용)
(2) 추가
1 , s, S 또는 선택한 커널 뒤에 있음 예
(3) 커널 줄에 "b" 명령을 입력합니다.
grub 설치:
(1) grub-install
grub-install --root-directory=ROOT/dev/DISK
(2) grub
grub> 루트(hd#,#)
grub> (hd#)
Linux 커널:
단일 커널 시스템 설계이지만 마이크로커널 설계 시스템의 장점을 최대한 활용하고 커널에 모듈식 메커니즘을 도입합니다.
커널 구성 요소:
커널 코어, 일반적으로 bzIma, 일반적으로 vmlinuz-VERSION-RELEASE라는 /boot 디렉터리에 있음
커널 개체: 일반적으로 / lib/modules에 위치 /VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
보조 파일: ramdisk
itrd에서
initramfs
커널 실행:
uname 명령:
uname - 시스템 정보 인쇄
uname [옵션]...
-n : 노드 이름 표시 ;
-r: VERSION-RELEASE 표시;
모듈:
lsmod 명령:
코어에 의해 로드된 커널 모듈 표시
표시된 내용 내용 출처: /proc/modules 파일
modinfo 명령:
모듈의 자세한 설명 정보 표시
modinfo [ -k kernel ] [ modulename|filename... ]块-N : 디스플레이 모듈 파일 경로 전용 디스플레이 모듈 매개 변수
-a : author
-d : descripting
- l : license
modprobe 명령 :
커널 모듈 로드 또는 언로드
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]
구성 파일: /etc/ modprobe.conf, /etc/modprobe.d/*.conf
modprobe [ -r ] 모듈 이름...
depmod 명령:
커널 모듈 종속 파일 및 시스템 정보 매핑 파일을 생성하기 위한 도구
커널 모듈 로드 또는 언로드:
insmod 명령:
insmod [ 파일 이름 ] [ 모듈 옵션...
출력
매개변수:
읽기 전용: 출력 정보
쓰기 가능: 사용자가 지정한 "새 값"을 수락하여 커널의 특정 기능 또는 기능 구성
/proc/sys Y s (1) Sysctl 명령은 이 디렉토리의 많은 매개변수를 보거나 설정하는 데 사용됩니다. .hostname=mail.madu.com
(2) echo 명령은 값을 수정할 수도 있습니다. ​​리디렉션을 통한 대부분의 매개변수
echo "VALUE" > /proc/sys/path/ to/parameter
~]# echo "www.madu.com" > sys/kernel/hostname
sysctl 명령:
기본 구성 파일: /etc/ sysctl.conf
(1) 매개변수 설정
sysctl -w 매개변수=VALUE
(2) 구성 파일을 읽어 매개변수 설정
sysctl -p [/path /to/ conf_file]
커널에서의 경로 전달:
/proc/sys/net/ ipv4/ip_forward
일반적으로 사용되는 여러 매개변수:
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
/sys 디렉토리:
sysfs: 커널이 인식하는 각 하드웨어 장치의 관련 속성 정보를 출력하며 커널 쌍도 가지고 있습니다. 하드웨어 기능 설정 정보, 일부 매개변수는 하드웨어 작동 특성을 조정하기 위해 수정될 수 있습니다.
udev는 이 경로 아래의 정보 출력을 통해 각 장치에 필요한 장치 파일을 동적으로 생성합니다. udev는 실행 중인 특수 도구입니다. udevadmin, hotplug; 장치에서 사전 정의된 규칙 파일은 일반적으로 /etc/udev/rules.d 및 /usr/lib/udev/rules.d 디렉토리에서 읽혀집니다.
램디스크 파일 생성:
(1) mkinitrd 명령
현재 사용되는 커널에 대한 램디스크 파일을 다시 만듭니다
~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut 명령
현재 사용되는 커널에 대한 램디스크 파일을 다시 만듭니다.
~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)
커널 컴파일:
전제 조건:
(1) 개발 환경을 준비합니다.
(2) 대상 호스트의 하드웨어 장치에 대한 관련 정보를 얻습니다.
(3) 활성화할 파일 시스템과 같은 대상 호스트 시스템 기능에 대한 관련 정보를 얻습니다.
(4) 커널 소스 코드 패키지를 얻습니다. www.kernel.org
개발 환경 준비:
패키지 그룹(CentOS 6):
서버 플랫폼 개발
개발 도구
대상 호스트 하드웨어 장치 관련 정보 :
CPU:
~]# cat /proc/cpuinfo
~]# x86info -a
~]# lscpu
PCI 장치:
~]#lspci
-v
-vv
~]# lsusb
-v
-vv
~]#lsblk
배우기 모든 하드웨어 장치 정보
~]# hal-device
템플릿 파일 기반의 간단한 제작 과정:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src
~]# cd /usr/src
~]# ln -sv linux-3.10.67 linux
~]# cd linux
~]# cp / boot/config-$ (uname -r) ./.config
~]# make menuconfig
~]# screen
~]# make -j #
~ ]# make module_install
~]# make install
시스템을 다시 시작하고 새 커널을 사용하여 테스트하세요.
Linux 커널 컴파일 (2)
커널 컴파일 단계 :
( 1) 커널 옵션 구성
은 구성을 위한 "업데이트" 모드를 지원합니다.
(a) make config: 명령줄을 기반으로 순회 방식으로 커널에서 구성 가능한 각 옵션을 구성합니다.
(b) make menuconfig: 커스 기반 텍스트 창 인터페이스
(c) make gconfig: GTK 개발 환경 기반 창 인터페이스
(d) make xconfig: Qt 기반 창 인터페이스 개발 환경
구성을 위한 "새 구성" 모드 지원:
(a) make defconfig: 대상 플랫폼에 대해 커널에서 제공하는 "기본" 구성을 기반으로 구성합니다. make allnoconfig: 모든 옵션은 "no"로 응답됩니다.
(2) Compile
make [-j #]
커널에서 함수의 일부만 컴파일하는 방법:
(a) 특정 서브루틴만 컴파일합니다. 디렉토리의 관련 코드:
# cd /usr/src/linux
# make dir/
(b) a만 컴파일 특정 모듈:
# cd /usr /src/linux
# make dir/file.ko
예: e1000 전용 드라이버 컴파일:
# make drivers/ net/ethernet/intel/e1000/e1000.ko
커널 크로스 컴파일 방법:
컴파일된 대상 플랫폼이 현재 플랫폼과 다릅니다.
# make ARCH=arch_name
platform
# make ARCH=arch_name help
컴파일된 커널 소스 트리를 다시 컴파일하는 방법:
사전 정리 작업:
# make clean: 컴파일된 대부분을 정리합니다. 파일은 생성되지만 구성 파일 등은 유지됩니다.
# make mrproper: 모든 컴파일된 파일, 구성 및 일부 백업 파일을 정리합니다.
# make distclean: mrproper, 패치 및 편집기 백업 파일;
화면 명령:
새 화면 열기:
# screen
종료 및 화면 닫기:
#exit
Strip current 화면:
Ctrl +a,d
모든 열려 있는 화면 표시:
screen -ls
화면 복원
screen -r [SESSION]
CentOS 시스템 설치
A부트로더- & gt; 커널(initramfs)-& gt; rootfs-& gt;/sbin/init
anaconda: 설치 프로그램
Tui: Curses 기반 텍스트 창; ;
CentOS 설치 프로그램 시작 프로세스:
MBR: boot.cat
stage2: isolinux/isolinux.bin
구성 파일: isolinux/isolinux.cfg
각 해당 메뉴 옵션:
커널 로드: isolinuz/vmlinuz
커널에 매개변수 전달: initrd=initrd.img 추가 ...
루트 파일 시스템 로드 및 아나콘다 시작
GUI 인터페이스는 기본적으로 시작됩니다
TUI 인터페이스를 사용하도록 명시적으로 지정한 경우:
"text" 매개변수를 커널에 전달하기만 하면 됩니다.
boot: linux text;
참고: 위의 콘텐츠는 일반적으로 부팅 장치에 있어야 합니다. 후속 아나콘다 및 해당 설치 패키지에 사용할 수 있는 여러 가지 방법이 있습니다:
로컬 CD
로컬 하드 드라이브
ftp 서버: yum 저장소
http 서버: yum repostory
nfs server
설치 소스를 수동으로 지정하려면:
boot: linux method
아나콘다 애플리케이션 작업 프로세스:
사전 설치 구성 단계
설치 과정에서 사용되는 언어
키보드 유형
설치 대상 저장 장치
기본 저장소: 로컬 디스크
특수 장비 종류: iSCSI
호스트 이름 설정
네트워크 인터페이스 구성
시간대
관리자 비밀번호
파티션 방법 및 MBR 설치 위치 설정
일반 만들기 사용자
설치할 패키지를 선택
설치 단계
대상 디스크에 파티션 생성, 포맷 작업 등 수행
선택한 패키지를 대상 위치에 설치
부트로더 설치
첫 번째 부팅
iptables
se리눅스 Core DUMPANACONDA 구성 방법 :
(1) 대화식 구성 방법;
특정 구문으로 제공되는 구성 옵션
설치 부팅 옵션:
text: 텍스트 설치 방법
방법: 설치를 수동으로 지정
사용 방법 네트워크 관련 부팅 옵션:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname =NAME:MAC_ADDR
원격 액세스 기능과 관련된 부팅 옵션:
vnc
vncpassword='PASSWORD'
킥스타트 파일의 위치를 ​​지정하세요
ks=
DVD 드라이브 : ks=cdrom:/PATH/TO/KICKSTART_FILE
하드 드라이브: ks=hd:/device/dretory/KICKSTART_FILE
HTTP 서버: ks=http://host:port/path/to /KICKSTART_FILE
FTP 서버: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS 서버: ks=https://host:port/path/to/KICKSTART_FILE
비상 시작 복구 모드:
rescue
공식 문서: "설치 가이드"
kickstart 파일 형식:
명령 섹션: 키보드와 같은 다양한 사전 설치 구성을 나타냅니다. 유형,
패키지 세그먼트: 설치할 패키지 그룹 또는 패키지, 설치하지 않을 패키지 등을 나타냅니다. -package ack%end
script 세그먼트 :
%사전 : 사전 설치 스크립트 running 환경 : 설치 미디어에서 실행되는 마이크로 리눅스 환경
% post: 설치 후 스크립트
실행 환경: 설치된 시스템
명령 섹션의 명령:
필수 명령
authconfig: 인증 방법 구성
authconfig --useshadow --passalgo=sha512
bootloader: 부트로더 설치 위치 및 관련 구성
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb Quiet Quiet"
keyboard: 키보드 유형 설정
lang: 언어 유형
part: 파티션 만들기
rootpw: 루트 비밀번호 지정
timezone: 시간대
선택 명령
install OR 업그레이드
text: 텍스트 설치 인터페이스
network
firewall
selinux
halt
poweroff
reboot
repo
사용자 : 설치가 완료된 후 시스템에 대한 새 사용자를 생성하세요
url: 설치 소스 지정
킥스타트 파일 생성 방법:
(1) 직접 수동 편집
템플릿에 따라 수정
(2) 생성 도구: system-config- kickstart (CentOS 6)
템플릿을 기반으로 새 구성을 수정하고 생성합니다.
http://172.16.0.1/centos6.x86_64.cfg
ks 파일에 구문 오류가 있는지 확인하세요. ksvalidator
# ksvalidator /PATH/TO/KICKSTART_FILE
부팅 CD 만들기:
# mkisofs -R -J -T -v --no -emul-boot --boot-load- size 4 --boot-info-table -V "CentOS 6.6 x86_64 부팅" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso /
검토: CentOS 시스템 설치
kickstart 파일:
명령 섹션
필수: authconfig, bootloader, ...
선택 사항: 방화벽, selinux, 재부팅, ...
프로그램 패키지 세그먼트
%packages
@group_name
package
-package
%end
스크립트 세그먼트
% pre
...
%end
%post
...
%end
C 대응 도구: system-config-kickstart
문법 검사: ksvalidator
설치 과정에서 킥스타트 파일을 얻는 방법:
DVD: ks=cdrom:/PATH/TO/KS_FILE
HTTP: ks=http: //HOST:PORT/PATH/TO/KS_FILE
SELinux:
SELinux: 보안 강화 Linux, Linux 커널에서 작동
DAC: 임의 액세스 제어;
MAC: 필수 액세스 제어;
SELinux에는 두 가지 작업 수준이 있습니다.
strict: 모든 프로세스는 selinux에 의해 제어됩니다.
targeted: 제한된 수의 프로세스만 selinux에 의해 제어됩니다.
해킹되기 쉬운 프로세스만 모니터링하세요.
sandbox:
subject 작업 개체
subject: 프로세스
개체: 프로세스, 파일,
File: open, read, write, close, chown, chmod
subject: domain
object: type
SELinux는 각 파일에 대한 보안 레이블을 제공하며 다음에 대한 보안 레이블도 제공합니다. 프로세스;
user:type
user:
role: 역할;
SEL inux 규칙 기반:
규칙: 방문할 수 있는 도메인
SELinux 구성:
SELinux 활성화 여부,
파일 레이블 변경,
특정 레이아웃 특성 설정,
SELinux 상태:
강제: 필수 제한된 프로세스는 제한될 수밖에 없습니다. ;
permissive: 활성화된 각 제한된 프로세스의 위반 작업은 금지되지 않지만 감사 로그에 기록됩니다.
관련 명령:
getenforce : selinux의 현재 상태를 가져옵니다.
setenforce 0|1
0: Set to permissive
1: Set to enforcing
이 설정은 시스템을 다시 시작한 후에는 유효하지 않습니다.
구성 파일: /etc/sysconfig/selinux, /etc/selinux/config
SELINUX={disabled|enforcing|permissive}
파일 재설정 표시:
채널
chcon [옵션]... 컨텍스트 파일...
chcon [옵션]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R: 재귀적 표시
파일의 기본 레이블을 복원합니다.
restorecon [ -R] /path/to/somewhere
부울 규칙:
getsebool
setsebool
getsebool 명령:
getsebool [-a] [부울]
setsebool 명령:
setsebool [-P] 부울 값 | bool1=val1 bool2=val2 ...
bash 스크립트:
프로그래밍 언어:
데이터 구조
순차 실행
실행 선택
조건부 테스트
실행 명령 또는 [[ EXPRESSION ]] 상태 반환 값
if
case
루프 실행
특정 코드 세그먼트를 여러 번 다시 실행합니다.
몇 번이나 반복적으로 실행합니까?
루프 수는 미리 알려져 있습니다.
루프 수는 미리 알 수 없습니다.
입력 조건과 종료 조건이 있어야 합니다.
for, while, Until
기능: 구조적 프로그래밍 및 코드 재사용
function
for 루프 구문:
for LIST in LIST; 루프 바디
done
목록 생성 방법:
(1) 정수 목록
{start..end}
$(seq start [[step]end])
( 2) glob
/etc/rc.d/rc3.d/K*
(3) 명령
을 통해 172.16.250.1-254 범위에 있는 모든 호스트의 온라인 상태를 감지합니다. 핑 명령;
#!/bin/bash
#
net='172.16.250'
uphosts=0
downhosts=0
for i in {1..20}; -c 1 - w 1 ${net}.${i} &> /dev/null
if [ $? -eq 0 ] then
echo "${net}.${i}이 작동 중입니다." H Let Uphosts ++
Else
echo "$ {Net}. $ {I}가 다운되었습니다.
echo "업 호스트: $uphosts."
echo "다운 호스트: $downhosts."
while 루프:
while CONDITION; do
루프 본문
done
CONDITION: 루프에 들어가기 전의 루프 제어 조건. , 각 루프 후에 다시 판단합니다.
조건 테스트 상태가 "false"가 될 때까지 루프를 종료합니다. CONDTION에는 일반적으로 루프 제어 변수가 있어야 하며 이 변수의 값은 루프 본문에서 지속적으로 수정됩니다.
예: 100 내의 모든 양의 정수 합계를 찾습니다. /bash
#
declare -i sum=0
declare -i i=1
while [ $i -le 100 ]; 합계+=$로 놔두세요 i
let i++
done
echo "$i"
echo "요약: $sum ."
추가 사용자 10명
user1- user10
#!/bin/bash
#
declare -i i=1
declare -i users=0
동안 [ $i -le 10 ]; do
if id user$i &> /dev/null; then
useradd user$i
echo "사용자 추가: user$i." users++
fi
let i++
echo "$users 사용자 추가."
172.16.250에 있는 모든 호스트의 온라인 상태를 감지합니다. 1-254 범위를 통해 핑 명령; ((루프)
#!/bin/bash
#
declare -I i = 1
declare -I uphosts = 0
declare -I 다운 호스트 =0
net='172.16.250'
while [ $i -le 20 ]; do
if ping -c 1 -w 1 $net.$i &> /null; then
echo "$net.$i가 작동 중입니다."let uphosts++
else
echo "$net.$i가 다운되었습니다."
let downhosts++
fi
let i++
done
echo "업 호스트: $uphosts. "
echo "다운 호스트: $downhosts."
구구단을 인쇄합니다. (각각 for 및 while 루프를 사용하여 구현됨)
#!/bin/bash
#
for j in {1..9}; do
for i in $(seq 1 $j) do
echo -e -n "${i}X${ j }=$[$i*$j]t"
done
echo
done
#!/bin/bash
#
선언 -i i=1
declare -i j=1
while [ $j -le 9 ]; do
while [ $i -le $j ]; -e -n "${i}X${j}=$[$i*$j]t"
let i++
done
echo
let i = 1
j++
done
RANDOM을 사용하여 10개의 난수를 생성하고, 이 10개의 숫자를 출력하고, 그 중 가장 큰 숫자와 가장 작은 숫자를 표시합니다.
#! /bash
#
declare -i max=0
declare -i min=0
declare -i i=1
동안 [ $i -le 9 ]; do
rand=$RANDOM
echo $rand
if [ $i -eq 1 ] then
max=$rand
최소 =$ rand
fi
if [ $rand -gt $max ] then
max=$rand
fi
if [ $rand -lt $min ;
echo "MIN: $ min. "
검토: Selinux, WHILE
seelinux: 코어, 보안 강화
:
/ETC/SYSCONFIG/ SELINUX,/ETC/SELINUX/Config
# setenforce
# getenforce
표시:
chcon [-tTYPE]
- ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 부울 유형:
getsebool [ -a]
setsebool [-P]
while 루프:
while CONDITION; do
loop body
완료
sed: 편집자
sed: 스트림 편집자, 라인 편집기
사용법:
sed [옵션]... 'script' 입력 파일...
script:
' 주소 명령'
공통 옵션:
-n: 모드의 내용을 화면에 출력하지 않음
-e: 다중 지점 편집
-f / PATH/TO /SCRIPT_FILE: 지정된 파일에서 편집 스크립트를 읽습니다.
-r: 확장 정규식 사용을 지원합니다.
-i: 제자리에서 편집합니다.
(1) 주소 없음: 전체 텍스트를 처리합니다.
(2) 단일 주소:
#: 지정된 줄
/pattern/: 여기의 패턴과 일치합니다.
(3) 주소 범위:
#, #
#, +#
/pat1/,/pat2/
#,/pat1/
( 4) ~: 단계
1~2
2~2
Edit 명령:
d: 삭제
p: 콘텐츠의 표시 모드 공간에서
a 텍스트: 줄 뒤에 텍스트를 추가합니다. 여러 줄 추가를 구현하기 위해 n을 지원합니다.
i 텍스트: 줄 앞에 텍스트를 삽입합니다.
c text: 대체 줄은 한 줄 또는 여러 줄의 텍스트입니다.
w /path/to/somefile: 패턴 공간과 일치하는 줄을 지정된 파일에 저장합니다. somefile: 지정된 파일의 텍스트를 읽습니다. 패턴 공간에서 일치하는 줄 다음 줄로 갑니다.
=: 패턴 공간에서 줄의 줄 번호를 인쇄합니다.
!: 조건을 무효화합니다.
s///: 기타 구분 기호 사용 지원, s@@@, s###;
대체 표시:
g: 줄 내 전역 대체
p:
w /PATH /TO/SOMEFILE: 성공적인 교체 결과를 지정된 파일에 저장합니다.
1: a로 시작하는 줄 시작 부분의 모든 공백 문자를 삭제합니다. /boot/grub/grub.conf 파일에서 공백
~]# sed 's@^[[:space:]]+@@' /etc/grub2.cfg
2: #으로 시작하고 공백 문자 줄 시작 부분에 하나 이상의 # 및 공백 문자가 오는 모든 파일을 삭제합니다.
~]# sed 's@^#[[:space:]]+@@' /etc/fstab
3: echo sed 명령에 절대 경로를 제공하고 기본 이름을 제거합니다.
~]# echo "/etc/sysconfig/" | sed 's@[^/]+/?$@@'
고급 편집 명령:
h: 패턴 공간의 내용을 보관 공간에 덮어씁니다.
H: 추가;
g: 보유 공간에서 데이터를 가져와서 패턴 공간에 덮어씁니다.
G: 보유 공간에서 콘텐츠를 꺼내서 패턴 공간;
x: 패턴 공간의 내용을 보유 공간의 내용과 교환합니다.
n: 일치하는 줄의 다음 줄을 패턴 공간에 읽습니다. 일치하는 줄의 다음 줄을 패턴 공간으로
d: 패턴 공간에서 줄을 삭제합니다.
D: 여러 줄의 패턴 공간에서 모든 줄을 삭제합니다.
sed -n 'n;p' FILE: 짝수 줄 표시
sed '1!G;h;$!d' FILE: 파일 내용을 거꾸로 표시
sed '$!N;$ !D' FILE: 파일의 마지막 두 줄을 꺼냅니다.
sed '$!d' FILE: 파일의 마지막 줄을 꺼냅니다.
sed 'G' FILE:
sed '/^$/d;G ' 파일:
sed 'n;d' FILE: 홀수 줄 표시
sed -n '1!G;h;$p' 파일: 모든 줄 표시 파일에서
bash 스크립트 프로그래밍
while CONDITION; do
루프 본문
done
DITION은 사실입니다.
종료 조건: false se
CONDITION까지; do
Loop body
done
진입 조건: false
종료 조건: true
예: 100 내의 모든 양의 정수의 합을 구합니다. ;
#!/bin/bash
#
declare -i i=1
declare -i sum=0
until [ $i -gt 100 ]; do
let sum+=$i
let i++
done
echo "합: $sum"
예: [ $i -gt $j ] do
echo -n -e "${i}X${j}=$[$까지 구구단을 인쇄하세요
do
i*$j]t"
let i++
done
echo
let i=1
let j++
done
루프 제어 명령문(루프 본문에 사용됨):
continue [N]: N번째 레이어의 현재 주기를 미리 종료하고 다음 판단 단계로 직접 들어갑니다.
while do
CMD1;
...
CONDITION2이면
continue
fi
CMDn
...
done
break [ N]:
동안 CONDTIITON1 ; do
CMD1
if CONDITION2;
fi
CMDn
...
done
예 1: 100 내의 모든 양수를 순회하려면 루프가 필요합니다.
# !/bin/bash
#
declare -i i=0
declare -i sum=0
until [ $i -gt 100 ]; do
let i++
if [ $[$i%2] -eq 1 ];
continue
fi
let sum+=$i
done
cho "짝수 합계: $sum"
무한 루프 만들기:
true인 동안 do
loop body
done
false까지
loop body
done
예 2: 매 3 몇 초 만에 시스템에서 로그인한 사용자 정보를 가져옵니다. docker가 로그인하면 로그에 기록되고 종료됩니다. " 사용자 이름을 입력하세요: " username
do
if who | grep "^$username" &> /dev/null;
Sleep 3
done
echo "$username이 로그온했습니다." >> /tmp/user.log
두 번째 구현:
#!/bin/bash
#
read -p "사용자 이름 입력: " username
who | grep "^$username" &>
Sleep 3
done
echo "$username이 로그온했습니다." >> /tmp/user.log
한 줄):
while read line; do
루프 본문
done < /PATH/FROM/SOMEFILE
은 /PATH/FROM/SOMEFILE 파일을 읽습니다. 의 각 줄에 순서를 지정하고 변수 line에 줄 값을 할당합니다.
예: ID 번호가 짝수인 모든 사용자를 찾고 해당 사용자 이름과 ID 번호를 표시합니다.
#!/bin; /bash
읽는 동안;do
if [ $[`echo $line | cut -d: -f3` % 2] -eq 0 ];then
) /passwd
for 루프의 특수 형식:
for((제어 변수 초기화, 조건 판단 표현식, 제어 변수 수정 표현식)) do
loop body
done
제어 변수 초기화: 루프 코드 세그먼트로 실행될 때 한 번만 실행됩니다.
제어 변수의 수정 표현: 각 사이클이 끝날 때 제어 변수 수정 작업이 먼저 수행된 후 조건부로 수행됩니다. 판단;
예: 100;
#!/bin/bash 내의 모든 양의 정수의 합을 구합니다.
#ecdeclare -i sum = 0
for ((i = 1; i & lt; = 100; i ++); done
echo "Sum: $sum."
예 2: 구구단 인쇄
#!/bin/bash
#
for ((j=1;j<=9;j++));do
for((i=1;i<=j;i++))do
echo -e -n "${ i}
cpu) CPU 정보 표시;
mem) 메모리 정보 표시;
disk) 디스크 정보 표시;
quit) quit
(2) 사용자에게 옵션을 선택하라는 메시지 표시 ; (3) 사용자가 선택한 콘텐츠를 표시합니다.
#!/bin/bash
#
cat << EOF
cpu)
mem) 메모리 정보 표시;
disk) 디스크 정보 표시;
quit) quit
==================== ==== =====
EOF
read -p "옵션 입력: " option
while [ "$option" != 'cpu' -a "$option " != ' mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
read -p "잘못된 옵션입니다. 다시 입력하세요: " option
done
if [ "$option" == 'cpu' ]; then
lscpu
elif [ "$option" == 'mem' ]; /proc/meminfo
elif [ "$option" == 'disk' ]; then
  fdisk -l
else
echo "종료"
0
fi
추가:
사용자는 표시가 완료된 후 스크립트를 선택하고 종료하지 않습니다. 대신 사용자에게 다른 콘텐츠를 표시하도록 선택하라는 메시지가 표시됩니다. quit가 사용됨
조건부 판단: 사례문
case 변수 참조 in
PAT1)
branch1
;;
PAT2)
Branch2
;;
.. .
*)
기본 브랜치
#!/bin/bash
#
고양이 <
cpu) CPU 정보 표시;
mem) 메모리 정보 표시;
disk) 디스크 정보 표시;
quit) quit
==================== ========
EOF
read -p "옵션 입력: " option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
read -p "잘못된 옵션입니다. 다시 입력하세요: " option
done
case "$option" in
cpu)
lscpu
;
cat /proc/meminfo
;
디스크)
fdisk -l
;;
*)
echo "종료..."
exit 0
;;
에삭
(1) 스크립트는 start, stop, restart, status 매개변수를 허용할 수 있습니다.
(2) 매개변수가 이 네 가지 중 하나가 아니면 형식을 사용하라는 메시지가 표시됩니다. error;
(3) 시작인 경우: /var/lock/subsys/SCRIPT_NAME을 생성하고 "성공적으로 시작"을 표시합니다.
고려: 이전에 한 번 시작된 경우 어떻게 해야 합니까?
(4) 중지된 경우: /var/lock/subsys/SCRIPT_NAME을 삭제하고 "중지 완료"를 표시합니다.
고려 사항: 사전에 중지된 경우 어떻게 해야 합니까?
(5) 다시 시작하는 경우 먼저 중지한 다음 시작하세요.
고려 사항: 시작이 없으면 어떻게 해야 하나요?
(6) 상태인 경우
/var/lock/subsys/SCRIPT_NAME 파일이 있으면 "SCRIPT_NAME이 실행 중입니다..."가 표시됩니다.
/var/ lock/subsys /SCRIPT_NAME 파일이 없으면 "SCRIPT_NAME이 중지되었습니다..."가 표시됩니다.
여기서 SCRIPT_NAME은 현재 스크립트 이름입니다.
요약: Until, while , case
bash 스크립트 프로그래밍:
case 설명:
case 변수 참조 in
PAT1)
branch 1
;;
PAT2)
branch 2
;
case는 glob 스타일을 지원합니다. 와일드카드:
*: 모든 길이의 문자;
[]: 지정된 범위 내의 단일 문자
a|b: a 또는 b
function
절차적 프로그래밍: 코드 재사용
모듈식 프로그래밍
구조적 프로그래밍
구문 1:
function f_name {
...함수 본문...
}
구문 2:
f_name() {
...함수 본문...
}
함수는 호출될 때만 실행됩니다.
호출: 함수 이름이 주어지면
함수 이름이 나타나는 곳에 자동으로 함수 코드로 대체됩니다.
함수의 수명 주기: 호출 시 생성되고 반환 시 종료됩니다. ;
return 이 명령은 사용자 정의 상태 결과를 반환합니다.
0: 성공
1-255: 실패
#!/bin/bash
#
function adduser {
id $username &> /dev/null; then
echo "$username이 존재합니다."
return 1
else Useradd $username
[ $? - eq 0 ] && echo "$username 추가가 완료되었습니다." && return 0
}
for i in {1..10}; =myuser$ i
adduser
done
예: 서비스 스크립트
#!/bin/bash
#
# chkconfig: - 88 12
# 설명: 테스트 서비스 스크립트
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog
start() {
if [ -e $lockfile ]; then
echo "$prog가 이미 실행 중입니다."
return 0
else
touch $lockfile
[ $ ? -eq 0 |
rm - f $lockfile && echo "$prog 중지하세요."
else
echo "$prog가 아직 중지되었습니다."
fi
}
status() {
if [ -e $lockfile ]; then
echo "$prog가 실행 중입니다."
else
echo "$prog가 중지되었습니다."
fi
}
usage() {
echo "사용법: $prog {start|stop|restart|status}"
}
if [ $# - lt 1
시작
;;
stop)
stop
;;
restart)
stop
start
;;
상태)
status
;;
*)
usage
esac
함수 반환 값:
함수 실행 결과 반환 값:
(1) echo 또는 print 명령을 사용하여 출력합니다.
(2) 함수 본문에서 호출된 명령의 실행 결과
함수:
(1) 기본값은 함수 본문에서 실행된 마지막 명령의 종료 상태 코드에 따라 다릅니다.
(2) 사용자 정의 종료 상태 코드:
return
함수는 매개변수를 허용할 수 있습니다:
함수에 매개변수 전달: 함수를 호출할 때 주어진 매개변수 목록을 함수 이름 뒤에 공백으로 구분하세요. 예: "testfunc arg1 arg2..."
함수 본문에서 $1 , $2, ...를 사용할 수 있습니다. $@, $*, $#와 같은 특수 변수를 사용할 수도 있습니다. 예: 사용자 10명 추가
#!/bin/bash
#
function adduser {
if [ $# -lt 1 ] then
return 2
# 2 : 인수 없음
fi
id $1 &> /dev/null; then
echo "$1이 존재합니다."
return 1
useradd $1
[ $? -eq 0 |
done
함수 구현을 사용하여 NN 곱셈표를 인쇄합니다.
지역 변수: 현재 쉘 프로세스; 스크립트를 실행하기 위해 전용 쉘 프로세스가 시작됩니다. 따라서 로컬 변수의 범위는 현재 쉘 스크립트 파일입니다.
함수에 지역 변수가 있는 경우 해당 이름은 지역 변수와 동일합니다.
함수에서 지역 변수를 정의하는 방법:
local NAME =VALUE
함수 재귀:
함수는 직접 또는 간접적으로 자신을 호출합니다.
N !=N(n-1)(n-2)...1
n(n-1)! = n(n-1)(n-2)!
# !/bin/bash
#
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]; then
echo 1
else
echo $[$1*$(사실 $[$1-1])]
Fi
}
fact 5
n차 피보나치 수열 찾기
#!/ bin/b 애쉬
#
fab() {
if [ $1 -eq 1 ]; then
echo 1
elif [ $1 -eq 2 ];
그밖에
echo $ [$ (Fab $ [$ 1-1])+$ (Fab $ [$ 1-2])]
fi
}
fab 7 ​​
Systemd:
POST --> 부트로더 --> 커널 + initramfs(initrd) -->
init:
CentOS 5: SysV init
CentOS 6: Upstart
CentOS 7: Systemd
Systemd 새로운 기능 :
시스템 부팅 시 인식
필요에 따라 프로세스 활성화
종속성을 기반으로 서비스 제어 논리 정의: 단위
구성 파일 식별하고 구성합니다. 파일에는 주로 시스템 서비스, 청취 소켓, 저장된 시스템 스냅샷 및 기타 초기화 관련 정보가 포함됩니다.
/usr/lib/systemd/system
/run/ systemd/system
/etc/systemd/system
단위 유형:
서비스 단위: 파일 확장자는 .service이며 시스템 서비스를 정의하는 데 사용됩니다.
대상 단위: 파일 확장자는 .target이며 "실행 수준" 구현을 시뮬레이션하는 데 사용됩니다.
장치 단위: .device, 커널이 인식하는 장치를 정의하는 데 사용됨
마운트 단위: .mount, 정의 파일 시스템 마운트 지점;
소켓 유닛: .socket, 프로세스 간 통신을 위해 소켓 파일을 식별하는 데 사용됨
스냅샷 유닛: .snapshot, 시스템 스냅샷 관리
스왑 유닛: .swap,
자동 마운트 단위: .automount, 파일 시스템의 자동 마운트 지점
경로 단위: .path, 파일 시스템에서 파일 또는 디렉터리를 정의하는 데 사용됩니다.
주요 기능:
소켓 기반 활성화 메커니즘: 소켓과 서비스 프로그램이 분리되어 있습니다.
버스 기반 활성화 메커니즘:
장치 기반 활성화 메커니즘:
경로 기반 활성화 메커니즘:
시스템 스냅샷: 각 장치의 현재 상태 정보를 영구 저장 장치에 저장합니다.
sysv init 스크립트와 역호환 가능
호환되지 않음:
systemctl 명령이 수정되었습니다.
systemd에 의해 시작되지 않은 서비스, systemctl은 해당 서비스와 통신할 수 없습니다.
시스템 서비스 관리:
CentOS 7: 서비스 단위
참고: 초기 서비스 스크립트와 호환 가능
명령: systemctl COMMAND name.service
Start: 서비스 이름 start ==> systemctl start name.service
Stop: 서비스 이름 stop ==> systemctl stop name.service
Restart: 서비스 이름 restart ==> name.service
상태: 서비스 이름 상태 ==> systemctl 상태 name.service
조건부 다시 시작: 서비스 이름 condrestart ==> systemctl try-restart name.service
서비스를 다시 로드하거나 다시 시작하세요. systemctl reload-or-restart name.service
서비스를 다시 로드하거나 조건부로 다시 시작: systemctl reload-or-try-restart name.service
부팅 시 자동으로 시작하도록 설정 금지: systemctl 마스크 이름 .service
금지를 취소하고 부팅 시 자동으로 시작되도록 설정: systemctl unmask name.service
서비스의 현재 활성화 상태 보기: systemctl is-active name.service
활성화된 모든 항목 보기 서비스:
systemctl list-units --type 서비스
모든 서비스 보기:
systemctl list-units --type service --all
chkconfig 명령 대응:
부팅 시 자동으로 시작되도록 서비스 설정: chkconfig name on ==> systemctl 활성화 name.service
Disable: chkconfig name off ==> systemctl disable name.service
보기 모든 서비스의 자체 시작 상태 서비스:
chkconfig --list ==> systemctl list-unit-files --type service
부팅 시 서비스가 자동으로 시작되는지 확인: systemctl is-enabled name.service
기타 명령:
서비스 종속성 보기: systemctl list-dependents name.service
대상 단위:
단위 구성 파일: .target
Runlevel:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, Rescue.target
2 ==> runlevel2.target, multi -user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5 .target, graphic.target
6 ==> runlevel6.target, 재부팅.target
레벨 전환:
init N ==> systemctl isolate name.target
레벨 보기:
runlevel ==> systemctl list-units --type target
기본 실행 수준 가져오기:
/etc/inittab ==> systemctl get-default
기본 수준 수정 :
/etc/inittab ==> systemctl set-default name.target
긴급 구조 모드로 전환:
systemctl 구조
긴급 구조 모드로 전환 :
ㅋㅋㅋ suspend
스냅샷: systemctl hibernate
스냅샷 및 정지: systemctl hybrid-sleep
검토: bash 스크립팅, systemd
함수: 모듈식 프로그래밍
function f_name {
...함수 본문...
}
f_name() {
... 기능 본문 ...
}
return 명령;
매개변수:
함수 본문의 호출 ​​매개변수: $1, $2, ...
$*, $@ , $#
함수에 매개변수 전달:
함수 이름 매개변수 목록
systemd: system and service
단위:
유형: service, target
.Service, .target
SystemCTL
bash 스크립트 프로그래밍:
배열:
변수: 단일 요소의 메모리 공간을 저장합니다. 여러 요소
배열 이름
인덱스: 숫자는 0부터 시작하고 숫자 인덱스입니다.
참고: 인덱스는 숫자뿐만 아니라 사용자 정의 형식의 사용도 지원할 수 있습니다.
bash의 배열은 희소 형식을 지원합니다.
배열의 참조 요소: ${ARRAY_NAME[INDEX]}
배열 선언:
선언 -a ARRAY_N AME
clare -A ARRAY_NAME: 연관 배열;
배열 요소 할당:
(1) 한 번에 하나의 요소만 할당합니다.
weekdays[ 0] ="Sunday"
weekdays[4]="Thursday"
(2) 모든 요소를 ​​한 번에 할당:
ARRAY_NAME=("VAL1" "VAL2" "VAL3 " ...)
(3) 특정 요소만 할당:
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 읽기 -a ARRAY
참조 배열 요소: ${ARRAY_NAME[INDEX]}
참고: [INDEX]를 생략하면 아래 첨자 0이 있는 요소를 참조한다는 의미입니다.
배열의 길이( 배열의 요소 수): ${#ARRAY_NAME[*]}, ${#ARRAY_NAME[@]}
예: 10개의 난수를 생성하여 배열에 저장하고 최대값과 최소값;
# !/bin/bash
#
declare -a rand
declare -i max=0
for i in {0.. 9 }; do
rand [$i]=$RANDOM
echo ${rand[$i]}
[ ${rand[$i]} -gt $max ] && max=$ {rand[$i]}
done
echo "Max: $max"
배열을 정의하세요. 배열의 요소는 모두 . /var/log 디렉토리에 로그인하십시오. 첨자가 ​​짝수인 파일의 줄 수의 합계를 계산하려면
#!/bin/bash
#
declare -a files
files=(/var /log/*.log)
declare -i 라인=0
for i in $(seq 0 $[${#files[*]} -1]) 하세요
if [ $[$i%2] -eq 0 ];then
let 라인+=$(wc -l ${files[$i]} | cut -d' ' -f1)
Fi
done
echo "Lines: $lines."
배열의 참조 요소:
모든 요소: ${AR RA 네[@]} , ${ARRAY[*]}
Array 슬라이싱: ${ARRAY[@]:offset:number}
offset: 건너뛸 요소 수
number: 요소 Number를 제거하고 오프셋 뒤의 모든 요소를 ​​가져옵니다. ${ARRAY[@]:offset};
배열에 요소 추가:
ARRAY[${#ARRAY[*]}]
배열의 요소 삭제:
unset ARRAY[INDEX]
연관 배열:
declare -A ARRAY_NAME
ARRAY_NAME=([index_name1]=' val1' [index_name2]='val2' ...)
bash의 문자열 처리 도구:
문자열 슬라이싱:
${var:offset: number}
문자열의 가장 오른쪽 문자 가져오기: ${var: -lengh}
참고: 콜론 뒤에는 공백 문자가 있어야 합니다.
패턴을 기반으로 하위 문자열 가져오기:
${var#*word}: word는 지정된 임의의 문자일 수 있습니다. 기능: 왼쪽에서 오른쪽으로 var 변수에 저장된 문자열에 나타나는 첫 번째 단어를 찾고 해당 문자의 시작 부분에서 첫 번째 단어를 삭제합니다. string to the word 문자 사이의 모든 문자가 동시에 나타납니다.
${var##*word}: 위와 동일하지만 문자열의 시작 부분과 word에서 지정한 마지막 문자 사이의 모든 문자가 삭제됩니다.
file="/var/log/messages"
${file##*/}: message
${var%word*}: 여기서 word는 지정된 문자일 수 있습니다. function : 오른쪽에서 왼쪽으로 var 변수에 저장된 문자열에서 처음 나타나는 단어를 찾고, 문자열의 마지막 문자와 첫 번째 단어 사이의 모든 문자를 삭제합니다.
file= "/var/ log/messages"
${file%/*}: /var/log
${var%%word*}: 문자열의 가장 오른쪽 부분이 삭제된다는 점을 제외하고 위와 동일 문자 왼쪽부터 마지막 ​​단어 문자 사이의 모든 문자
예: url=:80
${url##*:}
${url%%:* }
찾기 및 바꾸기:
${var/pattern/substi}: var로 표시되는 문자열에서 패턴과 일치하는 첫 번째 문자열을 찾아
${var로 바꿉니다. //pattern/substi}: var로 표현된 문자열에서 패턴과 일치할 수 있는 문자열을 모두 찾아 substi로 바꿉니다.
${var/#pattern /substi}: 일치하는 문자열을 찾습니다. var로 표시되는 문자열의 줄 시작 부분에 패턴을 넣고 substi로 바꿉니다.
${var/%pattern/substi}: var로 표시되는 문자열을 찾고 끝에서 패턴과 일치하는 문자열을 바꿉니다.
찾기 및 삭제:
${var/pattern}: var로 표시된 문자열을 찾아 패턴과 일치하는 A 문자열을 한 번 삭제합니다.
${var/ /pattern}:
${var/#pattern}:
${var/%pattern}:
대소문자 변환:
${var^^}: 변환 var의 모든 소문자를 대문자로
${var,,}: var의 모든 대문자를 소문자로 변환합니다.
변수 할당:
${var:-value}: var가 비어 있거나 설정되지 않은 경우 반환합니다. 그렇지 않으면 var의 값을 반환합니다.
${var:=value}: var가 비어 있거나 설정되지 않은 경우 value를 반환하고 var에 값을 할당합니다. 그렇지 않으면 var의 값을 반환합니다.
${var:+value}: var가 비어 있지 않으면 값을 반환하고,
${var:?error_info}: var가 비어 있거나 설정되지 않은 경우 error_info를 반환하고, 그렇지 않으면 값을 반환합니다.
스크립트 프로그램에 구성 파일을 사용합니다.
(1) 텍스트 파일을 정의하고 각 줄에 "name=value"를 정의합니다.
(2) 스크립트 그냥 파일
명령:
mktemp 명령:
mktemp [OPTION]... [TEMPLATE]
TEMPLATE: XXX
XXX 최소 3개 이상 표시
OPTION:
-d: 임시 디렉터리 생성
--tmpdir=/PATH/TO/SOMEDIR: 임시 파일 디렉터리 위치 지정
:
설치 [옵션]... [-T] SOURCE DEST
설치 [옵션]... 소스... DIRECTORY
설치 [옵션]... -t DIRECTORY SOURCE. ..
설치 [OPTION]... -d DIRECTORY...
옵션:
-m MODE
-o OWNER
- g GROUP
GNU awk:
텍스트 처리를 위한 세 가지 도구: grep, sed, awk
grep, egrep, fgrep: 텍스트 필터링 도구; 패턴
sed: 라인 편집기
패턴 공간, 보류 공간
awk: 보고서 생성기, 형식화된 텍스트 출력
AWK: Aho, Weinberger, Kernighan -->
GNU awk, gawk
gawk - 패턴 검색 및 처리 언어
기본 사용법: gawk [옵션] '프로그램' 파일 ...
프로그램: 진술 }… V-V VAR = 값: 맞춤 변수;
1, Print
print item1, item2, ...
포인트:
(1) 쉼표 구분 기호;
(2) 각 출력 항목은 문자열 또는 숫자 값일 수 있습니다. 현재 레코드의 필드, 변수 또는 awk 표현식
(3) 항목이 생략되면 $0 인쇄와 동일합니다. 2. 변수
2.1 내장 변수
FS: 입력 필드 구분 기호, 기본값은 공백 문자입니다.
OFS: 출력 필드 구분 기호, 기본값은 공백 문자입니다.
RS: 입력 레코드 구분자, 입력 시 줄 바꿈 문자
ORS: 출력 레코드 구분자, 출력 시 줄 바꿈 문자
NF: 필드 수, 필드 수
{ print NF}, {print $NF}
NR: 레코드 수, 줄 수
FNR: 각 파일을 개별적으로 계산합니다.
FILENAME: 현재 파일 이름;
ARGC: 명령줄 매개변수 수
ARGV: 명령줄에서 제공한 매개변수를 저장하는 배열
2.2 사용자 정의 변수
(1) var=value
변수 이름은 대소문자를 구분합니다.
(2) 프로그램에서
3을 직접 정의하고 printf 명령
화 출력: printf FORMAT, item1, item2, ...
(1) FORMAT이 제공되어야 합니다.
(2) 자동으로 줄 바꿈되지 않으며 개행 제어 문자 n
가 명시적으로 제공되어야 합니다.
(3) FORMAT에서는 각 후속 항목에 대한 형식 지정 기호를 지정해야 합니다.
형식 지정 기호:
%c: 문자의 ASCII 코드를 표시합니다. , %i: 십진수 표시;
%e, %E: 숫자 값을 과학적 표기법으로 표시합니다.
%f: 부동 소수점 숫자로 표시합니다. 과학적 표기법의 값 또는 부동 소수점 형식의 숫자 값 표시
%u: 부호 없는 정수
%%: % 자체 표시; 수정자:
#[.#]: 첫 번째 숫자는 디스플레이 너비를 제어하고, 두 번째 #은 소수점 이하의 정밀도를 나타냅니다.
%3.1f
-: 왼쪽 정렬
+: 숫자 값 표시 기호
4, 연산자
산술 연산자:
x+y, x-y, x*y, x/y, x^y, x %y
-x
+x: 숫자 값으로 변환
문자열 연산자: 부호 없는 연산자, 문자열 연결
할당 연산자:
=, + =, -=, *=, /=, %=, ^=
++, --
비교 연산자:
>, >=, <, < =, !=, ==
패턴 일치 문자:
~: 일치 여부
!~: 일치하지 않음
논리 연산자:
&&
||
!
함수 호출:
function_name(argu1, argu2, ...)
조건식:
선택자? if-true-expression:if-false-expression
# awk -F: '{$3>=1000?usertype="일반 사용자":usertype="Sysadmin 또는 SysUser";printf "% 15s: %-sn",$1,usertype}' /etc/passwd
5, PATTERN
(1) 비어 있음: 빈 패턴, 모든 줄과 일치;
(2) /regular 표현/: 여기서 패턴과 일치할 수 있는 라인만 처리합니다.
(3) 관계식: 결과는 "true" 또는 "false"일 수 있습니다.
True: 결과는 0이 아닙니다. value, 비어 있지 않은 문자열
(4) line ranges: line ranges,
startline, endline:/pat1/,/pat2/
참고: 숫자를 직접 제공하는 형식 지원되지 않습니다
~] # awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END 모드
BEGIN{ }: 파일 처리 시작
END{}: 텍스트 처리가 완료된 후에 한 번만 실행됩니다.
(1 ) 표현식
(2) 제어문: if, while 등;
(3) 복합문: 조합문
(4) 입력문
(5) 출력문
7. 제어문
if(조건) {문장}
if(조건) {문장} else {문장}
while(조건) {문장}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
continue
delete array[index]
삭제 array
exit
{ 문 }
7.1 if-else
구문: if(조건) 문 [else 문]
~]#아크 -F: '{if($3>= 1000) {printf "일반 사용자: %sn",$1} else {printf "루트 또는 Sysuser: %sn",$1}}' /etc/passwd
~]# awk -F: '{if ($NF=="/bin/bash") 인쇄 $1}' /etc/passwd
~]# awk '{if(NF>5) 인쇄 $0}' /etc/fstab
~]# df -h | awk -F[%] '/^/dev/{print $1}' | awk '{if($NF>=20) 인쇄 $1}'
사용 시나리오: 전체 행 또는 awk에서 얻은 특정 필드에 대해 조건부 판단
7.2 while 루프
문법: while(조건) 문
조건 "true", 루프 입력, 조건 "false", 루프 종료
사용 시나리오: 행의 여러 필드를 하나씩 처리할 때 사용, 배열의 각 요소를 하나씩 처리할 때 사용
~]# awk '/ ^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i) i++ }}' /etc/grub2.cfg
~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($ i)>=7) {print $i,length($ i)}; i++}}' /etc/grub2.cfg
7.3 do-while 루프
구문: do 문 while( 조건)
의미: 루프 본문을 한 번 이상 실행합니다
~ ]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg
특수 사용법:
배열의 요소를 순회할 수 있습니다.
구문: for (var in array) { for-body}
7.5 스위치 문
구문: switch(expression) {case VALUE1 또는 /REGEXP/: 문; 케이스 VALUE2 또는 /REGEXP2/: 문; ...; 기본값: 문}
7.6 break and continue
break [n]
continue
7.7 next
이 줄의 처리를 일찍 종료하고 다음 줄로 바로 이동합니다.
~] # awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd
8, array
연관 배열: 배열 [index- 표현식]
index-expression:
(1) 모든 문자열을 사용할 수 있습니다. 문자열은 큰따옴표를 사용해야 합니다.
(2) 배열 요소가 존재하지 않는 경우 를 인용하면 awk는 자동으로 이 요소를 생성하고 해당 값을 "빈 문자열"로 초기화합니다.
요소가 배열에 있는지 확인하려면 "배열의 인덱스" 형식을 사용하세요.
weekdays[mon]="Monday"
배열의 각 요소를 반복하려면 for 루프를 사용하세요.
for(var in array) {for-body}
~]# awk 'BEGIN{weekdays["mon"]="월요일";weekdays["tue"]="화요일";for(i는 평일) {print weekdays[i]}}'
참고: var는 배열의 각 인덱스를 순회합니다.
state["LISTEN"]++
state["ESTABLISHED"]++
~]# netstat -tan | '/^tcp>/{state[$NF]++}END{for(i in state) { print i,state[i]}}'
~]# awk '{ip[$1] ++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log
1: /etc/fstab의 각 파일 시스템 유형에 대한 통계 file 발생 횟수;
~]# awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab
2: 지정된 파일에서 각 단어의 발생 횟수를 계산합니다.
~]# awk '{for(i=1;i<=NF;i++){count[$i]+ +}} END{for(i in count) {print i,count[i]}}' /etc/fstab
9, 함수
9.1 내장 함수
수치 처리:
rand(): 0과 1 사이의 임의의 숫자를 반환합니다.
문자열 처리:
length([s]): 지정된 문자열의 길이를 반환합니다.
sub( r,s,[t]): r로 표시되는 패턴을 사용하여 t로 표시되는 문자에서 일치하는 콘텐츠를 찾고, 첫 번째 항목을 s로 표시되는 콘텐츠로 바꿉니다. , s,[t]): r로 표시되는 패턴을 사용하여 t로 표시되는 문자에서 일치하는 콘텐츠를 찾고 해당 항목을 모두 s로 표시되는 콘텐츠로 바꿉니다. ,r]): r을 구분 기호로 사용하여 문자 s를 자르고 잘라낸 결과를 a로 표시되는 배열에 저장합니다.
~]# netstat -tan awk '/^tcp>/ {split ($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
9.2 사용자 정의 기능
《sed 및 awk》
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
   
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
DNF는 Fedora 18에서 새로운 RPM软件包管理器를 제공합니다.发行版中。而最近,他取代了YUM,正式成为 Fedora 22 的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存析,依赖分析더 많은 방면으로 이동이 가능합니다.
DNF를 사용하여 RPM, libsolv 및 hawkey 库进行包管理操work.尽管它没에는 CentOS 및 RHEL 7이 포함되어 있습니다. YUM과 같은 종류의 DNF를 사용합니다.
DNF는 1.0,发行日期是2015년 5월 11일에 最新稳定发行版版本号是.采사용 Python 编写,发行许可为GPL v2.
YUM의 종속성 해결은 악몽이며 C Hawkey와 함께 SUSE 라이브러리 'libsolv' 및 Python 래퍼를 사용하여 DNF에서 해결되었습니다.
YUM에는 문서화된 API가 없습니다.
새로운 기능을 구축하는 것은 어렵습니다.
Python 이외의 확장은 지원되지 않습니다.
메모리 감소가 적고 메타데이터의 자동 동기화가 적습니다. 시간이 많이 걸리는 프로세스입니다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

위 내용은 리눅스 시스템의 기초(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.