# Git
## Gitæ¦è¿°
### çæ¬ç³»ç»
SVN æ¯éä¸å¼çæ¬æ§å¶ç³»ç»ï¼çæ¬åºæ¯é䏿¾å¨ä¸å¤®æå¡å¨çï¼èå¼å人åå·¥ä½çæ¶åï¼ç¨ç齿¯èªå·±ççµèï¼æä»¥é¦å
è¦ä»ä¸å¤®æå¡å¨ä¸è½½ææ°ççæ¬ï¼ç¶åå¼åï¼å¼åå®åï¼éè¦æèªå·±å¼åçä»£ç æäº¤å°ä¸å¤®æå¡å¨ã
éä¸å¼çæ¬æ§å¶å·¥å
·ç¼ºç¹ï¼æå¡å¨åç¹æ
éã容鿧差
Git æ¯åå¸å¼çæ¬æ§å¶ç³»ç»ï¼Distributed Version Control Systemï¼ç®ç§° DVCSï¼ ï¼å为两ç§ç±»åçä»åºï¼
æ¬å°ä»åºåè¿ç¨ä»åºï¼
* æ¬å°ä»åºï¼æ¯å¨å¼å人åèªå·±çµèä¸ç Git ä»åº
* è¿ç¨ä»åºï¼æ¯å¨è¿ç¨æå¡å¨ä¸ç Git ä»åº
***
### 工使µç¨
1ï¼ä»è¿ç¨ä»åºä¸å
é代ç å°æ¬å°ä»åº
2ï¼ä»æ¬å°ä»åºä¸ checkout 代ç ç¶åè¿è¡ä»£ç ä¿®æ¹
3ï¼å¨æäº¤åå
å°ä»£ç æäº¤å°**æååº**
4ï¼æäº¤å°æ¬å°ä»åºãæ¬å°ä»åºä¸ä¿åä¿®æ¹çå个åå²çæ¬
5ï¼ä¿®æ¹å®æåï¼éè¦åå¢éæåå
±äº«ä»£ç æ¶ï¼å°ä»£ç push å°è¿ç¨ä»åº
### Gitå®è£
ä¸è½½å°åï¼
ç§»å¨è®¾å¤æä½ç³»ç»ï¼

***
## Linuxç³»ç»
### ç³»ç»ä»ç»
ä»å
å°ä½ä¾æ¬¡æ¯ç¡¬ä»¶ â å
æ ¸å± â Shell å± â åºç¨å± â ç¨æ·

å
æ ¸å±ï¼æ ¸å¿ååºç¡ï¼éçå¨ç¡¬ä»¶å¹³å°ä¸ï¼æ§å¶å管çç³»ç»å
çåç§èµæºï¼ææçç»ç»è¿ç¨çè¿è¡ï¼æ©å±ç¡¬ä»¶çåè½ï¼æé«èµæºå©ç¨æçï¼ä¸ºç¨æ·æä¾å®å
¨å¯é çåºç¨ç¯å¢ã
Shell å±ï¼ä¸ç¨æ·ç´æ¥äº¤äºççé¢ãç¨æ·å¯ä»¥å¨æç¤ºç¬¦ä¸è¾å
¥å½ä»¤è¡ï¼ç± Shell è§£éæ§è¡å¹¶è¾åºç¸åºç»ææè
æå
³ä¿¡æ¯ï¼æä»¥æä»¬ä¹æ Shell ç§°ä½å½ä»¤è§£éå¨ï¼å©ç¨ç³»ç»æä¾ç丰å¯å½ä»¤å¯ä»¥å¿«æ·èç®ä¾¿å°å®æè®¸å¤å·¥ä½ã
****
### æä»¶ç³»ç»
Linux æä»¶ç³»ç»ç®å½ç»æåçç¥ç windows ç³»ç»æè¾å¤§åºå«ï¼æ²¡æåç§çç¬¦çæ¦å¿µãæ ¹ç®å½åªæä¸ä¸ª/ï¼éç¨å±çº§å¼çæ ç¶ç®å½ç»æã

***
## è¿ç¨è¿æ¥
### 设置IP
#### NAT
é¦å
è®¾ç½®èææºä¸ NAT 模å¼çéé¡¹ï¼æå¼ VMwareï¼ç¹å»ç¼è¾ä¸çèæç½ç»ç¼è¾å¨ï¼è®¾ç½® NAT åæ°

**注æ**ï¼VMware Network Adapter VMnet8 ä¿è¯æ¯å¯ç¨ç¶æ
â 
#### éæIP
卿®éç¨æ·ä¸ä¸è½ä¿®æ¹ç½å¡çé
置信æ¯ï¼æä»¥æä»¬è¦åæ¢å° root ç¨æ·è¿è¡ ip é
ç½®ï¼su root/su
* ä¿®æ¹ç½å¡é
ç½®æä»¶ï¼`vim /etc/sysconfig/network-scripts/ifcfg-ens33`
* ä¿®æ¹æä»¶å
容
```sh
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.2.111.62
NETMASK=255.255.252.0
GATEWAY=10.2.111.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=2c2371f1-ef29-4514-a568-c4904bd11c82
DEVICE=ens33
ONBOOT=true
###########################
BOOTPROTO设置为éæstatic
IPADDR设置ipå°å
NETMASK设置åç½æ©ç
GATEWAY设置ç½å
³
ONBOOT设置为trueå¨ç³»ç»å¯å¨æ¶æ¯å¦æ¿æ´»ç½å¡
æ§è¡ä¿å :wq!
```
* éå¯ç½ç»ï¼systemctl restart network
* æ¥çIPï¼ifconfig
* å®¿ä¸»æº ping èææºï¼èææº ping 宿主æº
* å¨èææºä¸è®¿é®ç½ç»ï¼éè¦å¢å ä¸å NAT ç½å¡
* ãèææºã--ã设置ã--ãæ·»å ã
*
***
### è¿ç¨ç»é
**æå¡å¨ç»´æ¤å·¥ä½** 齿¯å¨ è¿ç¨ éè¿ SSH 客æ·ç«¯ æ¥å®æçï¼ å¹¶æ²¡æå¾å½¢çé¢ï¼ ææçç»´æ¤å·¥ä½é½éè¦éè¿å½ä»¤æ¥å®æï¼Linux æå¡å¨éè¦å®è£
SSH ç¸å
³æå¡
é¦å
æ§è¡ sudo apt-get install openssh-server æä»¤ï¼æ¥ä¸æ¥ç¨ xshell è¿æ¥

å
ç¨æ®éç¨æ·ç»å½ï¼ç¶å转æ root
***
## ç¨æ·ç®¡ç
Linux ç³»ç»æ¯ä¸ä¸ªå¤ç¨æ·ãå¤ä»»å¡çæä½ç³»ç»ãå¤ç¨æ·æ¯æå¨ Linux æä½ç³»ç»ä¸å¯ä»¥å建å¤ä¸ªç¨æ·ï¼èè¿äºå¤ç¨æ·åå¯ä»¥åæ¶æ§è¡åèªä¸åçä»»å¡ï¼èäºä¸å½±å
å¨ Linux ç³»ç»ä¸ï¼ä¼åå¨ç以ä¸å 个æ¦å¿µï¼
* ç¨æ·åï¼ç¨æ·çåç§°
* ç¨æ·æå±çç»ï¼å½åç¨æ·æå±çç»
* ç¨æ·çå®¶ç®å½ï¼å½åè´¦å·ç»å½æåä¹åçç®å½ï¼å°±å«åè¯¥ç¨æ·çå®¶ç®å½
### ç¨æ·ç®¡ç
#### å½åç¨æ·
lognameï¼ç¨äºæ¾ç¤ºç®åç¨æ·çåç§°
* --helpï¼å¨çº¿å¸®å©
* --vesionï¼æ¾ç¤ºçæ¬ä¿¡æ¯
#### åæ¢ç¨æ·
su UserNameï¼åæ¢ç¨æ·
su -c comman rootï¼åæ¢ç¨æ·ä¸º root 并卿§è¡ comman æä»¤åéåºè¿åå使ç¨è
suï¼åæ¢å° root ç¨æ·
#### ç¨æ·æ·»å
å½ä»¤ï¼useradd [options] ç¨æ·å
åæ°è¯´æï¼
* -c comment æå®ä¸æ®µæ³¨éæ§æè¿°
* -d æå®ç¨æ·ä¸»ç®å½ï¼å¦ææ¤ç®å½ä¸åå¨ï¼ååæ¶ä½¿ç¨ -m é项ï¼å¯ä»¥å建主ç®å½
* -m åå»ºç¨æ·ç主ç®å½
* -g ç¨æ·ç»ï¼æå®ç¨æ·æå±çç¨æ·ç»
* -G ç¨æ·ç»ï¼ç¨æ·ç» æå®ç¨æ·æå±çéå ç»
* -s Shell æä»¶ æå®ç¨æ·çç»å½ Shell
* -u ç¨æ·å·ï¼æå®ç¨æ·çç¨æ·å·ï¼å¦æåæ¶æ -o é项ï¼åå¯ä»¥éå¤ä½¿ç¨å
¶ä»ç¨æ·çæ è¯å·ã
å¦ä½ç¥éæ·»å ç¨æ·æåå¢ï¼ éè¿æä»¤ cat /etc/passwd æ¥ç
```
seazean:x: 1000:1000:Seazean:/home/seazean:/bin/bash
ç¨æ·å å¯ç ç¨æ·ID ç»ID 注é å®¶ç®å½ shellç¨åº
```
useradd -m Username æ°å»ºç¨æ·æåä¹åï¼ä¼å»ºç« home ç®å½ï¼ä½æ¯æ¤æ¶æé®é¢æ²¡ææå® shell ççæ¬ï¼ä¸æ¯æä»¬çç¥ç bashï¼åè½ä¸æå¾å¤éå¶ï¼è¿è¡ **sudo useradd -m -s /bin/bash Username**
#### ç¨æ·å¯ç
ç³»ç»å®è£
好é»è®¤ç root ç¨æ·æ¯æ²¡æå¯ç çï¼éè¦ç» root 设置ä¸ä¸ªå¯ç **sudo passwd root**.
* æ®éç¨æ·ï¼**sudo passwd UserName**
* 管çåç¨æ·ï¼passwd [options] UserName
* -lï¼éå®å¯ç ï¼å³ç¦ç¨è´¦å·
* -uï¼å¯ç è§£é
* -dï¼ä½¿è´¦å·æ å¯ç
* -fï¼å¼ºè¿«ç¨æ·ä¸æ¬¡ç»å½æ¶ä¿®æ¹å¯ç
#### ç¨æ·æé
usermod å½ä»¤éè¿ä¿®æ¹ç³»ç»å¸æ·æä»¶æ¥ä¿®æ¹ç¨æ·è´¦æ·ä¿¡æ¯
ä¿®æ¹ç¨æ·è´¦å·å°±æ¯æ ¹æ®å®é
æ
嵿´æ¹ç¨æ·çæå
³å±æ§ï¼å¦ç¨æ·å·ã主ç®å½ãç¨æ·ç»ãç»å½ Shell ç
* æ®éç¨æ·ï¼sudo usermod [options] Username
* 管çåç¨æ·ï¼usermod [options] Username
* usermod **-l** newName Username
* -l æ°çç»å½åç§°
#### ç¨æ·å é¤
å é¤ç¨æ·è´¦å·å°±æ¯è¦å° /etc/passwd çç³»ç»æä»¶ä¸çè¯¥ç¨æ·è®°å½å é¤ï¼å¿
è¦æ¶è¿å é¤ç¨æ·ç主ç®å½
* æ®éç¨æ·ï¼sudo userdel [options] Username
* 管çåç¨æ·ï¼userdel [options] Username
* -fï¼å¼ºå¶å é¤ç¨æ·ï¼å³ä½¿ç¨æ·å½åå·²ç»å½
* -rï¼å é¤ç¨æ·çåæ¶ï¼å é¤ä¸ç¨æ·ç¸å
³çæææä»¶
***
### ç¨æ·ç»ç®¡ç
#### ç»ç®¡ç
æ·»å ç»ï¼**groupadd ç»å**
åå»ºç¨æ·çæ¶å å
¥ç»ï¼useradd -m -g ç»å ç¨æ·å
â
#### æ·»å ç¨æ·ç»
æ°å¢ä¸ä¸ªç¨æ·ç»ï¼ç»åå¯è§åç¥æï¼ç¬¦åè§èå³å¯ï¼ï¼ç¶åå°ç¨æ·æ·»å å°ç»ä¸ï¼éè¦ä½¿ç¨ç®¡çåæé
å½ä»¤ï¼groupadd [options] Groupname
* -g GID æå®æ°ç¨æ·ç»çç»æ è¯å·ï¼GIDï¼
* -o ä¸è¬ä¸ -g éé¡¹åæ¶ä½¿ç¨ï¼è¡¨ç¤ºæ°ç¨æ·ç»ç GID å¯ä»¥ä¸ç³»ç»å·²æç¨æ·ç»ç GID ç¸å
æ°å¢ç¨æ·ç» Seazeanï¼groupadd Seazean
#### ä¿®æ¹ç¨æ·ç»
éè¦ä½¿ç¨ç®¡çåæé
å½ä»¤ï¼groupmod [options] Groupname
- -g GID ä¸ºç¨æ·ç»æå®æ°çç»æ è¯å·ã
- -o ä¸ -g éé¡¹åæ¶ä½¿ç¨ï¼ç¨æ·ç»çæ° GID å¯ä»¥ä¸ç³»ç»å·²æç¨æ·ç»ç GID ç¸å
- -n æ°ç¨æ·ç» å°ç¨æ·ç»çååæ¹ä¸ºæ°åå
ä¿®æ¹ Seazean ç»å为 zhyï¼groupmod -n zhy Seazean
#### å é¤ç¨æ·ç»
* æ®éç¨æ·ï¼sudo groupdel Groupname
* 管çåç¨æ·ï¼groupdel Groupname
* -f ç¨æ·ç主ç»ä¹ç»§ç»å é¤
* -h æ¾ç¤ºå¸®å©ä¿¡æ¯
#### ç¨æ·æå±ç»
æ¥è¯¢ç¨æ·æå±ç»ï¼groups Username
æ¥çç¨æ·åç»ä¿¡æ¯ï¼id Username
åå»ºç¨æ·çæ¶å å
¥ç»ï¼useradd -m -g Groupname Username
ä¿®æ¹ç¨æ·æå±ç»ï¼usermod -g Groupname Username
usermod常ç¨é项ï¼
* -d ç¨æ·çæ°ä¸»ç®å½
* -l æ°çç»å½åç§°
#### gpasswd
gpasswd æ¯ Linux å·¥ä½ç»æä»¶ /etc/group å /etc/gshadow 管çå·¥å
·ï¼ç¨äºå°ä¸ä¸ªç¨æ·æ·»å å°ç»æä»ç»ä¸å é¤
å½ä»¤ï¼gpasswd é项 Username Groupname
* -a åç» GROUP 䏿·»å ç¨æ· USER
* -d ä»ç» GROUP 䏿·»å æå é¤ç¨æ·
**æ¥çç¨æ·ç»ä¸ææç¨æ·ï¼ææç¨æ·ï¼**ï¼grep 'Groupname' /etc/group
***
## ç³»ç»ç®¡ç
### man
卿§å¶å°è¾å
¥ï¼å½ä»¤å -h/ -help/ --h /空
å¯ä»¥çå°å½ä»¤çå¸®å©ææ¡£
**man** [æä»¤åç§°]ï¼æ¥çå¸®å©ææ¡£ï¼æ¯å¦ man lsï¼éåºæ¹å¼ q
***
### date
date å¯ä»¥ç¨æ¥æ¾ç¤ºæè®¾å®ç³»ç»çæ¥æä¸æ¶é´
å½ä»¤ï¼date [options]
* -d<å符串>ï¼æ¾ç¤ºå符串ææçæ¥æä¸æ¶é´ï¼å符串ååå¿
é¡»å ä¸åå¼å·ï¼
* -s<å符串>ï¼æ ¹æ®å符串æ¥è®¾ç½®æ¥æä¸æ¶é´ï¼å符串ååå¿
é¡»å ä¸åå¼å·
* -uï¼æ¾ç¤º GMT
* --versionï¼æ¾ç¤ºçæ¬ä¿¡æ¯
æ¥çæ¶é´ï¼date â 2020å¹´ 11æ 30æ¥ ææä¸ 17:10:54 CST
æ¥çæå®æ ¼å¼æ¶é´ï¼date "+%Y-%m-%d %H:%M:%S" â 2020-11-30 17:11:44
è®¾ç½®æ¥ææä»¤ï¼date -s â2019-12-23 19:21:00â
***
### id
id 伿¾ç¤ºç¨æ·ä»¥åæå±ç¾¤ç»çå®é
䏿æ IDï¼è¥ä¸¤ä¸ª ID ç¸ååä»
æ¾ç¤ºå®é
IDï¼è¥ä»
æå®ç¨æ·åç§°ï¼åæ¾ç¤ºç®åç¨æ·ç ID
å½ä»¤ï¼id [-gGnru] [--help] [--version] [ç¨æ·åç§°] //åæ°ç顺åº
- -g æ--groupï¼æ¾ç¤ºç¨æ·æå±ç¾¤ç»ç ID
- -G æ--groupsï¼æ¾ç¤ºç¨æ·æå±éå 群ç»ç ID
- -n æ--nameï¼æ¾ç¤ºç¨æ·ï¼æå±ç¾¤ç»æéå 群ç»çåç§°ã
- -r æ--realï¼æ¾ç¤ºå®é
ID
- -u æ--userï¼æ¾ç¤ºç¨æ· ID
> id å½ä»¤åæ°è½ç¶å¾å¤ï¼ä½æ¯å¸¸ç¨çæ¯ä¸å¸¦åæ°ç id å½ä»¤ï¼ä¸»è¦ç uid åç»ä¿¡æ¯
***
### sudo
sudoï¼æ§å¶ç¨æ·å¯¹ç³»ç»å½ä»¤çä½¿ç¨æéï¼éè¿ sudo å¯ä»¥æé«æ®éç¨æ·çæä½æé
- -V æ¾ç¤ºçæ¬ç¼å·
- -h 伿¾ç¤ºçæ¬ç¼å·åæä»¤çä½¿ç¨æ¹å¼è¯´æ
- -l æ¾ç¤ºåºèªå·±ï¼æ§è¡ sudo ç使ç¨è
ï¼çæé
- -command è¦ä»¥ç³»ç»ç®¡çè
èº«ä»½ï¼æä»¥ -u æ´æ¹ä¸ºå
¶ä»äººï¼æ§è¡çæä»¤
**sudo -u root command -l**ï¼æå® root ç¨æ·æ§è¡æä»¤ command
***
### top
topï¼ç¨äºå®æ¶æ¾ç¤º process ç卿
* -cï¼command 屿§è¿è¡äºå½ä»¤è¡¥å
¨
* -p è¿ç¨å·ï¼æ¾ç¤ºæå® pid çè¿ç¨ä¿¡æ¯
* -d ç§æ°ï¼è¡¨ç¤ºè¿ç¨ç颿´æ°æ¶é´ï¼æ¯å ç§å·æ°ä¸æ¬¡ï¼
* -H è¡¨ç¤ºçº¿ç¨æ¨¡å¼
`top -Hp è¿ç¨ id`ï¼åæè¯¥è¿ç¨å
å线ç¨ç CPU ä½¿ç¨æ
åµ

**åè¿ç¨ï¼ä»»å¡ï¼çç¶æçæ§å±æ§è§£é说æï¼**
* PID â è¿ç¨ id
* TID â çº¿ç¨ id
* USER â è¿ç¨ææè
* PR â è¿ç¨ä¼å
级
* NI â nice å¼ï¼è´å¼è¡¨ç¤ºé«ä¼å
çº§ï¼æ£å¼è¡¨ç¤ºä½ä¼å
级
* VIRT â è¿ç¨ä½¿ç¨çèæå
åæ»éï¼åä½ kbï¼VIRT=SWAP+RES
* RES â è¿ç¨ä½¿ç¨çãæªè¢«æ¢åºçç©çå
å大å°ï¼åä½ kbï¼RES=CODE+DATA
* SHR â å
±äº«å
å大å°ï¼åä½ kb
* S â è¿ç¨ç¶æï¼D=ä¸å¯ä¸æçç¡ç ç¶æ R=è¿è¡ S=ç¡ç T=è·è¸ª/忢 Z=åµå°¸è¿ç¨
* %CPU â 䏿¬¡æ´æ°å°ç°å¨ç CPU æ¶é´å ç¨ç¾åæ¯
* %MEM â è¿ç¨ä½¿ç¨çç©çå
åç¾åæ¯
* TIME+ â è¿ç¨ä½¿ç¨ç CPU æ¶é´æ»è®¡ï¼åä½ 1/100 ç§
* COMMAND â è¿ç¨åç§°ï¼å½ä»¤å/å½ä»¤è¡ï¼
***
### ps
Linux ç³»ç»ä¸æ¥çè¿ç¨ä½¿ç¨æ
åµçå½ä»¤æ¯ ps æä»¤
å½ä»¤ï¼ps
* -e: æ¾ç¤ºææè¿ç¨
* -f: å
¨æ ¼å¼
* a: æ¾ç¤ºç»ç«¯ä¸çææè¿ç¨
* u: ä»¥ç¨æ·çæ ¼å¼æ¥æ¾ç¤ºè¿ç¨ä¿¡æ¯
* x: æ¾ç¤ºåå°è¿è¡çè¿ç¨
* -Tï¼å¼å¯çº¿ç¨æ¥ç
* -pï¼æå®çº¿ç¨å·
ä¸è¬å¸¸ç¨æ ¼å¼ä¸º ps -ef æè
ps aux 两ç§ãæ¾ç¤ºçä¿¡æ¯å¤§ä½ä¸è´ï¼ç¥æåºå«ï¼
* å¦ææ³æ¥çè¿ç¨ç CPU å ç¨çåå
åå ç¨çï¼å¯ä»¥ä½¿ç¨ aux
* å¦ææ³æ¥çè¿ç¨çç¶è¿ç¨ ID å宿´ç COMMAND å½ä»¤ï¼å¯ä»¥ä½¿ç¨ ef
`ps -T -p
ä»å·¦è³å³ç¨ 0-9 è¿äºæ°åæ¥è¡¨ç¤ºï¼
* 第 0 ä½ç¡®å®æä»¶ç±»å
* 第 1-3 ä½ç¡®å®å±ä¸»æ¥æè¯¥æä»¶çæé
* 第 4-6 ä½ç¡®å®å±ç»æ¥æè¯¥æä»¶çæé
* 第 7-9 ä½ç¡®å®å
¶ä»ç¨æ·æ¥æè¯¥æä»¶çæé
***
#### æä»¶ä¿¡æ¯
对äºä¸ä¸ªæä»¶ï¼é½æä¸ä¸ªç¹å®çææè
ï¼ä¹å°±æ¯å¯¹è¯¥æä»¶å
·ææææçç¨æ·ï¼å±ä¸»ï¼ï¼è¿æè¿ä¸ªæä»¶æ¯å±äºåªä¸ªç»çï¼å±ç»ï¼
* æä»¶çãå±ä¸»ãæä¸å¥ãè¯»åæ§è¡æérwxã
* æä»¶çãå±ç»ãæä¸å¥ãè¯»åæ§è¡æérwxã

`ls -l` å¯ä»¥æ¥çæä»¶å¤¹ä¸æä»¶ç详ç»ä¿¡æ¯, ä»å·¦å°å³ 便¬¡æ¯:
- æéï¼A åºåï¼ï¼ 第ä¸ä¸ªåç¬¦å¦ææ¯ `d` 表示ç®å½
- ç¡¬é¾æ¥æ°ï¼B åºåï¼ï¼éä¿çè®²å°±æ¯æå¤å°ç§æ¹å¼, å¯ä»¥è®¿é®å½åç®å½åæä»¶
- å±ä¸»ï¼C åºåï¼ï¼æä»¶æ¯ææè
ãææ¯å«åå±ä¸»
- å±ç»ï¼D åºåï¼ï¼ æä»¶å±äºåªä¸ªç»
- 大å°ï¼E åºåï¼ï¼æä»¶å¤§å°
- æ¶é´ï¼F åºåï¼ï¼æå䏿¬¡è®¿é®æ¶é´
- åç§°ï¼G åºåï¼ï¼æä»¶çåç§°
***
#### æ´æ¹æé
##### æéæ¦è¿°
Linux æä»¶å±æ§æä¸¤ç§è®¾ç½®æ¹æ³ï¼ä¸ç§æ¯æ°åï¼ä¸ç§æ¯ç¬¦å·
Linux çæä»¶è°ç¨æéå为ä¸çº§ : æä»¶å±ä¸»ãå±ç»ãå
¶ä»ï¼å©ç¨ chmod å¯ä»¥æ§å¶æä»¶å¦ä½è¢«ä»äººæè°ç¨ã
```shell
chmod [-cfvR] [--help] [--version] mode file...
mode : æé设å®å串,æ ¼å¼: [ugoa...][[+-=][rwxX]...][,...]
```
* u 表示档æ¡çæ¥æè
ï¼g 表示ä¸è¯¥æ¡£æ¡æ¥æè
å±äºåä¸ä¸ª group è
ï¼o 表示å
¶ä»ç人ï¼a 表示è¿ä¸è
çæ¯
* +表示å¢å æéã- è¡¨ç¤ºåæ¶æéã= 表示å¯ä¸è®¾å®æé
* r 表示å¯è¯»åï¼w 表示å¯åå
¥ï¼x è¡¨ç¤ºå¯æ§è¡ï¼X è¡¨ç¤ºåªæè¯¥æ¡£æ¡æ¯ä¸ªåç®å½æè
该档æ¡å·²ç»è¢«è®¾å®è¿ä¸ºå¯æ§è¡
##### æ°åæé
å½ä»¤ï¼chmod [-R] xyz æä»¶æç®å½
- xyz : å°±æ¯ååæå°çæ°åç±»åçæé屿§ï¼ä¸º rwx 屿§æ°å¼çç¸å
- -R : è¿è¡éå½ï¼recursiveï¼çæç»åæ´ï¼äº¦å³è¿å次ç®å½ä¸çæææä»¶é½ä¼åæ´
æä»¶çæéå符为ï¼[-rwxrwxrwx]ï¼ è¿ä¹ä¸ªæéæ¯ä¸ä¸ä¸ç»çï¼æä»¬ä½¿ç¨æ°åæ¥ä»£è¡¨å个æé
åæéçæ°å对ç
§è¡¨ï¼[r]:4ã[w]:2ã[x]:1ã[-]:0
æ¯ç§èº«ä»½ï¼owner/group/othersï¼çä¸ä¸ªæéï¼r/w/xï¼åæ°æ¯éè¦ç´¯å çï¼ä¾å¦æé为ï¼[-rwxrwx---] åæ°æ¯
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= --- = 0+0+0 = 0
表示为ï¼`chmod -R 770 æä»¶å`
##### ç¬¦å·æé

- user å±ä¸»æé
- group å±ç»æé
- others å
¶ä»æé
- all å
¨é¨ç身份
æä»¬å°±å¯ä»¥ä½¿ç¨ **u g o a** æ¥ä»£è¡¨èº«ä»½çæéï¼è¯»åçæéå¯ä»¥åæ **r w x**
`chmod u=rwx,g=rx,o=r a.txt`ï¼å°as.txtçæé设置为 **-rwxr-xr--**
` chmod a-r a.txt`ï¼å°æä»¶çæææéå»é¤ **r**
***
#### æ´æ¹å±ç»
chgrp å½ä»¤ç¨äºåæ´æä»¶æç®å½çæå±ç¾¤ç»
æä»¶æç®å½æéççæ¥æè
ç±æå±ç¾¤ç»æ¥ç®¡çï¼å¯ä»¥ä½¿ç¨ chgrp æä»¤å»åæ´æä»¶ä¸ç®å½çæå±ç¾¤ç»
```shell
chgrp [-cfhRv][--help][--version][æå±ç¾¤ç»][æä»¶æç®å½...]
chgrp [-cfhRv][--help][--reference=<åèæä»¶æç®å½>][--version][æä»¶æç®å½...]
```
chgrp -v root aaaï¼å°æä»¶ aaa çå±ç»æ´æ¹æ rootï¼å
¶ä»ä¹å¯ä»¥ï¼
***
#### æ´æ¹å±ä¸»
å©ç¨ chown å¯ä»¥å°æ¡£æ¡çæ¥æè
å 以æ¹åã
ä½¿ç¨æé : 管çåè´¦æ·
```shell
chown [âR] å±ä¸»å æä»¶å
chown [-R] å±ä¸»å:å±ç»å æä»¶å
```
chown root aaaï¼å°æä»¶aaaçå±ä¸»æ´æ¹æroot
chown seazean:seazean aaaï¼å°æä»¶aaaçå±ä¸»åå±ç»æ´æ¹ä¸ºseazean
***
### æä»¶æä½
#### touch
touch å½ä»¤ç¨äºå建æä»¶ãä¿®æ¹æä»¶æè
ç®å½çæ¶é´å±æ§ï¼å
æ¬ååæ¶é´åæ´æ¹æ¶é´ãè¥æä»¶ä¸åå¨ï¼ç³»ç»ä¼å»ºç«ä¸ä¸ªæ°çæä»¶
```shell
touch [-acfm][-d<æ¥ææ¶é´>][-r<åèæä»¶æç®å½>] [-t<æ¥ææ¶é´>][--help][--version][æä»¶æç®å½â¦]
```
- -a æ¹åæ¡£æ¡çè¯»åæ¶é´è®°å½
- -m æ¹åæ¡£æ¡çä¿®æ¹æ¶é´è®°å½
- -c åå¦ç®çæ¡£æ¡ä¸åå¨ï¼ä¸ä¼å»ºç«æ°çæ¡£æ¡ãä¸ --no-create çææä¸æ ·
- -f ä¸ä½¿ç¨ï¼æ¯ä¸ºäºä¸å
¶ä» unix ç³»ç»çç¸å®¹æ§èä¿ç
- -r 使ç¨åèæ¡£çæ¶é´è®°å½ï¼ä¸ --file çææä¸æ ·
- -d è®¾å®æ¶é´ä¸æ¥æï¼å¯ä»¥ä½¿ç¨åç§ä¸åçæ ¼å¼
- -t è®¾å®æ¡£æ¡çæ¶é´è®°å½ï¼æ ¼å¼ä¸ date æä»¤ç¸å
- --no-create ä¸ä¼å»ºç«æ°æ¡£æ¡
- --help ååºæä»¤æ ¼å¼
- --version ååºçæ¬è®¯æ¯
`touch t.txt`ï¼å建 t.txt æä»¶
`touch t{1..10}.txt`ï¼å建10 个å为 t1.txt å° t10.txt ç空æä»¶
`touch t.txt`ï¼æ´æ¹ t.txt çè®¿é®æ¶é´ä¸ºç°å¨
#### stat
stat å½ä»¤ç¨äºæ¾ç¤º inode å
容
å½ä»¤ï¼stat [æä»¶æç®å½]
#### cat
cat æ¯ä¸ä¸ªææ¬æä»¶æ¥çåè¿æ¥å·¥å
·ï¼**ç¨äºå°æä»¶**
å½ä»¤ï¼cat [-AbeEnstTuv] [--help] [--version] Filename
* -n æ¾ç¤ºæä»¶å ä¸è¡å·
* -b å -n ç¸ä¼¼ï¼åªä¸è¿å¯¹äºç©ºç½è¡ä¸ç¼å·
#### less
less ç¨äºæ¥çæä»¶ï¼ä½æ¯ less 卿¥çä¹åä¸ä¼å è½½æ´ä¸ªæä»¶ï¼**ç¨äºå¤§æä»¶**
å½ä»¤ï¼less [options] Filename
* -N æ¾ç¤ºæ¯è¡è¡å·
#### tail
tail å½ä»¤å¯ç¨äºæ¥çæä»¶çå
å®¹ï¼æä¸ä¸ªå¸¸ç¨çåæ° **-f** 常ç¨äºæ¥é
æ£å¨æ¹åçæ¥å¿æä»¶
å½ä»¤ï¼tail [options] Filename
* -f 循ç¯è¯»å,卿æ¾ç¤ºææ¡£çæåå
容
* -n æ¾ç¤ºæä»¶çå°¾é¨ n è¡å
容
* -c æ¾ç¤ºåèæ°
* -nf æ¥çæåå è¡æ¥å¿ä¿¡æ¯
`tail -f filename`ï¼å¨ææ¾ç¤ºæå°¾é¨çå
容
`tail -n +2 txtfile.txt`ï¼æ¾ç¤ºæä»¶ txtfile.txt çå
容ï¼ä»ç¬¬ 2 è¡è³æä»¶æ«å°¾
`tail -n 2 txtfile.txt`ï¼æ¾ç¤ºæä»¶ txtfile.txt çå
å®¹ï¼æå 2 è¡
#### head
head å½ä»¤å¯ç¨äºæ¥çæä»¶çå¼å¤´é¨åçå
å®¹ï¼æä¸ä¸ªå¸¸ç¨çåæ° **-n** ç¨äºæ¾ç¤ºè¡æ°ï¼é»è®¤ä¸º 10
- -q éèæä»¶å
- -v æ¾ç¤ºæä»¶å
- -c æ¾ç¤ºçåèæ°
- -n æ¾ç¤ºçè¡æ°
`head -n Filename`ï¼æ¥çæä»¶çåä¸é¨å
`head -n 20 Filename`ï¼æ¥çæä»¶çå 20 è¡
#### grep
grep æä»¤ç¨äºæ¥æ¾å
容å
嫿å®çèæ¬æ ·å¼çæä»¶ï¼è¥ä¸æå®ä»»ä½æä»¶åç§°ï¼ææ¯æç»äºçæä»¶å为 -ï¼å grep æä»¤ä¼ä»æ åè¾å
¥è®¾å¤è¯»åæ°æ®
```shell
grep [-abcEFGhHilLnqrsvVwxy][-A<æ¾ç¤ºåæ°>][-B<æ¾ç¤ºåæ°>][-C<æ¾ç¤ºåæ°>][-d<è¿è¡å¨ä½>][-e<èæ¬æ ·å¼>][-f<èæ¬æä»¶>][--help][èæ¬æ ·å¼][æä»¶æç®å½...]
```
* -c åªè¾åºå¹é
è¡ç计æ°
* -i ä¸åºå大å°å
* -h æ¥è¯¢å¤æä»¶æ¶ä¸æ¾ç¤ºæä»¶å
* -l æ¥è¯¢å¤æä»¶æ¶åªè¾åºå
å«å¹é
å符çæä»¶å
* -n æ¾ç¤ºå¹é
è¡åè¡å·
* -s 䏿¾ç¤ºä¸å卿æ å¹é
ææ¬çé误信æ¯
* -v æ¾ç¤ºä¸å
å«å¹é
ææ¬çææè¡
* --color=auto å¯ä»¥å°æ¾å°çå
³é®è¯é¨åå ä¸é¢è²çæ¾ç¤º
**管é符 |**ï¼è¡¨ç¤ºå°åä¸ä¸ªå½ä»¤å¤ççç»æä¼ éç»åé¢çå½ä»¤å¤ç
* `grep aaaa Filename `ï¼æ¾ç¤ºåå¨å
³é®å aaaa çè¡
* `grep -n aaaa Filename`ï¼æ¾ç¤ºåå¨å
³é®å aaaa çè¡ï¼ä¸æ¾ç¤ºè¡å·
* `grep -i aaaa Filename`ï¼å¿½ç¥å¤§å°åï¼æ¾ç¤ºåå¨å
³é®å aaaa çè¡
* `grep -v aaaa Filename`ï¼æ¾ç¤ºåå¨å
³é®å aaaa çææè¡
* `ps -ef | grep sshd`ï¼æ¥æ¾å
å« sshd è¿ç¨çè¿ç¨ä¿¡æ¯
* ` ps -ef | grep -c sshd`ï¼æ¥æ¾ sshd ç¸å
³çè¿ç¨ä¸ªæ°
#### echo
å°å符串è¾åºå°æ§å¶å° , é常åéå®åèå使ç¨
å½ä»¤ï¼echo stringï¼å¦æå符串æç©ºæ ¼, 为äºé¿å
æ§ä¹ 请å¢å åå¼å· æè
åå¼å·
- éè¿ `å½ä»¤ > æä»¶` å°å½ä»¤çæåç»æè¦çæå®æä»¶å
容
- éè¿ `å½ä»¤ >> æä»¶` å°å½ä»¤çæåç»æè¿½å æå®æä»¶çåé¢
- éè¿ `å½ä»¤ &>> æä»¶` å° å½ä»¤çå¤±è´¥ç»æè¿½å æå®æä»¶çåé¢
`echo "ç¨åºå" >> a.txt`ï¼å°ç¨åºå追å å° a.txt åé¢
`cat ä¸åå¨çç®å½ &>> error.log`ï¼å°é误信æ¯è¿½å å° error.log æä»¶
#### awk
AWK æ¯ä¸ç§å¤çææ¬æä»¶çè¯è¨ï¼æ¯ä¸ä¸ªå¼ºå¤§çææ¬åæå·¥å
·
```shell
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
```
* -F fsï¼æå®è¾å
¥æä»¶æåé符ï¼fs æ¯ä¸ä¸ªå符串æè
æ¯ä¸ä¸ªæ£å表达å¼
* -vï¼var=value èµå¼ä¸ä¸ªç¨æ·å®ä¹åé
* -fï¼ä»èæ¬æä»¶ä¸è¯»å awk å½ä»¤
* $nï¼è·å**ç¬¬å æ®µ**å
容
* $0ï¼è·å**å½åè¡** å
容
* NFï¼è¡¨ç¤ºå½åè¡å
±æå¤å°ä¸ªå段
* $NFï¼ä»£è¡¨æåä¸ä¸ªå段
* $(NF-1)ï¼ä»£è¡¨åæ°ç¬¬äºä¸ªå段
* NRï¼ä»£è¡¨å¤ççæ¯ç¬¬å è¡
```sh
å½ä»¤ï¼awk 'BEGIN{åå§åæä½}{æ¯è¡é½æ§è¡} END{ç»ææ¶æä½}'
æä»¶åBEGIN{ è¿é颿¾çæ¯æ§è¡åçè¯å¥ }{è¿é颿¾çæ¯å¤çæ¯ä¸è¡æ¶è¦æ§è¡çè¯å¥}
END {è¿é颿¾çæ¯å¤ç宿æçè¡åè¦æ§è¡çè¯å¥ }
```
```a.txt
//å夿°æ®
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46
```
* `cat a.txt | awk '/zhang|li/'`ï¼æç´¢å«æ zhang å li çå¦çæç»©
* `awk "/zhang|li/" a.txt `ï¼åä¸ä¸ä¸ªå½ä»¤ï¼ææä¸æ ·
```
zhangsan 68 99 26
lisi 98 66 96
zhaoliu 78 44 36
```
* `cat a.txt | awk -F ' ' '{print $1,$2,$3}'`ï¼æç
§ç©ºæ ¼åå²ï¼æå° ä¸äºä¸åå
容
* `awk -F ' ' '{OFS="\t"}{print $1,$2,$3}'`ï¼æç
§å¶è¡¨ç¬¦ tab è¿è¡åå²ï¼æå°ä¸äºä¸å
\bï¼éæ ¼ \fï¼æ¢é¡µ \nï¼æ¢è¡ \rï¼å车 \tï¼å¶è¡¨ç¬¦
```
zhangsan 68 99
lisi 98 66
wangwu 38 33
zhaoliu 78 44
maq 88 22
zhouba 98 44
```
* `awk -F ',' '{print toupper($1)}' a.txt`ï¼æ ¹æ®éå·åå²ï¼æå°å
容ï¼ç¬¬ä¸æ®µå¤§å
| 彿°å | å«ä¹ | ä½ç¨ |
| --------- | ------ | -------------- |
| toupper() | upper | å符 转æ 大å |
| tolower() | lower | å符 转æå°å |
| length() | length | è¿å å符é¿åº¦ |
* `awk -F ' ' 'BEGIN{}{total=total+$4} END{print total}' a.txt`ï¼è®¡ç®çæ¯ç¬¬4åçæ»å
* `awk -F ' ' 'BEGIN{}{total=total+$4} END{print total, NR}' a.txt` ï¼æ¥çæ»å, æ»äººæ°
* `awk -F ' ' 'BEGIN{}{total=total+$4} END{print total, NR, (total/NR)}' a.txt`ï¼æ¥çæ»å, æ»äººæ°ï¼å¹³åæ°
* `cat a.txt | awk -F ' ' 'BEGIN{}{total=total+$4} END{print total}' `ï¼å¯ä»¥è¿æ ·å
#### find
find å½ä»¤ç¨æ¥å¨æå®ç®å½ä¸æ¥æ¾æä»¶ï¼å¦æä½¿ç¨è¯¥å½ä»¤ä¸è®¾ç½®ä»»ä½åæ°ï¼å°å¨å½åç®å½ä¸æ¥æ¾åç®å½ä¸æä»¶ï¼å¹¶ä¸å°æ¥æ¾å°çåç®å½åæä»¶å
¨é¨è¿è¡æ¾ç¤º
å½ä»¤ï¼find <æå®ç®å½> <æå®æ¡ä»¶> <æå®å
容>
* `find . -name "*.gz"`ï¼å°ç®åç®å½åå
¶åç®å½ä¸ææå»¶ä¼¸æ¡£åæ¯ gz çæä»¶æ¥è¯¢åºæ¥
* `find . -ctime -1`ï¼å°ç®åç®å½åå
¶åç®å½ä¸æææè¿ 1 天å
æ´æ°è¿çæä»¶æ¥è¯¢åºæ¥
* ` find / -name 'seazean'`ï¼å
¨å±æç´¢ seazean
#### read
read å½ä»¤ç¨äºä»æ åè¾å
¥è¯»åæ°å¼
```shell
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
```
#### sort
Linux sort å½ä»¤ç¨äºå°ææ¬æä»¶å
容å 以æåº
```sh
sort [-bcdfimMnr][æä»¶]
```
* -n ä¾ç
§æ°å¼ç大尿åº
* -r 以ç¸åçé¡ºåºæ¥æåºï¼sort é»è®¤çæåºæ¹å¼æ¯**ååº**ï¼æ¹æéåºï¼å -rï¼
* -u 廿éå¤
é¢è¯é¢ï¼ä¸åæ°åï¼è¾åºæå¤§ç 4 个ä¸éå¤çæ°
```sh
sort -ur a.txt | head -n 4
sort -r a.txt | uniq | head -n 4
```
#### uniq
uniq ç¨äºé夿°æ®å¤çï¼ä½¿ç¨åå
sort æåº
```sh
uniq [OPTION]... [INPUT [OUTPUT]]
```
* -c 卿°æ®è¡ååºç°ç次æ°
* -d åªæå°éå¤çè¡ï¼éå¤çè¡åªæ¾ç¤ºä¸æ¬¡
* -D åªæå°éå¤çè¡ï¼éå¤çè¡åºç°å¤å°æ¬¡å°±æ¾ç¤ºå¤å°æ¬¡
* -f 忽ç¥è¡é¦çå ä¸ªåæ®µ
* -i 忽ç¥å¤§å°å
* -s 忽ç¥è¡é¦çå ä¸ªåæ¯
* -u åªæå°å¯ä¸çè¡
* -w æ¯è¾ä¸è¶
è¿ n ä¸ªåæ¯
****
### æä»¶å缩
#### tar
tar ç主è¦åè½æ¯æå
ãå缩åè§£åæä»¶ï¼tar æ¬èº«ä¸å
·æå缩åè½ï¼æ¯è°ç¨å缩åè½å®ç°çã
å½ä»¤ï¼tar [å¿
è¦åæ°] [鿩忰] [æä»¶]
* -c 产ç .tar æä»¶
* -v æ¾ç¤ºè¯¦ç»ä¿¡æ¯
* -z æå
åæ¶å缩
* -f æå®å缩åçæä»¶å
* -x è§£å .tar æä»¶
* -t ååº tar æä»¶ä¸å
å«çæä»¶çä¿¡æ¯
* -r éå æ°çæä»¶å°taræä»¶ä¸
`tar -cvf txt.tar txtfile.txt `ï¼å° txtfile.txt æä»¶æå
ï¼ä»
æå
ï¼ä¸å缩ï¼
`tar -zcvf combine.tar.gz 1.txt 2.txt 3.txt`ï¼å° 123.txt æä»¶æå
å缩ï¼gzipï¼
`tar -ztvf txt.tar.gz`ï¼æ¥ç tar 䏿åªäºæä»¶
`tar -zxvf Filename -C ç®æ è·¯å¾`ï¼è§£å
#### gzip
gzipå½ä»¤ç¨äºå缩æä»¶ã
gzipæ¯ä¸ªä½¿ç¨å¹¿æ³çå缩ç¨åºï¼æä»¶ç»å®å缩è¿åï¼å
¶åç§°åé¢ä¼å¤åº".gz"çæ©å±å
* gzip * ï¼å缩ç®å½ä¸çæææä»¶ï¼å 餿ºæä»¶ã䏿¯æç´æ¥å缩ç®å½
* gzip -rv ç®å½åï¼éå½å缩ç®å½
* gzip -dv *ï¼è§£åæä»¶å¹¶ååºè¯¦ç»ä¿¡æ¯
#### gunzip
gunzipå½ä»¤ç¨äºè§£åæä»¶ãç¨äºè§£å¼è¢«gzipå缩è¿çæä»¶
å½ä»¤ï¼gunzip [options] [æä»¶æè
ç®å½]
gunzip 001.gz ï¼è§£å001.gzæä»¶
#### zip
zip å½ä»¤ç¨äºå缩æä»¶ã
zip æ¯ä¸ªä½¿ç¨å¹¿æ³çå缩ç¨åºï¼æä»¶ç»å®å缩åä¼å¦å¤äº§çå
·æ `.zip` æ©å±åçå缩æä»¶
å½ä»¤ï¼zip [å¿
è¦åæ°] [鿩忰] [æä»¶]
* -q 䏿¾ç¤ºæä»¤æ§è¡è¿ç¨
* -r éå½å¤çï¼å°æå®ç®å½ä¸çæææä»¶ååç®å½ä¸å¹¶å¤ç
`zip -q -r z.zip *`ï¼å°è¯¥ç®å½çæä»¶å
¨é¨å缩
#### unzip
unzip å½ä»¤ç¨äºè§£å缩 zip æä»¶ï¼unzip 为 `.zip` å缩æä»¶çè§£å缩ç¨åº
å½ä»¤ï¼unzip [å¿
è¦åæ°] [鿩忰] [æä»¶]
- -l æ¥çå缩æä»¶å
æå
å«çæä»¶
- -d<ç®å½> æå®æä»¶è§£å缩åæè¦åå¨çç®å½ã
`unzip -l z.zip` ï¼æ¥çå缩æä»¶ä¸å
å«çæä»¶
`unzip -d ./unFiles z.zip`ï¼ææä»¶è§£åå°æå®çç®å½ä¸
#### bzip2
bzip2 å½ä»¤æ¯ `.bz2` æä»¶çå缩ç¨åºã
bzip2 éç¨æ°çå缩æ¼ç®æ³ï¼åç¼©æææ¯ä¼ ç»ç LZ77/LZ78 å缩æ¼ç®æ³å¥½ï¼è¥ä¸å ä»»ä½åæ°ï¼bzip2 åç¼©å®æä»¶åä¼äº§ç .bz2 çå缩æä»¶ï¼å¹¶å é¤åå§çæä»¶
```sh
bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- å缩ç级][è¦å缩çæä»¶]
```
å缩ï¼bzip2 a.txt
#### bunzip2
bunzip2 å½ä»¤æ¯ `.bz2` æä»¶çè§£å缩ç¨åºã
å½ä»¤ï¼bunzip2 [-fkLsvV] [.bz2å缩æä»¶]
- -vãè§£å缩æä»¶æ¶ï¼æ¾ç¤ºè¯¦ç»çä¿¡æ¯ã
è§£åï¼bunzip2 -v a.bz2
***
### æä»¶ç¼è¾
#### Vim
vimï¼æ¯ä» vi åå±åºæ¥çä¸ä¸ªææ¬ç¼è¾å¨
* å½ä»¤æ¨¡å¼ï¼å¨ Linux ç»ç«¯ä¸è¾å
¥`vim æä»¶å` å°±è¿å
¥äºå½ä»¤æ¨¡å¼ï¼ä½ä¸è½è¾å
¥æå
* ç¼è¾æ¨¡å¼ï¼å¨å½ä»¤æ¨¡å¼ä¸æ `i` å°±ä¼è¿å
¥ç¼è¾æ¨¡å¼ï¼æ¤æ¶å¯ä»¥åå
¥ç¨å¼ï¼æ Esc å¯åå°å½ä»¤æ¨¡å¼
* æ«è¡æ¨¡å¼ï¼å¨å½ä»¤æ¨¡å¼ä¸æ `:` è¿å
¥æ«è¡æ¨¡å¼ï¼å·¦ä¸è§ä¼æä¸ä¸ªåå·ï¼å¯ä»¥æ²å
¥å½ä»¤å¹¶æ§è¡
#### æå¼æä»¶
Ubuntu é»è®¤æ²¡æå®è£
vimï¼éè¦å
å®è£
vimï¼å®è£
å½ä»¤ï¼**sudo apt-get install vim**
Vim æä¸ç§æ¨¡å¼ï¼å½ä»¤æ¨¡å¼ï¼Command modeï¼ãæå
¥æ¨¡å¼ï¼Insert modeï¼ãæ«è¡æ¨¡å¼ï¼Last Line modeï¼
| Vim 使ç¨çé项 | 说æ | å¸¸ç¨ |
| :---------------------: | :-------------------------------------------: | :--: |
| vim filename | æå¼ææ°å»ºä¸ä¸ªæä»¶ï¼å°å
æ ç½®äºç¬¬ä¸è¡é¦é¨ | å¸¸ç¨ |
| vim -r filename | æ¢å¤ä¸æ¬¡vimæå¼æ¶å´©æºçæä»¶ | |
| vim -R filename | ææå®çæä»¶ä»¥åªè¯»çæ¹å¼æ¾å
¥Vimç¼è¾å¨ | |
| vim + filename | æå¼æä»¶ï¼å°å
æ ç½®äºæåä¸è¡çé¦é¨ | å¸¸ç¨ |
| vim +n filename | æå¼æä»¶ï¼å°å
æ ç½®äºnè¡çé¦é¨ | å¸¸ç¨ |
| vim +/pattern filename | æå¼æä»¶ï¼å°å
æ ç½®äºç¬¬ä¸ä¸ªä¸patternå¹é
çä½ç½® | |
| vim -c command filename | 对æä»¶ç¼è¾åï¼å
æ§è¡æå®çå½ä»¤ | |
***
#### æå
¥æ¨¡å¼
å¨å½ä»¤æ¨¡å¼ä¸ï¼éè¿æä¸ iãIãaãAãoãO è¿ 6 ä¸ªåæ¯è¿å
¥æå
¥æ¨¡å¼
| å¿«æ·é® | åè½æè¿° |
| :----: | :------------------------------------------------------: |
| i | å¨å
æ æå¨ä½ç½®æå
¥ææ¬ï¼å
æ åçææ¬åå³ç§»å¨ |
| I | å¨å
æ æå¨è¡çè¡é¦æå
¥ææ¬ï¼è¡é¦æ¯è¯¥è¡ç第ä¸ä¸ªé空ç½å符 |
| o | å¨å
æ æå¨è¡çä¸é¢æå
¥æ°çä¸è¡ï¼å
æ åå¨ç©ºè¡é¦ |
| O | å¨å
æ æå¨è¡çä¸é¢æå
¥æ°çä¸è¡ï¼å
æ åå¨ç©ºè¡é¦ |
| a | å¨å
æ æå¨ä½ç½®ä¹åæå
¥ææ¬ |
| A | å¨å
æ æå¨è¡çè¡å°¾æå
¥ææ¬ |
æä¸ ESC é®ï¼ç¦»å¼æå
¥æ¨¡å¼ï¼è¿å
¥å½ä»¤æ¨¡å¼
å 为æä»¬æ¯ä¸ä¸ªç©ºæä»¶ï¼æä»¥ä½¿ç¨ãIãæè
ãiãé½å¯ä»¥
妿éé¢çææ¬å¾å¤ï¼è¦ä½¿ç¨ãAãè¿å
¥ç¼è¾æ¨¡å¼ï¼å³å¨è¡æ«æ·»å ææ¬
***
#### å½ä»¤æ¨¡å¼
Vim æå¼ä¸ä¸ªæä»¶ï¼æä»¶å¯ä»¥åå¨ï¼ä¹å¯ä»¥ä¸åå¨ï¼ï¼é»è®¤è¿å
¥å½ä»¤æ¨¡å¼ãå¨è¯¥æ¨¡å¼ä¸ï¼ è¾å
¥çå符ä¼è¢«å½åæä»¤ï¼èä¸ä¼è¢«å½åè¦è¾å
¥çæå
##### ç§»å¨å
æ
| å¿«æ·é® | åè½æè¿° |
| :----: | :----------------------------: |
| w | å
æ ç§»å¨è³ä¸ä¸ä¸ªåè¯çåè¯é¦ |
| b | å
æ ç§»å¨è³ä¸ä¸ä¸ªåè¯çåè¯é¦ |
| e | å
æ ç§»å¨è³ä¸ä¸ä¸ªåè¯çåè¯å°¾ |
| 0 | å
æ ç§»å¨è³å½åè¡çè¡é¦ |
| ^ | è¡é¦, 第ä¸ä¸ªä¸æ¯ç©ºç½å符çä½ç½® |
| $ | å
æ ç§»å¨è³å½åè¡çè¡å°¾ |
| gg | å
æ ç§»å¨è³æä»¶å¼å¤´ |
| G | å
æ ç§»å¨è³æä»¶æ«å°¾ |
| ngg | å
æ ç§»å¨è³ç¬¬nè¡ |
| nG | å
æ ç§»å¨è³ç¬¬nè¡ |
| :n | å
æ ç§»å¨è³ç¬¬nè¡ |
***
##### é䏿æ¬
å¨ vi/vim ä¸è¦éæ©ææ¬ï¼éè¦æ¾ç¤º visual å½ä»¤åæ¢å°**å¯è§æ¨¡å¼**
vi/vim 䏿ä¾äºä¸ç§å¯è§æ¨¡å¼ï¼æ¹ä¾¿ç¨åºåçéæ©**é䏿æ¬çæ¹å¼**
æ ESC å¯ä»¥æ¾å¼éä¸, è¿åå°**å½ä»¤æ¨¡å¼**
| å½ä»¤ | æ¨¡å¼ | åè½ |
| -------- | ---------- | ---------------------------------- |
| v | å¯è§æ¨¡å¼ | ä»å
æ ä½ç½®å¼å§æç
§æ£å¸¸æ¨¡å¼éæ©ææ¬ |
| V | å¯è§åæ¨¡å¼ | éä¸å
æ ç»è¿ç宿´è¡ |
| Ctrl + v | 坿¯åæ¨¡å¼ | åç´æ¹åéä¸ææ¬ |
##### æ¤éå é¤
å¨å¦ä¹ ç¼è¾å½ä»¤ä¹å,å
è¦ç¥éææ ·æ¤éä¹å䏿¬¡é误çç¼è¾æä½
| å½ä»¤ | è±æ | åè½ |
| -------- | ----- | ------------------------ |
| u | undo | æ¤é䏿¬¡çå½ä»¤(ctrl + z) |
| Ctrl + r | uredo | æ¢å¤æ¤éçå½ä»¤ |
å é¤çå
å®¹æ¤æ¶å¹¶æ²¡æçæ£ç被å é¤ï¼å¨åªåæ¿ä¸ï¼æä¸ p é®ï¼å¯ä»¥å°å é¤çå
容ç²è´´åæ¥
| å¿«æ·é® | åè½æè¿° |
| :----: | :--------------------------: |
| x | å é¤å
æ æå¨ä½ç½®çå符 |
| d | å é¤ç§»å¨å½ä»¤å¯¹åºçå
容 |
| dd | å é¤å
æ æå¨è¡çå
容 |
| D | å é¤å
æ ä½ç½®å°è¡å°¾çå
容 |
| :n1,n2 | å é¤ä» a1 å° a2 è¡çææ¬å
容 |
**å é¤å½ä»¤å¯ä»¥åç§»å¨å½ä»¤è¿ç¨, 以䏿¯å¸¸è§çç»åå½ä»¤(æ©å±):**
| å½ä»¤ | ä½ç¨ |
| ---- | ----------------------------------- |
| dw | å é¤ä»å
æ ä½ç½®å°åè¯æ«å°¾ |
| d} | å é¤ä»å
æ ä½ç½®å°æ®µè½æ«å°¾ |
| dG | å é¤å
æ æè¡å°æä»¶æ«å°¾çææå
容 |
| ndd | å é¤å½åè¡ï¼å
æ¬æ¤è¡ï¼å°å n è¡å
容 |
***
##### å¤å¶ç²è´´
vim 䏿便ä¸ä¸ª 被å¤å¶ææ¬çç¼å²åº
- å¤å¶å½ä»¤ä¼å°éä¸çæåä¿åå¨ç¼å²åº
- å é¤å½ä»¤å é¤çæåä¼è¢«ä¿åå¨ç¼å²åº
- å¨éè¦çä½ç½®ï¼ä½¿ç¨ç²è´´å½ä»¤å¯ä»¥å°ç¼å²å¯¹çæåæå
¥å°å
æ æå¨çä½ç½®
- vim ä¸çææ¬ç¼å²åºåªæä¸ä¸ªï¼å¦æåç»åè¿å¤å¶ãåªåæä½ï¼ä¹åç¼å²åºä¸çå
容ä¼è¢«æ¿æ¢
| å¿«æ·é® | åè½æè¿° |
| :----: | :--------------------------: |
| y | å¤å¶å·²éä¸çææ¬å°åªåæ¿ |
| yy | å°å
æ æå¨è¡å¤å¶å°åªåæ¿ |
| nyy | å¤å¶ä»å
æ æå¨è¡å°åä¸nè¡ |
| p | å°åªåæ¿ä¸çå
容ç²è´´å°å
æ å |
| P | å°åªåæ¿ä¸çå
容ç²è´´å°å
æ å |
注æï¼**vim ä¸çææ¬ç¼å²åºåç³»ç»çåªåæ¿ä¸æ¯åä¸ä¸ª**ï¼å¨å
¶ä»è½¯ä»¶ä¸ä½¿ç¨ Ctrl + C å¤å¶çå
容ï¼ä¸è½å¨ vim ä¸éè¿ `p` å½ä»¤ç²è´´ï¼å¯ä»¥å¨ç¼è¾æ¨¡å¼ä¸ä½¿ç¨é¼ æ å³é®ç²è´´
***
##### æ¥æ¾æ¿æ¢
æ¥æ¾
| å¿«æ·é® | åè½æè¿° |
| :----: | :--------------------------------------: |
| /abc | ä»å
æ æå¨ä½ç½®å忥æ¾å符串 abc |
| /^abc | æ¥æ¾ä»¥ abc 为è¡é¦çè¡ |
| /abc$ | æ¥æ¾ä»¥ abc 为è¡å°¾çè¡ |
| ?abc | ä»å
æ æå¨ä½ç½®å忥æ¾å符串 abc |
| * | å忥æ¾å½åå
æ æå¨åè¯ |
| # | å忥æ¾å½åå
æ æå¨åè¯ |
| n | æ¥æ¾ä¸ä¸ä¸ªï¼åå䏿¹åéå¤ä¸æ¬¡çæ¥æ¾æä»¤ |
| N | æ¥æ¾ä¸ä¸ä¸ªï¼åç¸åæ¹åéå¤ä¸æ¬¡çæ¥æ¾æä»¤ |
æ¿æ¢ï¼
| å½ä»¤ | åè½ | 工使¨¡å¼ |
| ---- | ---------------------- | -------- |
| r | æ¿æ¢å½åå符 | å½ä»¤æ¨¡å¼ |
| R | æ¿æ¢å½åè¡å
æ åçå符 | æ¿æ¢æ¨¡å¼ |
- å
æ éä¸è¦æ¿æ¢çå符
- `R` å½ä»¤å¯ä»¥è¿å
¥æ¿æ¢æ¨¡å¼ï¼æ¿æ¢å®æåï¼æä¸ ESC å¯ä»¥åå°å½ä»¤æ¨¡å¼
- æ¿æ¢å½ä»¤çä½ç¨å°±æ¯ä¸ç¨è¿å
¥ç¼è¾æ¨¡å¼ï¼å¯¹æä»¶è¿è¡è½»é级çä¿®æ¹
***
#### æ«è¡æ¨¡å¼
å¨å½ä»¤æ¨¡å¼ä¸ï¼æä¸ `:` é®è¿å
¥æ«è¡æ¨¡å¼
| å½ä»¤ | åè½æè¿° |
| :---------: | :---------------------------------------------------: |
| :wq | ä¿åå¹¶éåº Vim ç¼è¾å¨ |
| :wq! | ä¿å并强å¶éåº Vim ç¼è¾å¨ |
| :q | ä¸ä¿åä¸éåº Vim ç¼è¾å¨ |
| :q! | ä¸ä¿åä¸å¼ºå¶éåº Vim ç¼è¾å¨ |
| :w | ä¿å使¯ä¸éåº Vim ç¼è¾å¨ |
| :w! | 强å¶ä¿å使¯ä¸éåº Vim ç¼è¾å¨ |
| :w filename | å¦åå° filename æä»¶ |
| x! | ä¿åææ¬ï¼éåºä¿å使¯ä¸éåº Vim ç¼è¾å¨ï¼æ´éç¨çå½ä»¤ |
| ZZ | ç´æ¥éåºä¿å使¯ä¸éåº Vim ç¼è¾å¨ |
| :n | å
æ ç§»å¨è³ç¬¬ n è¡è¡é¦ |
#### å¼å¸¸å¤ç
* 妿 vim å¼å¸¸éåº, å¨ç£çä¸å¯è½ä¼ä¿åæ äº¤æ¢æä»¶
* 䏿¬¡åä½¿ç¨ vim ç¼è¾æä»¶æ¶ï¼ä¼çå°ä»¥ä¸å±å¹ä¿¡æ¯ï¼

* ls -a ä¸ä¸ï¼ä¼çå°éèç .swp æä»¶ï¼å é¤äºæ¤æä»¶å³å¯
***
### 龿¥
```sh
ln [-sf] source_filename dist_filename
```
* -sï¼é»è®¤æ¯å®ä½é¾æ¥ï¼å -s 为符å·é¾æ¥
* -fï¼å¦æç®æ æä»¶å卿¶ï¼å
å é¤ç®æ æä»¶
**å®ä½é¾æ¥**ï¼
* å¨ç®å½ä¸å建ä¸ä¸ªæ¡ç®ï¼è®°å½çæä»¶åä¸ inode ç¼å·ï¼è¿ä¸ª inode å°±æ¯æºæä»¶ç inode
* å é¤ä»»æä¸ä¸ªæ¡ç®ï¼æä»¶è¿æ¯åå¨ï¼åªè¦å¼ç¨æ°éä¸ä¸º 0
* ä¸è½è·¨è¶æä»¶ç³»ç»ãä¸è½å¯¹ç®å½è¿è¡é¾æ¥
```sh
ln /etc/crontab .
ll
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
```
**符å·é¾æ¥**ï¼
* 符å·é¾æ¥æä»¶ä¿åçæºæä»¶æå¨çç»å¯¹è·¯å¾ï¼å¨è¯»åæ¶ä¼å®ä½å°æºæä»¶ä¸ï¼å¯ä»¥ç解为 Windows çå¿«æ·æ¹å¼
* 彿ºæä»¶è¢«å é¤äºï¼é¾æ¥æä»¶å°±æä¸å¼äº
* è®°å½çæ¯è·¯å¾ï¼æä»¥å¯ä»¥ä¸ºç®å½å»ºç«ç¬¦å·é¾æ¥
```sh
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab
```
***
## è¿ç¨ç®¡ç
### æ¥çè¿ç¨
ps æä»¤ï¼æ¥çæä¸ªæ¶é´ç¹çè¿ç¨ä¿¡æ¯
top æä»¤ï¼å®æ¶æ¾ç¤ºè¿ç¨ä¿¡æ¯
pstreeï¼æ¥çè¿ç¨æ
```sh
pstree -A #æ¥çææè¿ç¨æ
```
***
### è¿ç¨ ID
è¿ç¨å·ï¼
* è¿ç¨å·ä¸º 0 çè¿ç¨é常æ¯è°åº¦è¿ç¨ï¼å¸¸å¸¸è¢«ç§°ä¸ºäº¤æ¢è¿ç¨ï¼swapperï¼ï¼è¯¥è¿ç¨æ¯å
æ ¸çä¸é¨åï¼å®å¹¶ä¸æ§è¡ä»»ä½ç£çä¸çç¨åºï¼å æ¤ä¹è¢«ç§°ä¸ºç³»ç»è¿ç¨
* è¿ç¨å·ä¸º 1 æ¯ init è¿ç¨ï¼æ¯ä¸ä¸ªå®æ¤è¿ç¨ï¼å¨èªä¸¾è¿ç¨ç»ææ¶ç±å
æ ¸è°ç¨ï¼init è¿ç¨ç»ä¸ä¼ç»æ¢ï¼æ¯ä¸ä¸ªæ®éçç¨æ·è¿ç¨ï¼ä½æ¯å®ä»¥è¶
çº§ç¨æ·ç¹æè¿è¡
ç¶è¿ç¨ ID 为 0 çè¿ç¨é常æ¯å
æ ¸è¿ç¨ï¼ä½ä¸ºç³»ç»**èªä¸¾è¿ç¨**çä¸é¨åèå¯å¨ï¼init è¿ç¨æ¯ä¸ªä¾å¤ï¼å®çç¶è¿ç¨æ¯ 0ï¼ä½å®æ¯ç¨æ·è¿ç¨
* 主å = RAM + BIOS é¨åç ROM
* DISKï¼åæ¾ OS å Bootloader
* BIOSï¼åºäº I/O å¤çç³»ç»
* Bootloaderï¼å è½½ OSï¼å° OS æ¾å
¥å
å
èªä¸¾ç¨åºåå¨å¨å
åä¸ ROMï¼**ç¨æ¥å è½½æä½ç³»ç»**ï¼åå§å CPUãå¯åå¨ãå
åçãCPU çç¨åºè®¡æ°å¨æèªä¸¾ç¨åºç¬¬ä¸æ¡æä»¤ï¼å½è®¡ç®æº**éçµ**ï¼CPU å¼å§è¯»åå¹¶æ§è¡èªä¸¾ç¨åºï¼å°æä½ç³»ç»ï¼ä¸æ¯å
¨é¨ï¼åªæ¯å¯å¨è®¡ç®æºçé£é¨åç¨åºï¼è£
å
¥ RAM ä¸ï¼è¿ä¸ªè¿ç¨æ¯èªä¸¾è¿ç¨ãè£
å
¥å®æåç¨åºè®¡æ°å¨è®¾ç½®ä¸º RAM 䏿ä½ç³»ç»ç**ç¬¬ä¸æ¡æä»¤**ï¼æ¥ä¸æ¥ CPU å°å¼å§æ§è¡ï¼å¯å¨ï¼æä½ç³»ç»çæä»¤
åå¨å¨ ROM ä¸ä¿çå¾å°çèªä¸¾è£
å
¥ç¨åºï¼å®æ´åè½çèªä¸¾ç¨åºä¿åå¨ç£ççå¯å¨åä¸ï¼å¯å¨åä½äºç£ççåºå®ä½ï¼æ¥æå¯å¨ååºçç£ç称为å¯å¨ç£çæç³»ç»ç£çï¼C çï¼
***
### è¿ç¨ç¶æ
| ç¶æ | 说æ |
| ---- | ------------------------------------------------------------ |
| R | running or runnable (on run queue) æ£å¨æ§è¡æè
坿§è¡ï¼æ¤æ¶è¿ç¨ä½äºæ§è¡éåä¸ |
| D | uninterruptible sleep (usually I/O) ä¸å¯ä¸æé»å¡ï¼é常为 IO é»å¡ |
| S | interruptible sleep (waiting for an event to complete) å¯ä¸æé»å¡ï¼æ¤æ¶è¿ç¨æ£å¨çå¾
æä¸ªäºä»¶å®æ |
| Z | zombie (terminated but not reaped by its parent) 嵿»ï¼è¿ç¨å·²ç»ç»æ¢ä½æ¯å°æªè¢«å
¶ç¶è¿ç¨è·åä¿¡æ¯ |
| T | stopped (either by a job control signal or because it is being traced) ç»æï¼è¿ç¨æ¢å¯ä»¥è¢«ä½ä¸æ§å¶ä¿¡å·ç»æï¼ä¹å¯è½æ¯æ£å¨è¢«è¿½è¸ª |
å¤å¿è¿ç¨ï¼
* ä¸ä¸ªç¶è¿ç¨éåºï¼èå®çä¸ä¸ªæå¤ä¸ªåè¿ç¨è¿å¨è¿è¡ï¼é£ä¹è¿äºåè¿ç¨å°æä¸ºå¤å¿è¿ç¨
* å¤å¿è¿ç¨å°è¢« init è¿ç¨ææ¶å
»ï¼å¹¶ç± init è¿ç¨å¯¹å®ä»¬å®æç¶ææ¶éå·¥ä½ï¼æä»¥å¤å¿è¿ç¨ä¸ä¼å¯¹ç³»ç»é æå±å®³
åµå°¸è¿ç¨ï¼
* ä¸ä¸ªåè¿ç¨çè¿ç¨æè¿°ç¬¦å¨åè¿ç¨éåºæ¶ä¸ä¼éæ¾ï¼åªæå½ç¶è¿ç¨éè¿ wait() æ waitpid() è·åäºåè¿ç¨ä¿¡æ¯åæä¼éæ¾ã妿åè¿ç¨éåºï¼èç¶è¿ç¨å¹¶æ²¡æè°ç¨ wait() æ waitpid()ï¼é£ä¹åè¿ç¨çè¿ç¨æè¿°ç¬¦ä»ç¶ä¿åå¨ç³»ç»ä¸ï¼è¿ç§è¿ç¨ç§°ä¹ä¸ºåµå°¸è¿ç¨
* åµå°¸è¿ç¨éè¿ ps å½ä»¤æ¾ç¤ºåºæ¥çç¶æä¸º Zï¼zombieï¼
* ç³»ç»æè½ä½¿ç¨çè¿ç¨å·æ¯æéçï¼äº§ç大éåµå°¸è¿ç¨ï¼ä¼å¯¼è´ç³»ç»æ²¡æå¯ç¨çè¿ç¨å·èä¸è½äº§çæ°çè¿ç¨
* è¦æ¶çç³»ç»ä¸å¤§éçåµå°¸è¿ç¨ï¼åªéè¦å°å
¶ç¶è¿ç¨ææ»ï¼æ¤æ¶åµå°¸è¿ç¨å°±ä¼åæå¤å¿è¿ç¨ï¼ä»è被 init è¿ç¨ææ¶å
»ï¼è¿æ · init è¿ç¨å°±ä¼éæ¾ææçåµå°¸è¿ç¨æå æçèµæºï¼ä»èç»æåµå°¸è¿ç¨
è¡¥å
ï¼
* 宿¤è¿ç¨(daemon)æ¯ä¸ç±»å¨åå°è¿è¡çç¹æ®è¿ç¨ï¼ç¨äºæ§è¡ç¹å®çç³»ç»ä»»å¡ã
* 宿¤è¿ç¨æ¯**è±ç¦»äºç»ç«¯**å¹¶ä¸å¨åå°è¿è¡çè¿ç¨ï¼è±ç¦»ç»ç«¯æ¯ä¸ºäºé¿å
卿§è¡çè¿ç¨ä¸çä¿¡æ¯å¨ç»ç«¯ä¸æ¾ç¤ºï¼å¹¶ä¸è¿ç¨ä¹ä¸ä¼è¢«ä»»ä½ç»ç«¯æäº§ççç»ç«¯ä¿¡æ¯æææ
* å¾å¤å®æ¤è¿ç¨å¨ç³»ç»å¼å¯¼çæ¶åå¯å¨ï¼å¹¶ä¸ä¸ç´è¿è¡ç´å°ç³»ç»å
³éï¼å¦ä¸äºåªå¨éè¦çæ¶åæå¯å¨ï¼å®æä»»å¡åå°±èªå¨ç»æ
***
### ç¶ææ¹å
#### SIGCHLD
å½ä¸ä¸ªåè¿ç¨æ¹åäºå®çç¶ææ¶ï¼åæ¢è¿è¡ï¼ç»§ç»è¿è¡æè
éåºï¼ï¼æä¸¤ä»¶äºä¼åçå¨ç¶è¿ç¨ä¸ï¼
- å¾å° SIGCHLD ä¿¡å·
- waitpid() æè
wait() è°ç¨ä¼è¿å
åè¿ç¨åéç SIGCHLD ä¿¡å·å
å«äºåè¿ç¨çä¿¡æ¯ï¼æ¯å¦è¿ç¨ IDãè¿ç¨ç¶æãè¿ç¨ä½¿ç¨ CPU çæ¶é´çï¼å¨åè¿ç¨éåºæ¶è¿ç¨æè¿°ç¬¦ä¸ä¼ç«å³éæ¾ï¼ç¶è¿ç¨éè¿ wait() å waitpid() æ¥è·å¾ä¸ä¸ªå·²ç»éåºçåè¿ç¨çä¿¡æ¯ï¼éæ¾åè¿ç¨ç PCB
***
#### wait
```c
pid_t wait(int *status)
```
åæ°ï¼status ç¨æ¥ä¿å被æ¶éçåè¿ç¨éåºæ¶çç¶æï¼å¦æä¸å
³å¿åè¿ç¨**å¦ä½**鿝ï¼å¯ä»¥è®¾ç½®è¿ä¸ªåæ°ä¸º NULL
ç¶è¿ç¨è°ç¨ wait() ä¼é»å¡çå¾
ï¼ç´å°æ¶å°ä¸ä¸ªåè¿ç¨éåºç SIGCHLD ä¿¡å·ï¼wait() 彿°å°±ä¼éæ¯åè¿ç¨å¹¶è¿å
* æåï¼è¿å被æ¶éçåè¿ç¨çè¿ç¨ ID
* 失败ï¼è¿å -1ï¼åæ¶ errno 被置为 ECHILDï¼å¦æè°ç¨è¿ç¨æ²¡æåè¿ç¨ï¼è°ç¨å°±ä¼å¤±è´¥ï¼
***
#### waitpid
```c
pid_t waitpid(pid_t pid, int *status, int options)
```
ä½ç¨å wait() å®å
¨ç¸åï¼åªæ¯å¤äºä¸¤ä¸ªå¯æ§å¶çåæ° pid å options
* pidï¼æç¤ºä¸ä¸ªåè¿ç¨ç IDï¼è¡¨ç¤ºåªå
³å¿è¿ä¸ªåè¿ç¨éåºç SIGCHLD ä¿¡å·ï¼å¦æ pid=-1 æ¶ï¼é£ä¹å wait() ä½ç¨ç¸åï¼é½æ¯å
³æ³¨ææåè¿ç¨éåºç SIGCHLD ä¿¡å·
* optionsï¼ä¸»è¦æ WNOHANG å WUNTRACED 两个ï¼WNOHANG å¯ä»¥ä½¿ waitpid() è°ç¨åæéé»å¡çï¼å°±æ¯ä¼ç«å³è¿åï¼ç¶è¿ç¨å¯ä»¥ç»§ç»æ§è¡å
¶å®ä»»å¡
***
## ç½ç»ç®¡ç
### network
+ å¯å¨ï¼service network start
+ 忢ï¼service network stop
+ éå¯ï¼service network restart
***
### ifconfig
ifconfig æ¯ Linux ä¸ç¨äºæ¾ç¤ºæé
ç½®ç½ç»è®¾å¤çå½ä»¤ï¼è±æå
¨ç§°æ¯ network interfaces configuring
ifconfig å½ä»¤ç¨äºæ¾ç¤ºæè®¾ç½®ç½ç»è®¾å¤ãifconfig å¯è®¾ç½®ç½ç»è®¾å¤çç¶æï¼ææ¯æ¾ç¤ºç®åç设置
```sh
ifconfig [ç½ç»è®¾å¤][down up -allmulti -arp -promisc][add<å°å>][del<å°å>][
ens33ï¼æ eth0ï¼è¡¨ç¤ºç¬¬ä¸åç½å¡ï¼IPå°åæ¯ 192.168.0.137ï¼å¹¿æå°å broadcast 192.168.0.255ï¼æ©ç å°ånetmask 255.255.255.0 ï¼inet6 对åºçæ¯ ipv6
lo æ¯è¡¨ç¤ºä¸»æºç**ååå°å**ï¼ç¨æ¥æµè¯ä¸ä¸ªç½ç»ç¨åºï¼ä½å䏿³è®©å±åç½æå¤ç½çç¨æ·è½å¤æ¥çï¼åªè½å¨æ¤å°ä¸»æºä¸è¿è¡åæ¥çæç¨çç½ç»æ¥å£
* ifconfig ens33 downï¼å
³éç½å¡
* ifconfig ens33 upï¼å¯ç¨ç½å¡
***
### ping
ping å½ä»¤ç¨äºæ£æµä¸»æº
æ§è¡ ping æä»¤ä¼ä½¿ç¨ ICMP ä¼ è¾åè®®ï¼ååºè¦æ±ååºçä¿¡æ¯ï¼è¥è¿ç«¯ä¸»æºçç½ç»åè½æ²¡æé®é¢ï¼å°±ä¼ååºè¯¥ä¿¡æ¯
```shell
ping [-dfnqrRv][-c<å®ææ¬¡æ°>][-i<é´éç§æ°>][-I<ç½ç»çé¢>][-l<å置载å
¥>][-p<èæ¬æ ·å¼>][-s<æ°æ®å
大å°>][-t<åæ´»æ°å¼>][主æºåç§°æIPå°å]
```
* -c<å®ææ¬¡æ°>ï¼è®¾ç½®å®æè¦æ±ååºç次æ°ï¼
* `ping -c 2 www.baidu.com`

icmp_seqï¼ping åºåï¼ä»1å¼å§
ttlï¼IP çåæ¶é´å¼
timeï¼ååºæ¶é´,æ°å¼è¶å°ï¼èéé度è¶å¿«
***
### netstat
netstat å½ä»¤ç¨äºæ¾ç¤ºç½ç»ç¶æ
```sh
netstat [-acCeFghilMnNoprstuvVwx][-A<ç½ç»ç±»å>][--ip]
```
- -a æ¾ç¤ºææè¿çº¿ä¸ç Socketï¼æ¾ç¤ºè¯¦ç»çè¿æ¥ç¶åµ
- -i æ¾ç¤ºç½ç»çé¢ä¿¡æ¯è¡¨åï¼æ¾ç¤ºç½å¡å表
- -p æ¾ç¤ºæ£å¨ä½¿ç¨ Socket çç¨åºè¯å«ç åç¨åºåç§°
- -n æ¾ç¤ºä½¿ç¨ IP å°åï¼èä¸éè¿ååæå¡å¨
- -t æ¾ç¤º TCP ä¼ è¾åè®®çè¿çº¿ç¶åµã
- -u æ¾ç¤º UDP ä¼ è¾åè®®çè¿çº¿ç¶åµ
- **-aptnï¼æ¥çææ TCP å¼å¯ç«¯å£**
- **-apunï¼æ¥çææ UDP å¼å¯ç«¯å£**
è¡¥å
ï¼
* netstat -apn | grep portï¼æ¥çæå®ç«¯å£å·
* lsof -i:port ï¼æ¥çæå®ç«¯å£å·
***
## ç£ç管ç
### æè½½æ¦å¿µ
å¨å®è£
Linux ç³»ç»æ¶è®¾ç«çå个ååºï¼å¦æ ¹ååºã/boot ååºç齿¯èªå¨æè½½çï¼ä¹å°±æ¯è¯´ä¸éè¦äººä¸ºæä½ï¼å¼æºå°±ä¼èªå¨æè½½ã使¯å
çãU ççåå¨è®¾å¤å¦æéè¦ä½¿ç¨ï¼å°±å¿
须人为çè¿è¡æè½½
å¨ Windows 䏿å
¥ U ç乿¯éè¦æè½½ï¼åé
ç符ï¼çï¼åªä¸è¿ Windows ä¸åé
ç符æ¯èªå¨çãå
¶å®æè½½å¯ä»¥ç解为 Windows å½ä¸çåé
ç符ï¼åªä¸è¿ Windows å½ä¸æ¯ä»¥è±æåæ¯ ABCD çä½ä¸ºç符ï¼è Linux æ¯æ¿ç³»ç»ç®å½ä½ä¸ºç符ï¼å½ç¶ Linux å½ä¸ä¹ä¸å«ç符ï¼èæ¯ç§°ä¸ºæè½½ç¹ï¼èæä¸ºååºæè
å
ççåå¨è®¾å¤åé
ä¸ä¸ªæè½½ç¹çè¿ç¨ç§°ä¸ºæè½½
Linux ä¸çæ ¹ç®å½ä»¥å¤çæä»¶è¦æ³è¢«è®¿é®ï¼éè¦å°å
¶å
³èå°æ ¹ç®å½ä¸çæä¸ªç®å½æ¥å®ç°ï¼è¿ç§å
³èæä½å°±æ¯æè½½ï¼è¿ä¸ªç®å½å°±æ¯æè½½ç¹ï¼è§£é¤æ¬¡å
³èå
³ç³»çè¿ç¨ç§°ä¹ä¸ºå¸è½½
æè½½ç¹çç®å½éè¦ä»¥ä¸å ä¸ªè¦æ±ï¼
* ç®å½è¦å
åå¨ï¼å¯ä»¥ç¨ mkdir å½ä»¤æ°å»ºç®å½
* æè½½ç¹ç®å½ä¸å¯è¢«å
¶ä»è¿ç¨ä½¿ç¨å°
* æè½½ç¹ä¸åææä»¶å°è¢«éè
***
### lsblk
lsblk å½ä»¤çè±ææ¯ list blockï¼å³ç¨äºååºææå¯ç¨å设å¤çä¿¡æ¯ï¼èä¸è¿è½æ¾ç¤ºä»ä»¬ä¹é´çä¾èµå
³ç³»ï¼ä½æ¯ä¸ä¼ååº RAM ççä¿¡æ¯
å½ä»¤ï¼lsblk [åæ°]
* `lsblk`ï¼ä»¥æ ç¶ååºææå设å¤

NAMEï¼è¿æ¯å设å¤å
MAJï¼MIN : æ¬æ æ¾ç¤ºä¸»è¦å次è¦è®¾å¤å·
RMï¼æ¬æ æ¾ç¤ºè®¾å¤æ¯å¦å¯ç§»å¨è®¾å¤ï¼å¨ä¸é¢è®¾å¤ sr0 ç RM å¼çäº 1ï¼è¿è¯´æä»ä»¬æ¯å¯ç§»å¨è®¾å¤
SIZEï¼æ¬æ ååºè®¾å¤ç容é大å°ä¿¡æ¯
ROï¼è¯¥é¡¹è¡¨æè®¾å¤æ¯å¦ä¸ºåªè¯»ï¼å¨æ¬æ¡ä¾ä¸ï¼ææè®¾å¤ç RO å¼ä¸º 0ï¼è¡¨æä»ä»¬ä¸æ¯åªè¯»ç
TYPEï¼æ¬æ æ¾ç¤ºåè®¾å¤æ¯å¦æ¯ç£çæç£çä¸çä¸ä¸ªååºã卿¬ä¾ä¸ï¼sda å sdb æ¯ç£çï¼è sr0 æ¯åªè¯»åå¨ï¼romï¼ã
MOUNTPOINTï¼æ¬æ æåºè®¾å¤æè½½çæè½½ç¹ã
* `lsblk -f`ï¼ä¸ä¼ååºææç©ºè®¾å¤

NAME表示设å¤åç§°
FSTYPE表示æä»¶ç±»å
LABELè¡¨ç¤ºè®¾å¤æ ç¾
UUID设å¤ç¼å·
MOUNTPOINT表示设å¤çæè½½ç¹
***
### df
df å½ä»¤ç¨äºæ¾ç¤ºç®åå¨ Linux ç³»ç»ä¸çæä»¶ç³»ç»çç£çä½¿ç¨æ
åµç»è®¡ã
å½ä»¤ï¼df [options]... [FILE]...
* -h 使ç¨äººç±»å¯è¯»çæ ¼å¼(é¢è®¾å¼æ¯ä¸å è¿ä¸ªé项ç...)
* --total è®¡ç®ææçæ°æ®ä¹å

第ä¸åæå®æä»¶ç³»ç»çåç§°ï¼ç¬¬äºåæå®ä¸ä¸ªç¹å®çæä»¶ç³»ç»ï¼1K æ¯ 1024 åè为åä½çæ»å®¹éï¼å·²ç¨åå¯ç¨åå嫿å®ç容éï¼æåä¸ä¸ªå·²ç¨åæå®ä½¿ç¨ç容éçç¾åæ¯ï¼æå䏿 æå®çæä»¶ç³»ç»çæè½½ç¹
****
### mount
mount å½ä»¤æ¯ç»å¸¸ä¼ä½¿ç¨å°çå½ä»¤ï¼å®ç¨äºæè½½ Linux ç³»ç»å¤çæä»¶
使ç¨è
æéï¼ææç¨æ·ï¼è®¾ç½®çº§å«çéè¦ç®¡çå
```sh
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
```
- -tï¼æå®æ¡£æ¡ç³»ç»çåæï¼é常ä¸å¿
æå®ãmount ä¼èªå¨éæ©æ£ç¡®çåæã
éè¿æè½½çæ¹å¼æ¥ç Linux CD/DVD å
é©±ï¼æ¥ç ubuntu-20.04.1-desktop-amd64.iso çæä»¶
* è¿å
¥ãèææºã--ã设置ãï¼è®¾ç½® CD/DVD çå
容ï¼ubuntu-20.04.1-desktop-amd64.iso
* å建æè½½ç¹ï¼æ³¨æï¼ä¸è¬ç¨æ·æ æ³æè½½ cdromï¼åªæ root ç¨æ·æå¯ä»¥æä½ï¼
`mkdir -p /mnt/cdrom `ï¼åæ¢å° root ä¸å建ä¸ä¸ªæè½½ç¹ï¼å
¶å®å°±æ¯å建ä¸ä¸ªç®å½ï¼
* å¼å§æè½½
`mount -t auto /dev/cdrom /mnt/cdrom`ï¼éè¿æè½½ç¹çæ¹å¼æ¥çä¸é¢çãISOæä»¶å
容ã

* æ¥çæè½½å
容ï¼`ls -l -a ./mnt/cdrom/`
* å¸è½½ cdromï¼`umount /mnt/cdrom/`
***
## é²ç«å¢
### æ¦è¿°
é²ç«å¢ææ¯æ¯éè¿ææºç»ååç±»ç¨äºå®å
¨ç®¡çä¸çéç软件å硬件设å¤ï¼å¸®å©è®¡ç®æºç½ç»äºå
¶å
ãå¤ç½ä¹é´æå»ºä¸éç¸å¯¹éç»çä¿æ¤å±éï¼ä»¥ä¿æ¤ç¨æ·èµæä¸ä¿¡æ¯å®å
¨æ§çä¸ç§ææ¯ãå¨é»è®¤æ
åµä¸ï¼Linux ç³»ç»çé²ç«å¢ç¶ææ¯æå¼ç
### ç¶æ
å¯å¨è¯æ³ï¼service name status
* æ¥çé²ç«å¢ç¶æï¼`service iptables status`
* 临æ¶å¼å¯ï¼`service iptables start`
* 临æ¶å
³éï¼`service iptables stop`
* 弿ºå¯å¨ï¼`chkconfig iptables on`
* 弿ºå
³éï¼`chkconfig iptables off`
### æ¾è¡
设置端å£é²ç«å¢æ¾è¡
* ä¿®æ¹é
ç½®æä»¶ï¼`vim /etc/sysconfig/iptables`
* æ·»å æ¾è¡ç«¯å£ï¼`-A INPUT -m state --state NEW -m tcp -p tcp --dport 端å£å· -j ACCEPT`
* éæ°å è½½é²ç«å¢è§åï¼`service iptables reload`
夿³¨ï¼é»è®¤æ
åµä¸ 22 端å£å·æ¯æ¾è¡ç
***
## Shell
### å
¥é¨
#### æ¦å¿µ
Shell èæ¬ï¼shell scriptï¼ï¼æ¯ä¸ç§ä¸º shell ç¼åçèæ¬ç¨åºï¼åç§° Shell å½ä»¤ç¨¿ãç¨åºåèæ¬ï¼æ¯ä¸ç§è®¡ç®æºç¨åºä½¿ç¨çææ¬æä»¶ï¼å
容ç±ä¸è¿ä¸²ç shell å½ä»¤ç»æï¼ç»ç± Unix Shell ç´è¯å
¶å
容åè¿ä½
Shell è¢«å½ææ¯ä¸ç§èæ¬è¯è¨æ¥è®¾è®¡ï¼å
¶è¿ä½æ¹å¼ä¸è§£éåè¯è¨ç¸å½ï¼ç± Unix shell æ®æ¼å½ä»¤è¡è§£éå¨çè§è²ï¼å¨è¯»å shell èæ¬ä¹åï¼ä¾åºè¿è¡å
¶ä¸ç shell å½ä»¤ï¼ä¹åè¾åºç»æ
#### ç¯å¢
Shell ç¼ç¨è· JavaScriptãphp ç¼ç¨ä¸æ ·ï¼åªè¦æä¸ä¸ªè½ç¼å代ç çææ¬ç¼è¾å¨åä¸ä¸ªè½è§£éæ§è¡çèæ¬è§£éå¨å°±å¯ä»¥äºã
`cat /etc/shells`ï¼æ¥çè§£éå¨

Linux ç Shell ç§ç±»ä¼å¤ï¼å¸¸è§çæï¼
- Bourne Shellï¼/usr/bin/shæ/bin/shï¼
- Bourne Again Shellï¼/bin/bashï¼ï¼Bash æ¯å¤§å¤æ°Linux ç³»ç»é»è®¤ç Shell
- C Shellï¼/usr/bin/cshï¼
- K Shellï¼/usr/bin/kshï¼
- Shell for Rootï¼/sbin/shï¼
- ççâ¦â¦
#### 第ä¸ä¸ªshell
* æ°å»º s.sh æä»¶ï¼touch s.sh
* ç¼è¾ s.sh æä»¶ï¼vim s.sh
```shell
#!/bin/bash --- æå®èæ¬è§£éå¨
echo "ä½ å¥½ï¼shell !" ---åçªå£è¾å
¥ææ¬
:<<!
åshellçä¹ æ¯ ç¬¬ä¸è¡æå®è§£éå¨
æä»¶æ¯sh为åç¼å
æ¬å·æå¯¹ä¹¦å
注éçæ¶åå°½éä¸ç¨ä¸ææ³¨éãä¸å好ã
[] æ¬å·ä¸¤ç«¯è¦è¦æç©ºæ ¼ã [ neirong ]
ä¹ æ¯ä»£ç ç´¢å¼ï¼å¢å é
读æ§
åè¯å¥çæ¶åï¼å°½éåå
¨äºï¼æ¯å¦ifããã
!
```
* æ¥ç s.shæä»¶ï¼ls -l s.shæä»¶æéæ¯ã-rw-rw-r--ã
* chmod a+x s.sh s.shæä»¶æéæ¯ã-rwxrwxr-xã
* æ§è¡æä»¶ï¼./s.sh
* æè
ç´æ¥ `bash s.sh`
**注æï¼**
**#!** æ¯ä¸ä¸ªçº¦å®çæ è®°ï¼åè¯ç³»ç»è¿ä¸ªèæ¬éè¦ä»ä¹è§£é卿¥æ§è¡ï¼å³ä½¿ç¨åªä¸ç§ Shell
echo å½ä»¤ç¨äºåçªå£è¾åºææ¬
***
### 注é
* åè¡æ³¨éï¼ä»¥ **#** å¼å¤´çè¡å°±æ¯æ³¨éï¼ä¼è¢«è§£éå¨å¿½ç¥
* å¤è¡æ³¨éï¼
```shell
:<
**æ°æ®å·**ï¼æ°æ®å·æ¯å®¿ä¸»æºä¸çä¸ä¸ªç®å½ææä»¶ï¼å½å®¹å¨ç®å½åæ°æ®å·ç®å½ç»å®åï¼å¯¹æ¹çä¿®æ¹ä¼ç«å³åæ¥
* ä¸ä¸ªæ°æ®å·å¯ä»¥è¢«å¤ä¸ªå®¹å¨åæ¶æè½½
* ä¸ä¸ªå®¹å¨ä¹å¯ä»¥è¢«æè½½å¤ä¸ªæ°æ®å·
æ°æ®å·çä½ç¨ï¼
* 容卿°æ®æä¹
å
* å¤é¨æºå¨å容å¨é´æ¥éä¿¡
* 容å¨ä¹é´æ°æ®äº¤æ¢
é
ç½®æ°æ®å·
* å建å¯å¨å®¹å¨æ¶ï¼ä½¿ç¨-våæ°è®¾ç½®æ°æ®å·
```sh
docker run ... âv 宿主æºç®å½(æä»¶):容å¨å
ç®å½(æä»¶) ...
docker run -it --name=c1 -v /root(or~)/data:/root/data_container centos:7
```
注æäºé¡¹ï¼
1. ç®å½å¿
é¡»æ¯ç»å¯¹è·¯å¾
2. 妿ç®å½ä¸åå¨ï¼ä¼èªå¨å建
3. å¯ä»¥æè½½å¤ä¸ªæ°æ®å·
å¤å®¹å¨è¿è¡æ°æ®äº¤æ¢ï¼
* å¤ä¸ªå®¹å¨æè½½åä¸ä¸ªæ°æ®å·
* æ°æ®å·å®¹å¨
* å建å¯å¨c3æ°æ®å·å®¹å¨ï¼ä½¿ç¨ âv åæ°è®¾ç½®æ°æ®å·
```sh
docker run âit --name=c3 âv /volume centos:7 /bin/bash
```
* å建å¯å¨ c1 c2 容å¨ï¼ä½¿ç¨ â-volumes-from åæ°è®¾ç½®æ°æ®å·
```sh
docker run âit --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run âit --name=c2 --volumes-from c3 centos:7 /bin/bash
```
***
## åºç¨é¨ç½²
### MySQL
å¨Docker容å¨ä¸é¨ç½²MySQLï¼éè¿å¤é¨mysql客æ·ç«¯æä½MySQL Server
ç«¯å£æ å°ï¼
* 容å¨å
çç½ç»æå¡åå¤é¨æºå¨ä¸è½ç´æ¥éä¿¡ï¼å¤é¨æºå¨å宿主æºå¯ä»¥ç´æ¥éä¿¡ï¼å®¿ä¸»æºå容å¨å¯ä»¥ç´æ¥éä¿¡
* å½å®¹å¨ä¸çç½ç»æå¡éè¦è¢«å¤é¨æºå¨è®¿é®æ¶ï¼å¯ä»¥å°å®¹å¨ä¸æä¾æå¡çç«¯å£æ å°å°å®¿ä¸»æºç端å£ä¸ãå¤é¨æºå¨è®¿é®å®¿ä¸»æºç该端å£ï¼ä»èé´æ¥è®¿é®å®¹å¨çæå¡ãè¿ç§æä½ç§°ä¸ºï¼**ç«¯å£æ å°**

MySQLé¨ç½²æ¥éª¤ï¼æç´¢mysqléåï¼æåmysqléåï¼å建容å¨ï¼æä½å®¹å¨ä¸çmysql
1. æç´¢mysqléå
```sh
docker search mysql
```
2. æåmysqléå
```mysql
docker pull mysql:5.6
```
3. å建容å¨ï¼è®¾ç½®ç«¯å£æ å°ãç®å½æ å°
```sh
# å¨/rootç®å½ä¸å建mysqlç®å½ç¨äºåå¨mysqlæ°æ®ä¿¡æ¯
mkdir ~/mysql
cd ~/mysql
```
```sh
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
```
åæ°è¯´æï¼
* `-p 3307:3306`ï¼å°å®¹å¨ç 3306 ç«¯å£æ å°å°å®¿ä¸»æºç 3307 端å£
* `-v $PWD/conf:/etc/mysql/conf.d`ï¼å°ä¸»æºå½åç®å½ä¸ç conf/my.cnf æè½½å°å®¹å¨ç /etc/mysql/my.cnfï¼é
ç½®ç®å½
* `-v $PWD/logs:/logs`ï¼å°ä¸»æºå½åç®å½ä¸ç logsç®å½æè½½å°å®¹å¨ç /logsï¼æ¥å¿ç®å½
* `-v $PWD/data:/var/lib/mysql` ï¼å°ä¸»æºå½åç®å½ä¸çdataç®å½æè½½å°å®¹å¨ç /var/lib/mysql ãæ°æ®ç®å½
* `-e MYSQL_ROOT_PASSWORD=123456`**ï¼**åå§å root ç¨æ·çå¯ç ã
4. è¿å
¥å®¹å¨ï¼æä½mysql
```sh
docker exec âit c_mysql /bin/bash
```
5. 使ç¨å¤é¨æºå¨è¿æ¥å®¹å¨ä¸çmysql
****
### Tomcat
1. æç´¢tomcatéå
```sh
docker search tomcat
```
2. æåtomcatéå
```sh
docker pull tomcat
```
3. å建容å¨ï¼è®¾ç½®ç«¯å£æ å°ãç®å½æ å°
```sh
# å¨/rootç®å½ä¸å建tomcatç®å½ç¨äºåå¨tomcatæ°æ®ä¿¡æ¯
mkdir ~/tomcat
cd ~/tomcat
```
```sh
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
```
åæ°è¯´æï¼
* `-p 8080:8080`ï¼å°å®¹å¨ç8080ç«¯å£æ å°å°ä¸»æºç8080端å£
* `-v $PWD:/usr/local/tomcat/webapps`ï¼å°ä¸»æºä¸å½åç®å½æè½½å°å®¹å¨çwebapps
4. 使ç¨å¤é¨æºå¨è®¿é®tomcat
***
### Nginx
1. æç´¢nginxéå
```sh
docker search nginx
```
2. æånginxéå
```sh
docker pull nginx
```
3. å建容å¨ï¼è®¾ç½®ç«¯å£æ å°ãç®å½æ å°
```sh
# å¨/rootç®å½ä¸å建nginxç®å½ç¨äºåå¨nginxæ°æ®ä¿¡æ¯
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# å¨~/nginx/conf/ä¸å建nginx.confæä»¶,ç²è´´ä¸é¢å
容
vim nginx.conf
```
```sh
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
```
```sh
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
```
åæ°è¯´æï¼
* `-p 80:80`ï¼å°å®¹å¨ç 80ç«¯å£æ å°å°å®¿ä¸»æºç 80 端å£
* `-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf`ï¼å°ä¸»æºå½åç®å½ä¸ç /conf/nginx.conf æè½½å°å®¹å¨ç :/etc/nginx/nginx.confï¼é
ç½®ç®å½
* `-v $PWD/logs:/var/log/nginx`ï¼å°ä¸»æºå½åç®å½ä¸ç logs ç®å½æè½½å°å®¹å¨ç/var/log/nginxï¼æ¥å¿ç®å½
4. 使ç¨å¤é¨æºå¨è®¿é®nginx
***
### Redis
1. æç´¢rediséå
```sh
docker search redis
```
2. æårediséå
```sh
docker pull redis:5.0
```
3. å建容å¨ï¼è®¾ç½®ç«¯å£æ å°
```sh
docker run -id --name=c_redis -p 6379:6379 redis:5.0
```
4. 使ç¨å¤é¨æºå¨è¿æ¥redis
```sh
./redis-cli.exe -h 192.168.149.135 -p 6379
```
***
## éååç
### åºå±åç
> Docker éåæ¬è´¨æ¯ä»ä¹ï¼
> Docker ä¸ä¸ä¸ªcentoséå为ä»ä¹åªæ200MBï¼èä¸ä¸ªcentosæä½ç³»ç»çisoæä»¶è¦å 个个Gï¼
> Docker ä¸ä¸ä¸ªtomcatéå为ä»ä¹æ500MBï¼èä¸ä¸ªtomcatå®è£
å
åªæ70å¤MBï¼
æä½ç³»ç»çç»æé¨åï¼è¿ç¨è°åº¦åç³»ç»ãè¿ç¨éä¿¡åç³»ç»ãå
å管çåç³»ç»ã设å¤ç®¡çåç³»ç»ãæä»¶ç®¡çåç³»ç»ãç½ç»éä¿¡åç³»ç»ãä½ä¸æ§å¶åç³»ç»
Linuxæä»¶ç³»ç»ç±bootfsårootfs两é¨åç»æï¼
* bootfsï¼å
å«bootloaderï¼å¼å¯¼å è½½ç¨åºï¼å kernelï¼å
æ ¸ï¼
* rootfsï¼ rootæä»¶ç³»ç»ï¼å
å«çå°±æ¯å
¸å Linux ç³»ç»ä¸ç/devï¼/procï¼/binï¼/etcçæ åç®å½åæä»¶
* ä¸åçlinuxåè¡çï¼bootfsåºæ¬ä¸æ ·ï¼èrootfsä¸åï¼å¦ubuntuï¼centos
Dockeréååçï¼
* Dockeré忝ä¸ä¸ª**åå±æä»¶ç³»ç»**ï¼æ¯ç±ç¹æ®çæä»¶ç³»ç»å å èæï¼æåºç«¯æ¯ bootfsï¼å¹¶å¤ç¨å®¿ä¸»æºçbootfs ï¼ç¬¬äºå±æ¯ rootæä»¶ç³»ç»rootfs称为base imageï¼ç¶ååå¾ä¸å¯ä»¥å å å
¶ä»çéåæä»¶
* ç»ä¸æä»¶ç³»ç»ï¼Union File Systemï¼ææ¯è½å¤å°ä¸åç屿´åæä¸ä¸ªæä»¶ç³»ç»ï¼ä¸ºè¿äºå±æä¾äºä¸ä¸ªç»ä¸çè§è§ï¼è¿æ ·å°±éèäºå¤å±çåå¨ï¼å¨ç¨æ·çè§åº¦çæ¥ï¼åªåå¨ä¸ä¸ªæä»¶ç³»ç»
* ä¸ä¸ªéåå¯ä»¥æ¾å¨å¦ä¸ä¸ªéåçä¸é¢ãä½äºä¸é¢çéå称为ç¶éåï¼æåºé¨çéåæä¸ºåºç¡éåã
* å½ä»ä¸ä¸ªéåå¯å¨å®¹å¨æ¶ï¼Dockerä¼å¨æé¡¶å±å è½½ä¸ä¸ªè¯»åæä»¶ç³»ç»ä½ä¸ºå®¹å¨
é®é¢ï¼
* Docker ä¸ä¸ä¸ªUbuntuéå为ä»ä¹åªæ200MBï¼èä¸ä¸ªUbuntuæä½ç³»ç»çisoæä»¶è¦å 个个Gï¼
Ubuntuçisoéåæä»¶å
å«bootfsårootfsï¼èdockerçUbuntuéåå¤ç¨æä½ç³»ç»çbootfsï¼åªærootfsåå
¶ä»éåå±
* Docker ä¸ä¸ä¸ªtomcatéå为ä»ä¹æ500MBï¼èä¸ä¸ªtomcatå®è£
å
åªæ70å¤MBï¼
ç±äºdockerä¸é忝åå±çï¼tomcatè½ç¶åªæ70å¤MBï¼ä½ä»éè¦ä¾èµäºç¶éåååºç¡éåï¼æææ´ä¸ªå¯¹å¤æ´é²çtomcatéå大å°500å¤MB
***
### éåå¶ä½

****
### Dockerfile
#### åºæ¬æ¦è¿°
Dockerfileæ¯ä¸ä¸ªææ¬æä»¶ï¼å
å«ä¸æ¡æ¡çæä»¤ï¼æ¯ä¸æ¡æä»¤æå»ºä¸å±ï¼åºäºåºç¡éåæç»æå»ºåºæ°çéå
* 对äºå¼å人åï¼å¯ä»¥ä¸ºå¼åå¢éæä¾ä¸ä¸ªå®å
¨ä¸è´çå¼åç¯å¢
* å¯¹äºæµè¯äººåï¼å¯ä»¥ç´æ¥æ¿å¼åæ¶ææå»ºçéåæè
éè¿Dockerfileæä»¶æå»ºä¸ä¸ªæ°çéåå¼å§å·¥ä½äº
* 对äºè¿ç»´äººåï¼å¨é¨ç½²æ¶ï¼å¯ä»¥å®ç°åºç¨çæ ç¼ç§»æ¤
| å
³é®å | ä½ç¨ | 夿³¨ |
| ----------- | ------------------------ | ------------------------------------------------------------ |
| FROM | æå®ç¶éå | æå®dockerfileåºäºé£ä¸ªimageæå»º |
| MAINTAINER | ä½è
ä¿¡æ¯ | ç¨æ¥æ æè¿ä¸ªdockerfileè°åç |
| LABEL | æ ç¾ | ç¨æ¥æ ædockerfileçæ ç¾ å¯ä»¥ä½¿ç¨Label代æ¿Maintainer æç»é½æ¯å¨docker imageåºæ¬ä¿¡æ¯ä¸å¯ä»¥æ¥ç |
| RUN | æ§è¡å½ä»¤ | æ§è¡ä¸æ®µå½ä»¤ é»è®¤æ¯/bin/sh æ ¼å¼: RUN command æè
RUN ["command" , "param1","param2"] |
| CMD | 容å¨å¯å¨å½ä»¤ | æä¾å¯å¨å®¹å¨æ¶åçé»è®¤å½ä»¤ åENTRYPOINTé
å使ç¨.æ ¼å¼ CMD command param1 param2 æè
CMD ["command" , "param1","param2"] |
| ENTRYPOINT | å
¥å£ | ä¸è¬å¨å¶ä½ä¸äºæ§è¡å°±å
³éç容å¨ä¸ä¼ä½¿ç¨ |
| COPY | å¤å¶æä»¶ | buildçæ¶åå¤å¶æä»¶å°imageä¸ |
| ADD | æ·»å æä»¶ | buildçæ¶åæ·»å æä»¶å°imageä¸ ä¸ä»
ä»
å±éäºå½åbuildä¸ä¸æ å¯ä»¥æ¥æºäºè¿ç¨æå¡ |
| ENV | ç¯å¢åé | æå®buildæ¶åçç¯å¢åé å¯ä»¥å¨å¯å¨ç容å¨çæ¶å éè¿-eè¦ç æ ¼å¼ENV name=value |
| ARG | æå»ºåæ° | æå»ºåæ° åªå¨æå»ºçæ¶å使ç¨çåæ° 妿æENV é£ä¹ENVçç¸åååçå¼å§ç»è¦çargçåæ° |
| VOLUME | å®ä¹å¤é¨å¯ä»¥æè½½çæ°æ®å· | æå®buildçimageé£äºç®å½å¯ä»¥å¯å¨çæ¶åæè½½å°æä»¶ç³»ç»ä¸ å¯å¨å®¹å¨çæ¶åä½¿ç¨ -v ç»å® æ ¼å¼ VOLUME ["ç®å½"] |
| EXPOSE | æ´é²ç«¯å£ | å®ä¹å®¹å¨è¿è¡çæ¶åçå¬çç«¯å£ å¯å¨å®¹å¨ç使ç¨-pæ¥ç»å®æ´é²ç«¯å£ æ ¼å¼: EXPOSE 8080 æè
EXPOSE 8080/udp |
| WORKDIR | å·¥ä½ç®å½ | æå®å®¹å¨å
é¨çå·¥ä½ç®å½ å¦ææ²¡æå建åèªå¨å建 妿æå®/ 使ç¨çæ¯ç»å¯¹å°å 妿䏿¯/å¼å¤´é£ä¹æ¯å¨ä¸ä¸æ¡workdirçè·¯å¾çç¸å¯¹è·¯å¾ |
| USER | æå®æ§è¡ç¨æ· | æå®buildæè
å¯å¨çæ¶å ç¨æ· å¨RUN CMD ENTRYPONTæ§è¡çæ¶åçç¨æ· |
| HEALTHCHECK | å¥åº·æ£æ¥ | æå®çæµå½å容å¨çå¥åº·çæµçå½ä»¤ åºæ¬ä¸æ²¡ç¨ å 为å¾å¤æ¶å åºç¨æ¬èº«æå¥åº·çæµæºå¶ |
| ONBUILD | 触åå¨ | å½åå¨ONBUILDå
³é®åçéåä½ä¸ºåºç¡éåçæ¶å 彿§è¡FROM宿ä¹å 伿§è¡ ONBUILDçå½ä»¤ 使¯ä¸å½±åå½åéå ç¨å¤ä¹ä¸æä¹å¤§ |
| STOPSIGNAL | åéä¿¡å·éå°å®¿ä¸»æº | 该STOPSIGNALæä»¤è®¾ç½®å°åéå°å®¹å¨çç³»ç»è°ç¨ä¿¡å·ä»¥éåºã |
| SHELL | æå®æ§è¡èæ¬çshell | æå®RUN CMD ENTRYPOINT æ§è¡å½ä»¤çæ¶å 使ç¨çshell |
#### Centos
èªå®ä¹centos7éåï¼
1. é»è®¤ç»å½è·¯å¾ä¸º /usr
2. å¯ä»¥ä½¿ç¨vim
å®ç°æ¥éª¤ï¼
1. å®ä¹ç¶éåï¼FROM centos:7
2. å®ä¹ä½è
ä¿¡æ¯ï¼MAINTAINER seazean < [email protected]>
3. æ§è¡å®è£
vimå½ä»¤ï¼ RUN yum install -y vim
4. å®ä¹é»è®¤çå·¥ä½ç®å½ï¼WORKDIR /usr
5. å®ä¹å®¹å¨å¯å¨æ§è¡çå½ä»¤ï¼CMD /bin/bash
6. éè¿dockerfileæå»ºéåï¼docker bulid âf dockerfileæä»¶è·¯å¾ ât éååç§°:çæ¬
#### Boot
å®ä¹dockerfileï¼åå¸springboot项ç®ï¼
å®ç°æ¥éª¤ï¼
1. å®ä¹ç¶éåï¼FROM java:8
2. å®ä¹ä½è
ä¿¡æ¯ï¼MAINTAINER seazean < [email protected]>
3. å°jarå
æ·»å å°å®¹å¨ï¼ ADD springboot.jar app.jar
4. å®ä¹å®¹å¨å¯å¨æ§è¡çå½ä»¤ï¼CMD javaâjar app.jar
5. éè¿dockerfileæå»ºéåï¼docker bulid âf dockerfileæä»¶è·¯å¾ ât éååç§°:çæ¬
***
## æå¡ç¼æ
### åºæ¬ä»ç»
å¾®æå¡æ¶æçåºç¨ç³»ç»ä¸ä¸è¬å
å«è¥å¹²ä¸ªå¾®æå¡ï¼æ¯ä¸ªå¾®æå¡ä¸è¬é½ä¼é¨ç½²å¤ä¸ªå®ä¾ï¼å¦ææ¯ä¸ªå¾®æå¡é½è¦æå¨å¯åï¼ç»´æ¤çå·¥ä½éä¼å¾å¤§ã
* ä»Dockerfile build image æè
å»dockerhubæåimageï¼
* å建å¤ä¸ªcontainerï¼ç®¡çè¿äºcontainerï¼å¯å¨åæ¢å é¤ï¼
**æå¡ç¼æ**ï¼æç
§ä¸å®çä¸å¡è§åæ¹é管ç容å¨
Docker Composeæ¯ä¸ä¸ªç¼æå¤å®¹å¨åå¸å¼é¨ç½²çå·¥å
·ï¼æä¾å½ä»¤é管ç容å¨ååºç¨ç宿´å¼å卿ï¼å
æ¬æå¡æå»ºï¼å¯å¨å忢ãä½¿ç¨æ¥éª¤ï¼
1. å©ç¨ Dockerfile å®ä¹è¿è¡ç¯å¢éå
2. ä½¿ç¨ docker-compose.yml å®ä¹ç»æåºç¨çåæå¡
3. è¿è¡ docker-compose up å¯å¨åºç¨

***
### åè½å®ç°
使ç¨docker composeç¼ænginx+springboot项ç®
1. å®è£
Docker Compose
2. å建docker-composeç®å½
```sh
mkdir ~/docker-compose
cd ~/docker-compose
```
3. ç¼å docker-compose.yml æä»¶
```sh
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
```
4. å建./nginx/conf.dç®å½
```sh
mkdir -p ./nginx/conf.d
```
5. å¨./nginx/conf.dç®å½ä¸ç¼å***.confæä»¶
```sh
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
```
6. å¨~/docker-compose ç®å½ä¸ä½¿ç¨docker-composeå¯å¨å®¹å¨
```sh
docker-compose up
```
7. æµè¯è®¿é®
```sh
http://192.168.0.137/hello
```
***
## ç§æä»åº
Docker宿¹çDocker hubï¼https://hub.docker.comï¼æ¯ä¸ä¸ªç¨äºç®¡çå
Œ
±éåçä»åºï¼æä»¬å¯ä»¥ä»ä¸é¢æåéå å°æ¬å°ï¼ä¹å¯ä»¥ææä»¬èªå·±çé忍éä¸å»ã使¯å½æå¡å¨æ æ³è®¿é®äºèç½ï¼æè
ä¸å¸æå°èªå·±çéåæ¾å°å
¬ç½å½ä¸ï¼é£ä¹æä»¬å°±éè¦æå»ºèªå·±çç§æä»åºæ¥åå¨å管çèªå·±çéå
* ç§æä»åºæå»º
```sh
# 1ãæåç§æä»åºéå
docker pull registry
# 2ãå¯å¨ç§æä»åºå®¹å¨
docker run -id --name=registry -p 5000:5000 registry
# 3ãè¾å
¥å°åhttp://ç§æä»åºæå¡å¨ip:5000/v2/_catalogï¼æ¾ç¤º{"repositories":[]}
# 4ãä¿®æ¹daemon.json Â
vim /etc/docker/daemon.json  Â
# å¨ä¸è¿°æä»¶ä¸æ·»å ä¸ä¸ªkeyï¼ä¿åéåºãæ¤æ¥ç¨äºè®© docker ä¿¡ä»»ç§æä»åºå°åï¼æ³¨æå°ç§æä»åºæå¡å¨ipä¿®æ¹ä¸ºèªå·±ç§æä»åºæå¡å¨çå®ip
{"insecure-registries":["192.168.0.137:5000"]}
# 5ãéå¯docker æå¡
systemctl restart docker
docker start registry
```
* å°éåä¸ä¼ è³ç§æä»åº
```sh
# 1ãæ è®°éåä¸ºç§æä»åºçéå  Â
docker tag centos:7 ç§æä»åºæå¡å¨IP:5000/centos:7
# 2ãä¸ä¼ æ è®°çéå  Â
docker push ç§æä»åºæå¡å¨IP:5000/centos:7
```
* ä»ç§æä»åºæåéå
```sh
#æåéå
docker pull ç§æä»åºæå¡å¨ip:5000/centos:7
```
***
## èææº
容å¨ï¼
* 容卿¯å°è½¯ä»¶æå
ææ åååå
ï¼ä»¥ç¨äºå¼åã交ä»åé¨ç½²
* 容å¨éåæ¯è½»éçã坿§è¡çç¬ç«è½¯ä»¶å
ï¼å
å«è½¯ä»¶è¿è¡æéçææå
容ï¼ä»£ç ãè¿è¡æ¶ç¯å¢ãç³»ç»å·¥å
·ãç³»ç»åºå设置
* 容å¨å软件å¨ä»»ä½ç¯å¢ä¸é½è½å¤å§ç»å¦ä¸å°è¿è¡ã
* 容å¨èµäºäºè½¯ä»¶ç¬ç«æ§ï¼ä½¿å
¶å
åå¤å¨ç¯å¢å·®å¼çå½±åï¼ä»èæå©äºåå°å¢éé´å¨ç¸ååºç¡è®¾æ½ä¸è¿è¡ä¸å软件æ¶çå²çª
容å¨åèææºå¯¹æ¯ï¼
* ç¸åï¼å®¹å¨åèææºå
·æç¸ä¼¼çèµæºé离ååé
ä¼å¿
* ä¸åï¼
* 容å¨èæåçæ¯æä½ç³»ç»ï¼èææºèæåçæ¯ç¡¬ä»¶ã
* ä¼ ç»èææºå¯ä»¥è¿è¡ä¸åçæä½ç³»ç»ï¼å®¹å¨åªè½è¿è¡åä¸ç±»åæä½ç³»ç»

| ç¹æ§ | å®¹å¨ | èææº |
| ---------- | ------------------ | ---------- |
| å¯å¨ | ç§çº§ | åé |
| 硬çä½¿ç¨ | ä¸è¬ä¸ºMB | ä¸è¬ä¸ºGB |
| æ§è½ | æ¥è¿åç | å¼±äºåç |
| ç³»ç»æ¯æé | åæºæ¯æä¸åä¸ªå®¹å¨ | ä¸è¬å å个 |