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 | 顯示所有包含其他使用者的程序 |
[root@localhost 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
root@localhost 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
awk 指令教程
sort 指令
[linux下使用awk指令按時間段篩選日志](https://segmentfault.com/a/1190000011626977)
參考awk 常用指令
linux中的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行的日志。
日志分析檢視——grep,sed,sort,awk運用
網絡相關
使用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抓包工具
$ tcpdump -i eth0 -nn -s0 -v port 80 -w test.pcap
- -i : 選擇要捕獲的接口,通常是以太網卡或無線網卡,也可以是
或其他特殊接口。如果該系統上隻有一個網絡接口,則無需指定。vlan
- -nn : 單個 n 表示不解析域名,直接顯示 IP;兩個 n 表示不解析域名和端口。這樣不僅友善檢視 IP 和端口号,而且在抓取大量資料時非常高效,因為域名解析會降低抓取速度。
- -s0 : tcpdump 預設隻會截取前
位元組的内容,要想截取所有的封包内容,可以使用96
,-s number
就是你要截取的封包位元組數,如果是 0 的話,表示截取封包全部内容。number
- -v : 使用
,-v
和-vv
來顯示更多的詳細資訊,通常會顯示更多與特定協定相關的資訊。-vvv
-
: 這是一個常見的端口過濾器,表示僅抓取port 80
端口上的流量,通常是 HTTP80
-
: host過濾器, 抓取特定目的地和源IP位址的流量,也可以使用host 10.10.1.1
或src
隻抓取源或目的地dst
- -w: 把資料封包輸出到檔案
- -p : 不讓網絡接口進入混雜模式。預設情況下使用 tcpdump 抓包時,會讓網絡接口進入混雜模式。一般計算機網卡都工作在非混雜模式下,此時網卡隻接受來自網絡端口的目的位址指向自己的資料。當網卡工作在混雜模式下時,網卡将來自接口的所有資料都捕獲并交給相應的驅動程式。如果裝置接入的交換機開啟了混雜模式,使用
選項可以有效地過濾噪聲。-p
- -e : 顯示資料鍊路層資訊。預設情況下 tcpdump 不會顯示資料鍊路層資訊,使用
選項可以顯示源和目的 MAC 位址,以及 VLAN tag 資訊-e
如果想實時将抓取到的資料通過管道傳遞給其他工具來處理,需要使用
-l
選項來開啟行緩沖模式(或使用
-c
選項來開啟資料包緩沖模式)。使用
-l
選項可以将輸出通過立即發送給其他指令,其他指令會立即響應。
tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
硬連結和軟連接配接的本質差別
參考:了解 Linux 的硬連結與軟連結
5分鐘讓你明白“軟連結”和“硬連結”的差別
- 硬連結
檔案都有檔案名與資料,這在 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,在硬碟中有獨立的區塊,通路時替換自身路徑
Linux面試題彙總
46個Linux面試常見問題送給你
Linux工具快速教程-參考教程指令