天天看點

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
  1. 歸檔管理: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 
           
  1. 檔案解壓縮: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
  1. 檔案解壓縮: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)

  1. 修改檔案權限: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

  1. 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
           
  1. **ps ** Process Status

linux上程序有5種狀态:

  1. 運作(正在運作或在運作隊列中等待)
  2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信号)
  3. 不可中斷(收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生)
  4. 僵死(程序已終止, 但程序描述符存在, 直到父程序調用wait4()系統調用後釋放)
  5. 停止(程序收到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工具

  1. 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指令詳解

  1. 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

    number

    就是你要截取的封包位元組數,如果是 0 的話,表示截取封包全部内容。
  • -v : 使用

    -v

    -vv

    -vvv

    來顯示更多的詳細資訊,通常會顯示更多與特定協定相關的資訊。
  • port 80

    : 這是一個常見的端口過濾器,表示僅抓取

    80

    端口上的流量,通常是 HTTP
  • host 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 的硬連結與軟連結

5分鐘讓你明白“軟連結”和“硬連結”的差別

  1. 硬連結

檔案都有檔案名與資料,這在 Linux 上被分成兩個部分:使用者資料 (user data) 與中繼資料 (metadata)。使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實内容的地方;而中繼資料則是檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。在 Linux 中,中繼資料中的 inode 号(inode 是檔案中繼資料的一部分但其并不包含檔案名,inode 号即索引節點号)才是檔案的唯一辨別而非檔案名。檔案名僅是為了友善人們的記憶和使用,系統或程式通過 inode 号尋找正确的檔案資料塊。下圖展示了程式通過檔案名擷取檔案内容的過程。

由于硬連結是有着相同 inode 号僅檔案名不同的檔案,是以硬連結存在以下幾點特性:

  • 檔案有相同的 inode 及 data block;
  • 隻能對已存在的檔案進行建立;
  • 不能交叉檔案系統進行硬連結的建立;
  • 不能對目錄進行建立,隻可對檔案建立;
  • 删除一個硬連結檔案并不影響其他有相同 inode 号的檔案。
  1. 軟連接配接

軟連結與硬連結不同,若檔案使用者資料塊中存放的内容是另一檔案的路徑名的指向,則該檔案就是軟連接配接。軟連結就是一個普通檔案,隻是資料塊内容有點特殊。軟連結有着自己的 inode 号以及使用者資料塊。是以軟連結的建立與使用沒有類似硬連結的諸多限制:

  • 軟連接配接有自己的檔案屬性及權限
  • 可對不存在的檔案或目錄建立軟連結
  • 軟連結可交叉檔案系統
  • 軟連結可對檔案或目錄建立
  • 建立軟連結時,連結計數i_nlink不會增加
  • 删除軟連結并不影響被指向的檔案,但若被指向的原檔案被删除,則相關軟連接配接被稱為死連結(即 dangling link,若被指向路徑檔案被重新建立,死連結可恢複為正常的軟連結)。
軟連接配接格式: ln -s 源檔案 連結檔案
硬連結格式: ln 源檔案 連結檔案
           

小結:

  • 硬連結: 與普通檔案沒什麼不同,可以了解為引用,新增一個别名,引用計數+1檔案的inode都一樣,指向同一個資料區塊
  • 軟連結:data block中儲存了其代表的檔案的絕對路徑,是另外一種檔案,有自己的inode,在硬碟中有獨立的區塊,通路時替換自身路徑

Linux面試題彙總

46個Linux面試常見問題送給你

Linux工具快速教程-參考教程指令