Linux 相關學習內容(不定期更新)
Linux 主要目錄
/ | 根目錄,在 linux 下有且只有一個根目錄,所有的東西都是從這裡開始 |
---|---|
/bin | 可執行二進位制檔案的目錄,如常用的命令,ls, tar, mv, cat.. |
/boot | 放置linux系統啟動時用到的檔案,linux的核心檔案/boot/vmlinuz,系引導管理器/boot/grub |
/dev | 存放linux系統下的裝置檔案,常用的是掛載光碟機 mount /dev/chrom /mnt /dev/ttl 表示終端 , /dev/null 表示無底洞垃圾桶 |
/etc | 系統配置檔案存放的目錄,不建議在此目錄下存放可執行檔案 |
/home | 使用者家目錄,每個使用者有自己的目錄 ~表示當前使用者的家目錄 |
/lib | 系統使用的函式庫的目錄,程式在執行過程中,需要呼叫一些額外的引數時需要函式庫協助 |
/lost+fount | 系統異常產生錯誤時,會將一些遺失的片段放置在此目錄下 |
/opt | 給主機額外安裝軟體所存放的目錄 |
/proc | 此目錄的資料都在記憶體中,如系統核心,外部裝置,網路狀態,由於資料都存放於記憶體中,所以不佔用磁碟空間,比較重要的檔案, 系統記憶體的對映目錄,提供核心和程式資訊有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等 |
/root | 系統管理員的家目錄 |
/sbin | 放置系統管理員使用的可執行命令,如:fdisk,shutdown, mount,與 /bin 不同的是,這幾個目錄是給系統管理員 root 使用的命令,一般使用者只能"檢視"而不能設定和使用 |
/tmp | 一般使用者或正在執行的程式臨時存放檔案的目錄,任何人都可以訪問,重要資料不可放置在此目錄下 |
/srv | 服務啟動之後需要訪問的資料目錄,如 www 服務需要訪問的網頁資料存放在 /srv/www 內 |
/usr | usr並不是user的縮寫,而是Unix Software Resource的縮寫,即“Unix 作業系統軟體資源”放在該目錄。這個目錄 相當於Windows作業系統的“C:\Windows\”和“C:\Program files\”這兩個目錄的綜合體 |
/var | 放置系統執行過程中經常變化的檔案 |
/usr/bin:存放應用程式
/usr/share:存放共享資料
/usr/lib:存放不能直接執行的,卻是許多程式執行所必需的一些函式庫檔案
/usr/local:存放軟體升級包
/usr/share/doc:系統說明檔案存放目錄
/usr/share/man:程式說明檔案存放目錄
/var/log:隨時更改的日誌檔案
/var/spool/mail:郵件存放的目錄
/var/run:程式或服務啟動後,其 PID 存放在該目錄下
常用Linux命令
序號 | 命令 | 對應英文 | 作用 |
---|---|---|---|
01 | ls | list | 檢視當前資料夾下的內容 |
02 | pwd | print wrok directory | 檢視當前所在資料夾 |
03 | cd [目錄名] | change directory | 切換資料夾 |
04 | touch [檔名] | touch | 如果檔案不存在,新建檔案 |
05 | mkdir [目錄名] | make directory | 建立目錄 |
06 | rm [檔名] | remove | 刪除指定的檔名 |
07 | clear | clear | 清屏 |
08 | which | which | 檢視命令位置,如果找到則顯示 which ls --> /bin/ls |
09 | who | who | 檢視當前所有登入系統的使用者資訊 |
10 | reboot | reboot | 重新啟動作業系統 |
11 | shutdown | shotdown | shotdown -r now 重新啟動作業系統,shutdown會給別的使用者提示 shutdown -h now 立刻關機,其中now相當於時間為0的狀態 shutdown -h 20:25 系統在今天的20:25 會關機 shutdown -h +10 系統再過十分鐘後自動關機 |
12 | wc | Word Count | - c 統計位元組數 - l 統計行數 - w 統計字數 |
13 | grep |
- 歸檔管理:tar
tar命令很特殊,其引數前面可以使用“-”,也可以不使用。
引數 | 含義 |
---|---|
-c | 生成檔案檔案,建立打包檔案 |
-v | 列出歸檔解檔的詳細過程,顯示進度 |
-f | 指定檔案檔名稱,f後面一定是.tar檔案,所以必須放選項最後 |
-t | 列出檔案中包含的檔案 |
-x | 解開檔案檔案 |
注意:除了f需要放在引數的最後,其它引數的順序任意。
C:\Users\asus\Desktop\review\testlinuk
λ tar -cvf test.tar *
1.txt
2.txt
3.txt
tes1/
tes2/
tes2/tes3/
C:\Users\asus\Desktop\review\testlinuk
λ ls
1.txt 2.txt 3.txt tes1/ tes2/ test.tar
C:\Users\asus\Desktop\review\testlinuk
λ rm *.txt
C:\Users\asus\Desktop\review\testlinuk
λ rm -r *[12]
C:\Users\asus\Desktop\review\testlinuk
λ ls
test.tar
C:\Users\asus\Desktop\review\testlinuk
λ tar -xvf test.tar
1.txt
2.txt
3.txt
tes1/
tes2/
tes2/tes3/
C:\Users\asus\Desktop\review\testlinuk
λ ls
1.txt 2.txt 3.txt tes1/ tes2/ test.tar
- 檔案解壓縮:gzip
tar與gzip命令結合使用實現檔案打包、壓縮。 tar只負責打包檔案,但不壓縮,用gzip壓縮tar打包後的檔案,其副檔名一般用xxxx.tar.gz
gzip [options] compressfile
選項 | 含義 |
---|---|
-d | 解壓 |
-r | 壓縮所有子目錄 |
tar這個命令並沒有壓縮的功能,它只是一個打包的命令,但是在tar命令中增加一個選項(-z)可以呼叫gzip實現了一個壓縮的功能,實行一個先打包後壓縮的過程。
tar -zcvf test.tar.gz * # 將當前目錄下的檔案以及資料夾打包並壓縮為test.tar.gz
- 檔案解壓縮:bzip2
tar與bzip2命令結合使用實現檔案打包、壓縮(用法和gzip一樣)。
tar只負責打包檔案,但不壓縮,用bzip2壓縮tar打包後的檔案,其副檔名一般用xxxx.tar.gz2。
在tar命令中增加一個選項(-j)可以呼叫bzip2實現了一個壓縮的功能,實行一個先打包後壓縮的過程。。
壓縮用法:tar -jcvf 壓縮包包名 檔案...(tar jcvf bk.tar.bz2 *.c)
解壓用法:tar -jxvf 壓縮包報名 (tar jxvf bk.tar.bz2)
- 修改檔案許可權:chmod
chmod 修改檔案許可權有兩種使用格式:字母法與數字法。
字母法:chmod u/g/o/a +/-/= rwx 檔案
[ u/g/o/a ] | 含義 |
---|---|
u | user 表示該檔案的所有者 |
g | group 表示與該檔案的所有者屬於同一組( group )者,即使用者組 |
o | other 表示其他以外的人 |
a | all 表示這三者皆是 |
[ +-= ] | 含義 |
---|---|
+ | 增加許可權 |
- | 撤銷許可權 |
= | 設定許可權 |
rwx | 含義 |
---|---|
r | read 表示可讀取,對於一個目錄,如果沒有r許可權,那麼就意味著不能通過ls檢視這個目錄的內容。 |
w | write 表示可寫入,對於一個目錄,如果沒有w許可權,那麼就意味著不能在目錄下建立新的檔案。 |
x | excute 表示可執行,對於一個目錄,如果沒有x許可權,那麼就意味著不能通過cd進入這個目錄。 |
數字法:“rwx” 這些許可權也可以用數字來代替
字母 | 說明 |
---|---|
r | 讀取許可權,數字代號為 "4" |
w | 寫入許可權,數字代號為 "2" |
x | 執行許可權,數字代號為 "1" |
- | 不具任何許可權,數字代號為 "0" |
如執行:chmod u=rwx,g=rx,o=r filename 就等同於:chmod u=7,g=5,o=4 filename
注意:如果想遞迴所有目錄加上相同許可權,需要加上引數“ -R ”。 如:chmod 777 test/ -R 遞迴 test 目錄下所有檔案加 777 許可權
windows 遞迴修改檔案許可權: Icacls ${dirName} /grant ${userName}:F
賦予test使用者d:/workspace目錄下所有檔案的完全訪問許可權
Icacls d:/workspace /grant test:F
- grep (Global Regular Expression Print)
Linux系統中grep命令是一種強大的文字搜尋工具,grep允許對文字檔案進行模式查詢。如果找到匹配模式, grep列印包含模式的所有行。每日一個linux-grep
選項 | 含義 |
---|---|
-v | 顯示不包含匹配文字的所有行(相當於求反) |
-n | 顯示匹配行及行號 |
-i | 忽略大小寫 |
-c | 輸出匹配到的個數 |
-n | 輸出匹配內容,同時顯示行數 |
-v | 輸出除匹配外的內容 |
λ cat -n 1.txt
1 sdfsdfsdfsd
2 sdfsdfs
3 sdfsdf
4 sfsd
5 asaa
6 aaa
7
8 AAA
9 CBB
10 CCC
11 CBB
12 1df
13 sdfsd
14 EOF
15 jsldf
C:\Users\asus\Desktop\review\testlinuk
λ ls
1.txt 2.txt 3.txt tes1/ tes2/ test.tart.gz
C:\Users\asus\Desktop\review\testlinuk
λ grep -c sdf 1.txt
4
C:\Users\asus\Desktop\review\testlinuk
λ grep -n sdf 1.txt
1: sdfsdfsdfsd
2: sdfsdfs
3: sdfsdf
13:sdfsd
- **ps ** Process Status
linux上程式有5種狀態:
執行(正在執行或在執行佇列中等待)
中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號)
不可中斷(收到訊號不喚醒和不可執行, 程式必須等待直到有中斷髮生)
僵死(程式已終止, 但程式描述符存在, 直到父程式呼叫wait4()系統呼叫後釋放)
停止(程式收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU訊號後停止執行執行)
ps工具標識程式的5種狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 執行 runnable (on run queue)
S 中斷休眠 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
常用引數
a | 顯示所有程式 |
---|---|
-a | 顯示同一終端下的所有程式 |
-A | 顯示所有程式 |
c | 顯示程式的真實名字 |
-e | 等於-A |
e | 顯示環境變數 |
f | 顯示程式間的關係 |
-H | 顯示樹狀結構 |
-aux | 顯示所有包含其他使用者的程式 |
[[email protected] test6]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 17398 17394 0 75 0 - 16543 wait pts/0 00:00:00 bash
4 R 0 17469 17398 0 77 0 - 15877 - pts/0 00:00:00 ps
列出目前所有的正在記憶體當中的程式
ps aux
[email protected] test6]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3]
root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0]
root 3 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/1]
root 5 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? S< Nov02 29:57 [events/0]
root 7 0.0 0.0 0 0 ? S< Nov02 0:00 [events/1]
- USER:該 process 屬於那個使用者賬號的
- PID :該 process 的號碼
- %CPU:該 process 使用掉的 CPU 資源百分比
- %MEM:該 process 所佔用的實體記憶體百分比
- VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)
- RSS :該 process 佔用的固定的記憶體量 (Kbytes)
- TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程式,若為 pts/0 等等的,則表示為由網路連線進主機的程式。
- STAT:該程式目前的狀態,主要的狀態有
- R :該程式目前正在運作,或者是可被運作
- S :該程式目前正在睡眠當中 (可說是 idle 狀態),但可被某些訊號 (signal) 喚醒。
- T :該程式目前正在偵測或者是停止了
- Z :該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀態
- START:該 process 被觸發啟動的時間
- TIME :該 process 實際使用 CPU 運作的時間
- COMMAND:該程式的實際指令
有一個指令碼執行時間可能超過2天,如何做才能使其不間斷的執行,而且還可以隨時觀察指令碼執行時的輸出資訊?
答:使用screen工具
- awk 參考阮一峰-awk 入門教程
awk
是處理文字檔案的一個應用程式,幾乎所有 Linux 系統都自帶這個程式。
它依次處理檔案的每一行,並讀取裡面的每一個欄位。對於日誌、CSV 那樣的每行格式相同的文字檔案,awk
可能是最方便的工具, awk
其實不僅僅是工具軟體,還是一種程式語言
# 格式
$ awk 動作 檔名
# 示例
$ awk '{print $0}' demo.txt
demo.txt
是awk
所要處理的文字檔案。前面單引號內部有一個大括號,裡面就是每一行的處理動作print $0
。其中,print
是列印命令,$0
代表當前行,因此上面命令的執行結果,就是把每一行原樣打印出來
變數
$ + 數字
表示某個欄位
變數NF
表示當前行有多少個欄位,因此$NF
就代表最後一個欄位。
$ echo 'this is a test' | awk '{print $NF}'
test
變數NR
表示當前處理的是第幾行。
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync
條件
$ awk '條件 動作' 檔名
$ awk -F ':' '/usr/ {print $1}' demo.txt
root
daemon
bin
sys
print
命令前面是一個正則表示式,只輸出包含usr
的行
# 輸出奇數行
$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
root
bin
sync
輸出第一個欄位的第一個字元大於m
的行,否則輸出‘---’
$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
root
---
---
sys
sync
檢視特定IP的日誌
cat ip.log | awk -F '\t' '($1~/112.15.5.36/){print $0}'
檢視訪問量前10的IP
awk '{print &1}' 17.log | sort | uniq -c | sort -nr | head -n 10
[linux下使用awk命令按時間段篩選日誌](https://segmentfault.com/a/1190000011626977)
參考awk 常用命令
- sed命令
sed行檔案編輯命令,編輯檔案以行為單位
sed [引數] '[動作]<匹配條件>' [檔名]
- -i 標識對檔案進行行編輯
- a\ 在匹配到的內容下一行增加內容
sed -i 3a\nihao hello world test.txt
- i\ 在匹配到的內容上一行增加內容
- d 刪除匹配到的內容
- s 替換匹配到的內容
- 住:上面的動作只有在加上引數-i的時候才會生效
命令格式:
sed -i '行號s#原內容#替換後的內容#列號' # 只替換第一個匹配到的項,替換所有內容在尾部加g
sed -n '5,10p' mywork.log
檢視5行到10行的日誌。
網路相關
使用iptables 寫一條規則:把來源IP為192.168.1.101訪問本機80埠的包直接拒絕
iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT
要想把iptable的規則儲存到一個檔案中如何做?如何恢復?
iptables-save > 1.ipt
使用iptables-restore反重定向回來:
iptables-restore < 1.ipt
rsync 同步命令中,下面兩種方式有什麼不同呢?
(1) rsync -av /dira/ ip:/dirb/ #通過ssh方式同步
(2) rsync -av /dira/ ip::dirb #通過rsync服務的方式同步
rsync 同步時,如果要同步的源中有軟連線,如何把軟連線的目標檔案或者目錄同步?
答:同步原始檔需要加-L選項
rsync 同步資料時,如何過濾出所有.txt的檔案不同步?
答:加上--exclude選項:
--exclude=“*.txt”
rsync同步資料時,如果目標檔案比原始檔還新,則忽略該檔案,如何做?
答:保留更新使用-u或者--update選項
使用rsync同步資料時,假如我們採用的是ssh方式,並且目標機器的sshd埠並不是預設的22埠,那我們如何做?
rsync "--rsh=ssh -p 10022"或者rsync -e "ssh -p 10022"
rsync同步時,如何刪除目標資料多出來的資料,即源上不存在,但目標卻存在的檔案或者目錄?
答:加上--delete選項
有一天你突然發現公司網站訪問速度變的很慢很慢,你該怎麼辦呢?
(伺服器可以登陸,提示:你可以從系統負載和網路卡流量入手)
答:可以從兩個方面入手分析:分析系統負載,使用w命令或者uptime命令檢視系統負載,如果負載很高,則使用top命令檢視CPU,MEM等佔用情況,要麼是CPU繁忙,要麼是記憶體不夠,如果這二者都正常,再去使用sar命令分析網路卡流量,分析是不是遭到了攻擊。一旦分析出問題的原因,採取對應的措施解決,如決定要不要殺死一些程式,或者禁止一些訪問等。
在Linux下如何指定dns伺服器,來解析某個域名?
# 使用dig命令:dig @DNSip http://domain.com
dig @8.8.8.8 www.baidu.com#使用谷歌DNS解析百度
$ tcpdump -i eth0 -nn -s0 -v port 80 -w test.pcap
-i : 選擇要捕獲的介面,通常是乙太網絡卡或無線網路卡,也可以是
vlan
或其他特殊介面。如果該系統上只有一個網路介面,則無需指定。-nn : 單個 n 表示不解析域名,直接顯示 IP;兩個 n 表示不解析域名和埠。這樣不僅方便檢視 IP 和埠號,而且在抓取大量資料時非常高效,因為域名解析會降低抓取速度。
-s0 : tcpdump 預設只會擷取前
96
位元組的內容,要想擷取所有的報文內容,可以使用-s number
,number
就是你要擷取的報文位元組數,如果是 0 的話,表示擷取報文全部內容。-v : 使用
-v
,-vv
和-vvv
來顯示更多的詳細資訊,通常會顯示更多與特定協議相關的資訊。port 80
: 這是一個常見的埠過濾器,表示僅抓取80
埠上的流量,通常是 HTTPhost 10.10.1.1
: host過濾器, 抓取特定目的地和源IP地址的流量,也可以使用src
或dst
只抓取源或目的地-w: 把資料報文輸出到檔案
-p : 不讓網路介面進入混雜模式。預設情況下使用 tcpdump 抓包時,會讓網路介面進入混雜模式。一般計算機網路卡都工作在非混雜模式下,此時網路卡只接受來自網路埠的目的地址指向自己的資料。當網路卡工作在混雜模式下時,網路卡將來自介面的所有資料都捕獲並交給相應的驅動程式。如果裝置接入的交換機開啟了混雜模式,使用
-p
選項可以有效地過濾噪聲。-e : 顯示資料鏈路層資訊。預設情況下 tcpdump 不會顯示資料鏈路層資訊,使用
-e
選項可以顯示源和目的 MAC 地址,以及 VLAN tag 資訊
如果想實時將抓取到的資料通過管道傳遞給其他工具來處理,需要使用 -l
選項來開啟行緩衝模式(或使用 -c
選項來開啟資料包緩衝模式)。使用 -l
選項可以將輸出通過立即傳送給其他命令,其他命令會立即響應。
tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
硬連結和軟連線的本質區別
- 硬連結
檔案都有檔名與資料,這在 Linux 上被分成兩個部分:使用者資料 (user data) 與元資料 (metadata)。使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實內容的地方;而元資料則是檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。在 Linux 中,元資料中的 inode 號(inode 是檔案元資料的一部分但其並不包含檔名,inode 號即索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。下圖展示了程式通過檔名獲取檔案內容的過程。
由於硬連結是有著相同 inode 號僅檔名不同的檔案,因此硬連結存在以下幾點特性:
- 檔案有相同的 inode 及 data block;
- 只能對已存在的檔案進行建立;
- 不能交叉檔案系統進行硬連結的建立;
- 不能對目錄進行建立,只可對檔案建立;
- 刪除一個硬連結檔案並不影響其他有相同 inode 號的檔案。
- 軟連線
軟連結與硬連結不同,若檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向,則該檔案就是軟連線。軟連結就是一個普通檔案,只是資料塊內容有點特殊。軟連結有著自己的 inode 號以及使用者資料塊。因此軟連結的建立與使用沒有類似硬連結的諸多限制:
- 軟連線有自己的檔案屬性及許可權
- 可對不存在的檔案或目錄建立軟連結
- 軟連結可交叉檔案系統
- 軟連結可對檔案或目錄建立
- 建立軟連結時,連結計數i_nlink不會增加
- 刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連線被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢復為正常的軟連結)。
軟連線格式: ln -s 原始檔 連結檔案
硬連結格式: ln 原始檔 連結檔案
小結:
- 硬連結: 與普通檔案沒什麼不同,可以理解為引用,新增一個別名,引用計數+1檔案的inode都一樣,指向同一個資料區塊
- 軟連結:data block中儲存了其代表的檔案的絕對路徑,是另外一種檔案,有自己的inode,在硬碟中有獨立的區塊,訪問時替換自身路徑