當前位置:首頁 » 操作系統 » linuxfor命令詳解

linuxfor命令詳解

發布時間: 2023-05-10 22:41:46

linux lsof命令詳解

lsof全名list opened files,也就是列舉系統中已經被打開的文件。我們都知道,linux環境中,任何事物都是文件,

設備是文件,目錄是文件,甚至sockets也是文件。所以,用好lsof命令,對日常的linux管理非常有幫助。

lsof是linux最常用的命令之一,通常的輸出格式為:

引用

常見包括如下幾個欄位:更多的可見manual。
1、COMMAND
默認以9個字元長度顯示的命令名稱。可使用+c參數指定顯示的寬度,若+c後跟的參數為零,則顯示命令的全名
2、PID:進程的ID號
3、PPID
父進程的IP號,默認不顯示,當使用-R參數可打開。
4、PGID
進程組的ID編號,默認也不會顯示,當使用-g參納旦運數時可打開。
5、USER
命令的執行UID或系統中登陸的用戶名稱。默認顯示為用戶名,當使用-l參數時,可顯示UID。
6、FD
是文件的File Descriptor number,或者如下的內容:
(這里很難翻譯對應的意思,保留英文)

引用

文件的File Descriptor number顯示模式有:

引用

7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也會顯示為IPv6,而映射到IPv6的地址;
DIR 目錄
LINK 鏈接文件
詳情請看manual中更多的注釋。

8、DEVICE
使用character special、block special表示的設備號

9、SIZE
文件的大小,如果不能用大小表示的,會留空。使用洞梁-s參數控制。

10、NODE
本地文件的node碼,或者協議,如TCP等

11、NAME
掛載點和文件的全路徑(鏈接會被解析為實際路徑),或者連接雙方的地址和埠、狀態等

常用示例:
1.顯示開啟文件/home/oracle/10.2.0/db_1/bin/tnslsnr的進程

2.知道22埠現在運行什麼程序

3.顯示遲慎init進程現在打開的文件

6.依照文件夾/home/oracle來搜尋,但不會打開子目錄,用來顯示目錄下被進程開啟的文件

顯示內容太多了,不顯示了

lsof -n 不將IP轉換為hostname,預設是不加上-n參數

關註:
進程調試命令:truss、strace和ltrace

進程無法啟動,軟體運行速度突然變慢,程序的"SegmentFault"等等都是讓每個Unix系統用戶頭痛的問題,而這些問題都可以通過使用truss、strace和ltrace這三個常用的調試工具來快速診斷軟體的"疑難雜症"。

⑵ Linux解壓壓縮命令都有哪些,有什麼區別呢

linux
zip命令

zip -r myfile.zip
./*
將當前目錄下的所有文件和文件夾全部壓縮成myfile.zip文件,-r表示遞歸壓縮子目錄下所有文件.

2.unzip
unzip -o -d
/home/sunny myfile.zip
把myfile.zip文件解壓到
/home/sunny/
-o:不提示的情況下覆蓋文件;
-d:-d /home/sunny
指明將文件解壓縮到/home/sunny目錄下;

3.其他
zip -d
myfile.zip smart.txt
刪除壓縮文件中smart.txt文件
zip -m myfile.zip
./rpm_info.txt
向壓縮文件中myfile.zip中添加rpm_info.txt文件
-------------------------------------------------------------------------------

要使用 zip 來壓縮文件,在 shell 提示下鍵入下面的命令:
zip -r filename.zip
filesdir

在這個例子里,filename.zip 代表你創建的文件,filesdir 代表你想放置新 zip 文件的目錄。-r
選項指定你想遞歸地(recursively)包括所有包括在 filesdir 目錄中的文件。

要抽取 zip 文件的內容,鍵入以下命令:
unzip filename.zip你可以使用 zip
命令同時處理多個文件和目錄,方法是將它們逐一列出,並用空格間隔:

zip -r filename.zip file1 file2 file3 /usr/work/school 上面的命令把 file1、file2、
file3、以及 /usr/work/school 目錄的內容(假設這個目錄存在)壓縮起來,然後放入 filename.zip 文件中。

tar 命令詳解

-c: 建立壓縮檔案

-x:解壓

-t:查看內容

-r:向壓縮歸檔文件末尾追加文件

-u:更新原壓縮包中的文件

這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是根據需要在壓縮或解壓檔案時可選的。

-c: 建立壓縮檔案

-x:解壓

-t:查看內容

-r:向壓縮歸檔文件末尾追加文件

-u:更新原壓縮包中的文件

下面的參數-f是必須的

-f: 使用檔案名字,切記,這個參數是最後一個參數,後面只能接檔案名。

# tar -cf all.tar *.jpg

這條命令是將所有.jpg的文件打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif

這條命令是將所有.gif的文件增加到all.tar的包裡面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif

這條命令是更新原來tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar

這條命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar

這條命令是解出all.tar包中所有文件,-t是解開的意思
壓縮

tar –cvf jpg.tar *.jpg //將目錄里所有jpg文件打包成tar.jpg

tar –czf jpg.tar.gz *.jpg
//將目錄里所有jpg文件打包成jpg.tar後,並且將其用gzip壓縮,生成一個gzip壓縮過的包,命名為jpg.tar.gz

tar –cjf jpg.tar.bz2 *.jpg
//將目錄里所有jpg文件打包成jpg.tar後,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,命名為jpg.tar.bz2

tar –cZf jpg.tar.Z *.jpg
//將目錄里所有jpg文件打包成jpg.tar後,並且將其用compress壓縮,生成一個umcompress壓縮過的包,命名為jpg.tar.Z

rar a jpg.rar *.jpg //rar格式的壓縮,需要先下載rar for linux

zip jpg.zip *.jpg //zip格式的壓縮,需要先下載zip for linux

解壓

tar –xvf file.tar //解壓 tar包

tar -xzvf file.tar.gz //解壓tar.gz

tar -xjvf file.tar.bz2 //解壓 tar.bz2

tar –xZvf file.tar.Z //解壓tar.Z

unrar e file.rar //解壓rar

unzip file.zip //解壓zip

總結

1、*.tar 用 tar –xvf 解壓

2、*.gz 用 gzip -d或者gunzip 解壓

3、*.tar.gz和*.tgz 用 tar –xzf 解壓

4、*.bz2 用 bzip2 -d或者用bunzip2 解壓

5、*.tar.bz2用tar –xjf 解壓

6、*.Z 用 uncompress 解壓

7、*.tar.Z 用tar –xZf 解壓

8、*.rar 用 unrar e解壓

9、*.zip 用 unzip 解壓

Linux中tar命令詳解(轉載的資料)

tar命令

tar 可以為文件和目錄創建檔案。利用tar,用戶可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被
用來在磁帶上創建檔案,現在,用戶可以在任何設備上創建檔案,如軟盤。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對於備份文件或將
幾個文件組合成為一個文件以便於網路傳輸是非常有用的。Linux上的tar是GNU版本的。

語法:tar [主選項+輔選項] 文件或者目錄

使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。

主選項:

c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。

r
把要存檔的文件追加到檔案文件的未尾。例如用戶已經作好備份文件,又發現還有一個目錄或是一些文件忘記備份了,這時可以使用該選項,將忘記的目錄或文件追加到備份文件中。

t 列出檔案文件的內容,查看已經備份了哪些文件。

u 更新文件。就是說,用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最後。

x 從檔案文件中釋放文件。

輔助選項:

b 該選項是為磁帶機設定的。其後跟一數字,用來說明區塊的大小,系統預設值為20(20*512 bytes)。

f 使用檔案文件或設備,這個選項通常是必選的。

k 保存已經存在的文件。例如我們把某個文件還原,在還原的過程中,遇到相同的文件,不會進行覆蓋。

m 在還原文件時,把所有文件的修改時間設定為現在。

M 創建多卷的檔案文件,以便在幾個磁碟中存放。

v 詳細報告tar處理的文件信息。如無此選項,tar不報告文件信息。

w 每一步都要求確認。

z 用gzip來壓縮/解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓縮。

Linux下的壓縮文件剖析

對於剛剛接觸Linux的人來說,一定會給Linux下一大堆各式各樣的文件名給搞暈。別個不說,單單就壓縮文件為例,我們知道在Windows下最常見
的壓縮文件就只有兩種,一是,zip,另一個是.rap。可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等眾多的
壓縮文件名,此外windows下的.zip和.rar也可以在Linux下使用,不過在Linux使用.zip和.rar的人就太少了。本文就來對這些
常見的壓縮文件進行一番小結,希望你下次遇到這些文件時不至於被搞暈。

在具體總結各類壓縮文件之前呢,首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄什麼的變成一個總的文件,壓縮則是將一個大的文件通過一些壓
演算法變成一個小文件。為什麼要區分這兩個概念呢?其實這源於Linux中的很多壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你就
得先藉助另它的工具將這一大堆文件先打成一個包,然後再就原來的壓縮程序進行壓縮。

Linux下最常用的打包程序就是tar了,使用tar程序打出來的包我們常稱為tar包,tar包文件的命令通常都是以.tar結尾的。生成tar包後,就可以用其它的程序來進行壓縮了,所以首先就來講講tar命令的基本用法:

tar命令的選項有很多(用man tar可以查看到),但常用的就那麼幾個選項,下面來舉例說明一下:

# tar -cf all.tar *.jpg

這條命令是將所有.jpg的文件打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif

這條命令是將所有.gif的文件增加到all.tar的包裡面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif

這條命令是更新原來tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar

這條命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar

這條命令是解出all.tar包中所有文件,-t是解開的意思

以上就是tar的最基本的用法。為了方便用戶在打包解包的同時可以壓縮或解壓文件,tar提供了一種特殊的功能。這就是tar可以在打包或解包的同時調用其它的壓縮程序,比如調用gzip、bzip2等。

1) tar調用gzip

gzip是GNU組織開發的一個壓縮程序,.gz結尾的文件就是gzip壓縮的結果。與gzip相對的解壓程序是gunzip。tar中使用-z這個參數來調用gzip。下面來舉例說明一下:

# tar -czf all.tar.gz *.jpg

這條命令是將所有.jpg的文件打成一個tar包,並且將其用gzip壓縮,生成一個gzip壓縮過的包,包名為all.tar.gz

# tar -xzf all.tar.gz

這條命令是將上面產生的包解開。

2) tar調用bzip2

bzip2是一個壓縮能力更強的壓縮程序,.bz2結尾的文件就是bzip2壓縮的結果。與bzip2相對的解壓程序是bunzip2。tar中使用-j這個參數來調用gzip。下面來舉例說明一下:

# tar -cjf all.tar.bz2 *.jpg

這條命令是將所有.jpg的文件打成一個tar包,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,包名為all.tar.bz2

# tar -xjf all.tar.bz2

這條命令是將上面產生的包解開。

3)tar調用compress

compress也是一個壓縮程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z結尾的文件就是bzip2壓縮的結果。與
compress相對的解壓程序是uncompress。tar中使用-Z這個參數來調用gzip。下面來舉例說明一下:

# tar -cZf all.tar.Z *.jpg

這條命令是將所有.jpg的文件打成一個tar包,並且將其用compress壓縮,生成一個uncompress壓縮過的包,包名為all.tar.Z

# tar -xZf all.tar.Z

這條命令是將上面產生的包解開

有了上面的知識,你應該可以解開多種壓縮文件了,下面對於tar系列的壓縮文件作一個小結:

1)對於.tar結尾的文件

tar -xf all.tar

2)對於.gz結尾的文件

gzip -d all.gz

gunzip all.gz

3)對於.tgz或.tar.gz結尾的文件

tar -xzf all.tar.gz

tar -xzf all.tgz

4)對於.bz2結尾的文件

bzip2 -d all.bz2

bunzip2 all.bz2

5)對於tar.bz2結尾的文件

tar -xjf all.tar.bz2

6)對於.Z結尾的文件

uncompress all.Z

7)對於.tar.Z結尾的文件

tar -xZf all.tar.z

另外對於Window下的常見壓縮文件.zip和.rar,Linux也有相應的方法來解壓它們:

1)對於.zip

linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參數選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:

# zip all.zip *.jpg

這條命令是將所有.jpg的文件壓縮成一個zip包

# unzip all.zip

這條命令是將all.zip中的所有文件解壓出來

2)對於.rar

要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網上下載,但要記住,RAR for Linux

不是免費的;然後安裝:

# tar -xzpvf rarlinux-3.2.0.tar.gz

# cd rar

# make

這樣就安裝好了,安裝後就有了rar和unrar這兩個程序,rar是壓縮程序,unrar是解壓程序。它們的參數選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:

# rar a all *.jpg

這條命令是將所有.jpg的文件壓縮成一個rar包,名為all.rar,該程序會將.rar 擴展名將自動附加到包名後。

# unrar e all.rar

這條命令是將all.rar中的所有文件解壓出來

到此為至,我們已經介紹過linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、
zip、unzip、rar、unrar等程式,你應該已經能夠使用它們對.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.
Z、.tar.Z、.zip、.rar這10種壓縮文件進行解壓了,以後應該不需要為下載了一個軟體而不知道如何在Linux下解開而煩惱了。而且以上方
法對於Unix也基本有效。

本文介紹了linux下的壓縮程式tar、gzip、gunzip、bzip2、bunzip2、
compress、uncompress、zip、unzip、rar、unrar等程式,以及如何使用它們對.tar、.gz、.tar.gz、.
tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar這10種壓縮文件進行操作

⑶ Linux主要shell命令詳解

命令替換
命令替換和重定向有些相似,但區別在於命令替換是將一個命令的輸出作為另外一個命令的參數。常用命令格式為:
command1
`command2`
其中,command2的輸出將作為command1的參數。需要注意的是這里的`符號,被它括起來的內容將作為命令執行,執行後的結果作為command1的參數。例如:
$
cd
`pwd`
該命令將pwd命令列出的目錄作為cd命令的參數,結果仍然是停留在當前目錄下。

⑷ linux lsof命令詳解

lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網路連接和硬體。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後台都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用介面。因為應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。

在終端下輸入lsof即可顯示系統打開的文件,因為 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。

直接輸入lsof部分輸出為:

每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。

lsof輸出各列信息的意義如下:

COMMAND:進程的名稱 PID:進程標識符

USER:進程所有者

FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等 TYPE:文件類型,如孫培晌DIR、REG等

DEVICE:指定磁碟的名稱

SIZE:文件的大小

NODE:索引節點中大(文件在磁碟上的標識)

NAME:打開文件的確切名稱

FD 列中的文件描述符cwd 值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改,txt 類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。

其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最後一行文件/dev/initctl,其文件描述符為 10。u 表示該文件被打開並處於讀取/寫入模式,而不是只讀 或只寫 (w) 模式。同時還有大寫 的W 表示該應用程序具有對整個文件的寫鎖。該文件描述符用於確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,從 0 到 2,分別表示標准輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。

與 FD 列相比,Type 列則比較直觀。文件和則鋒目錄分別稱為 REG 和 DIR。而CHR 和 BLK,分別表示字元和塊設備;或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。

lsof語法格式是: lsof [options] filename

查找誰在使用文件系統

在卸載文件系統時,如果該文件系統中有任何打開的文件,操作通常將會失敗。那麼通過lsof可以找出那些進程在使用當前要卸載的文件系統,如下: # lsof /GTES11/ COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 4208 root cwd DIR 3,1 4096 2 /GTES11/ vim 4230 root cwd DIR 3,1 4096 2 /GTES11/ 在這個示例中,用戶root正在其/GTES11目錄中進行一些操作。一個 bash是實例正在運行,並且它當前的目錄為/GTES11,另一個則顯示的是vim正在編輯/GTES11下的文件。要成功地卸載/GTES11,應該在通知用戶以確保情況正常之後,中止這些進程。 這個示例說明了應用程序的當前工作目錄非常重要,因為它仍保持著文件資源,並且可以防止文件系統被卸載。這就是為什麼大部分守護進程(後台進程)將它們的目錄更改為根目錄、或服務特定的目錄(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免該守護進程阻止卸載不相關的文件系統。

恢復刪除的文件

當Linux計算機受到入侵時,常見的情況是日誌文件被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的文件,比如在清理舊日誌時,意外地刪除了資料庫的活動事務日誌。有時可以通過lsof來恢復這些文件。 當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在於磁碟中。這意味著,進程並不知道文件已經被刪除,它仍然可以向打開該文件時提供給它的文件描述符進行讀取和寫入。除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點。 在/proc 目錄下,其中包含了反映內核和進程樹的各種文件。/proc目錄掛載的是在內存中所映射的一塊區域,所以這些文件和目錄並不存在於磁碟中,因此當我們對這些文件進行讀取和寫入時,實際上是在從內存中獲取相關信息。大多數與 lsof 相關的信息都存儲於以進程的 PID 命名的目錄中,即 /proc/1234 中包含的是 PID 為 1234 的進程的信息。每個進程目錄中存在著各種文件,它們可以使得應用程序簡單地了解進程的內存空間、文件描述符列表、指向磁碟上的文件的符號鏈接和其他系統信息。lsof 程序使用該信息和其他關於內核內部狀態的信息來產生其輸出。所以lsof 可以顯示進程的文件描述符和相關的文件名等信息。也就是我們通過訪問進程的文件描述符可以找到該文件的相關信息。 當系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那麼我們就可以通過lsof從/proc目錄下恢復該文件的內容。 假如由於誤操作將/var/log/messages文件刪除掉了,那麼這時要將/var/log/messages文件恢復的方法如下: 首先使用lsof來查看當前是否有進程打開/var/logmessages文件,如下: # lsof |grep /var/log/messages syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted) 從上面的信息可以看到 PID 1283(syslogd)打開文件的文件描述符為 2。同時還可以看到/var/log/messages已經標記被刪除了。因此我們可以在 /proc/1283/fd/2 (fd下的每個以數字命名的文件表示進程對應的文件描述符)中查看相應的信息,如下: # head -n 10 /proc/1283/fd/2 Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart. Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started. Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 ([email protected]) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007 Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map: Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved) 從上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢復的數據。如果可以通過文件描述符查看相應的數據,那麼就可以使用 I/O 重定向將其復制到文件中,如: cat /proc/1283/fd/2 > /var/log/messages 對於許多應用程序,尤其是日誌文件和資料庫,這種恢復刪除文件的方法非常有用。

可以列出被 進程 打開 文件 的信息。被打開的文件可以是

1.普通的文件,2.目錄 3.網路文件系統的文件,4.字元設備文件 5.(函數)共享庫 6.管道,命名管道 7.符號鏈接

8.底層的socket字流,網路socket, unix 域名socket

9.在 linux 裡面,大部分的東西都是被當做文件的…..還有其他很多

怎樣使用lsof

這里主要用案例的形式來介紹lsof 命令的 使用

1.列出所有打開的文件:

lsof

備注: 如果不加任何參數,就會打開所有被打開的文件,建議加上一下參數來具體定位

2. 查看 誰正在使用某個文件

lsof /filepath/file

3.遞歸查看某個目錄的文件信息

lsof +D /filepath/filepath2/

備注: 使用了+D,對應目錄下的所有子目錄和文件都會被列出

4. 比使用+D選項,遍歷查看某個目錄的所有文件信息 的方法

lsof | grep 『/filepath/filepath2/』

5. 列出某個用戶打開的文件信息

lsof -u username

備注: -u 選項,u其實是user的縮寫

6. 列出某個程序所打開的文件信息

lsof -c mysql

備注: -c 選項將會列出所有以mysql開頭的程序的文件,其實你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個字元了

7. 列出多個程序多打開的文件信息

lsof -c mysql -c apache

8. 列出某個用戶以及某個程序所打開的文件信息

lsof -u test -c mysql

9. 列出除了某個用戶外的被打開的文件信息

lsof -u ^root

備註:^這個符號在用戶名之前,將會把是root用戶打開的進程不讓顯示

10. 通過某個進程號顯示該進行打開的文件

lsof -p 1

11. 列出多個進程號對應的文件信息

lsof -p 123,456,789

12. 列出除了某個進程號,其他進程號所打開的文件信息

lsof -p ^1

13 . 列出所有的網路連接

lsof -i

14. 列出所有tcp 網路連接信息

lsof -i tcp

15. 列出所有udp網路連接信息

lsof -i udp

16. 列出誰在使用某個埠

lsof -i :3306

17. 列出誰在使用某個特定的udp埠

lsof -i udp:55

特定的tcp埠

lsof -i tcp:80

18. 列出某個用戶的所有活躍的網路埠

lsof -a -u test -i

19. 列出所有網路文件系統

lsof -N

20.域名socket文件

lsof -u

21.某個用戶組所打開的文件信息

lsof -g 5555

22. 根據文件描述列出對應的文件信息

lsof -d description(like 2)

23. 根據文件描述范圍列出文件信息

lsof -d 2-3

實用命令

⑸ Linux awk 命令詳解(二) if 分支 數組

一、awk if分支結構
二、awk數組 for循環

一、awk if分支結構

案例1
awk過濾中的if分支結構
1)單分支
統計/etc/passwd文件中UID小於或等於1000的用戶個數:

統計/etc/passwd文件中UID大於1000的用戶個數:

統計/etc/passwd文件中登錄Shell是「/bin/bash」的用戶個數:

2)雙分支
分別統計/etc/passwd文件中UID小於或等於1000、UID大於1000的用戶個數:

分別統計/etc/passwd文件中登錄Shell是「/bin/bash」、 登錄Shell不是「/bin/bash」的用戶個數:

二、awk數組

注意,awk數組的下標除了可以使用數字,也可以使用字元串,字元串需要使用雙引號:

案例3:awk擴展應用
1)awk統計Web訪問排名
在分析Web日誌文件時,每條訪問記錄的第一列就是客戶機的IP地址,其中會有很多重復的IP地址。因此只用awk提取出這一列是不夠的,還需要統計重復記錄的數量並且進行排序。
通過awk提取信息時,利用IP地址作為數組下標,每遇到一個重復值就將此數組元素遞增1,最終就獲得了這個IP地址出現的次數。
針對文本排序輸出可以採用sort命令,相關的常見選項為-r、-n、-k。其中-n表示按數字順序升序排列,而-r表示反序,-k可以指定按第幾個欄位來排序

實現此案例需要按照如下步驟進行。
步驟一:統計Web訪問量排名
分步測試、驗證效果如下所述。
1)提取IP地址及訪問量

2)對第1)步的結果根據訪問量排名

案例4:編寫監控腳本
本案例要求編寫腳本,實現計算機各個性能數據監控的功能,具體監控項目要求如下:
CPU負載
網卡流量
內存剩餘容量
磁碟剩餘容量
計算機賬戶數量
當前登錄賬戶數量
計算機當前開啟的進程數量
本機已安裝的軟體包數量

步驟
實現此案例需要按照如下步驟進行。
步驟一:准備工作
1)查看性能數據的命令

步驟二:編寫參考腳本
1)腳本內容如下:

⑹ linux解壓7z文件命令

7z文件類型屬於一個壓縮文件類型,在linux要通過命令可以將其解壓出來,下面由我為大家整理了linux下解壓7z文件命令的相關知識,希望對大家有所幫助。

一、linux解壓7z文件命令詳解

解壓縮7z文件

7za x phpMyAdmin-3.3.8.1-all-languages.7z -r -o./

參數含義:

x 代表解壓縮文件,並且是按原始目錄樹解壓(還有個參數 e 也是解壓縮文件,但其會將所有文件都解壓到根下,而不是自己原有的文件夾下)

phpMyAdmin-3.3.8.1-all-languages.7z 是壓縮文件,這里我用phpadmin做測試。這里默認使用當前目錄下的phpMyAdmin-3.3.8.1-all-languages.7z

-r 表示遞歸解壓縮所有的子文件夾

-o 是指定解壓到的目錄,-o後是沒有空格的,直接接目錄。這一點需要注意。

二、補充:linux壓縮7z文件/文件夾命令

7za a -t7z -r Mytest.7z /opt/phpMyAdmin-3.3.8.1-all-languages/*

參數含義:

a 代表添加文件/文件夾到壓縮包

-t 是指定壓縮類型,這里定為7z,可不指定,因為7za默認壓縮類型就是7z。

-r 表示遞歸所有的子文件夾

Mytest.7z 是壓縮好後的壓縮包名

/opt/phpMyAdmin-3.3.8.1-all-languages/*:是壓縮目標。

注意:7za不僅僅支持.7z壓縮格式,還支持.tar.bz2等壓縮類型的。如上所述,用-t指定即可。

⑺ Linux find 命令詳解

find 命令的基本結構如下:
find [paths] [expression] [actions]

find 命令接受一個或多個 路徑 ( paths )作為搜索范圍,並在該路徑下 遞歸 地搜索。即檢索完指定的目錄後,還會對該目錄下的子目錄進行檢索,以及子目錄下的子目錄。。。直到到達目錄樹底部。

默認情況下(不帶任何搜索條件),find 命令會返回指定目錄下的 所有文件 ,所以常常需要通過特定的 expression 對結果進行 篩選

find 命令默認的 action 是將所有檢索結果列印至標准輸出。可以通過自定義 action ,讓 find 命令對搜索到的結果執行特定的操作。

這里先不做詳細解釋,簡單地測試下 find 命令:

find 命令中的 -name 選項可以根據文件名稱進行檢索( 區分大小寫 )。如需要忽略文件名中的大小寫,可以使用 -iname 選項。

-name 和 -iname 兩個選項都支持 wildcards 。如:

find /usr -name '*.txt' 查找 /usr 目錄下所有文件名以 .txt 結尾的文件
find /usr -name '????' 查找 /usr 目錄下所有文件名剛好為 4 個字元的文件

有些時候,你需要在搜索時匹配某個文件或目錄的 完整路徑 ,而不僅僅是匹配文件名。可以使用 -path 或 -ipath 選項。

如查找 /usr 下所有文件名以 .txt 結尾的文件或目錄,且該文件的父目錄必須是 src 。可以使用以下命令:
find /usr -path '*/src/*.txt'

如果只想搜索得到文件 目錄,即不想它們同時出現在結果中。可以使用 -type 選項指定文件類型。

-type 選項最常用的參數如下:

find /usr -type d -name 'python*' 檢索 /usr 下所有文件名以 python 開頭的 目錄

find 命令支持 -empty 選項用來檢索 為空 的文件或目錄。空文件即文件里沒有任何內容,空目錄即目錄中沒有任何文件或子目錄。

find ~ -type d -empty 檢索用戶主目錄下所有的空目錄

find 命令也允許用戶對當前的匹配條件進行 「反義」 (類似於 邏輯非 操作)。

如需要檢索 /usr 下所有文件名 以 .txt 為後綴的文件。可以使用以下命令:
find /usr -type f ! -name '*.txt'

也可以「翻轉」任何其他的篩選條件,如:
find /usr -type f ! -empty 檢索 /usr 下所有內容不為空的文件

為了檢索歸屬於特定用戶的文件或目錄,可以使用 -user 選項。

find / -type f -user starky 檢索根目錄下所有屬主為 starky 的文件

類似於 -user 選項, -group 選項則可以根據文件或目錄的 屬組 進行檢索。

有些時候,需要根據文件創建或修改的時間進行檢索。

Linux 系統中,與文件相關聯的時間參數有以下三種:

與此對應的是 find 命令中的 -mtime , -atime 和 -ctime 三個選項。

這三個選項的使用遵循以下示例中的規則:

find /usr -type f -mtime 2 檢索 /usr 下兩天前被修改過的文件

如果覺得 -mtime 等選項以 為單位時間有點長,還可以使用 -mmin , -amin , -cmin 三個選項:
find /usr -type f -mtime +50 -mtime -100 檢索 /usr 下 50 到 100 天之前修改過的文件
find /usr -type f -mtime 2 -amin 5 檢索 /usr 下兩天前被修改過且 5 分鍾前又讀取過的文件

-size 選項允許用戶通過文件大小進行搜索(只適用於文件,目錄沒有大小……)。

表示文件大小的單位由以下字元組成:

另外,還可以使用 + 或 - 符號表示 大於 小於 當前條件。

find / -size +1G 檢索文件大小高於 1 GB 的文件

find 命令可以使用 -perm 選項以文件許可權為依據進行搜索。

如需要檢索 /usr 目錄下許可權為 rwxr-xr-x 的文件,可以使用以下命令:
find /usr -perm u=rwx,g=rx,o=rx

搜索 /usr 目錄下所有許可權為 r-xr-xr-x (即系統中的所有用戶都只有讀寫許可權)的文件和目錄,可以使用以下命令:
find /usr -perm a=rx

很多時候,我們只想匹配文件許可權的一個 子集 。比如,檢索可以直接被任何用戶執行的文件,即只關心文件的執行許可權,而不用管其讀寫許可權是什麼。

上述的需求可以通過以下命令實現: find / -type f -perm /a=x
其中 a=x 前面的 / 符號即用來表示只匹配許可權的某個子集(執行許可權),而不用關心其他許可權的具體設置。

-perm 選項也支持數字形式的文件許可權標記。

find /usr -perm 644 搜索 /usr 目錄下許可權為 644 (即 rwxr-xr-x )的文件

find 命令默認是以 遞歸 的方式檢索項目的,這有時候會導致得到的結果數量非常巨大。可以使用 -maxdepth 限制 find 命令遞歸的層數。

find / -maxdepth 3 搜索時向下遞歸的層數最大為 3

在之前的例子中有出現多個搜索條件的 組合 以及對某個搜索條件的 反轉
實際上 find 命令支持 「and」 「or」 兩種邏輯運算,對應的命令選項分別是 -a 和 -o 。通過這兩個選項可以對搜索條件進行更復雜的組合。

此外還可以使用 小括弧 對搜索條件進行 分組 。注意 find 命令中的小括弧常需要用 單引號 包裹起來。因小括弧在 Shell 中有特殊的含義。

如檢索 /usr 下文件名以 python 開頭且類型為目錄的文件
find /usr -type d -name 'python*'

該命令等同於:
find /usr -type d -a -name 'python*'

更復雜的組合形式如:
find / '(' -mmin -5 -o -mtime +50 ')' -a -type f

-delete 選項可以用來刪除搜索到的文件和目錄。

如刪除 home 目錄下所有的空目錄:
find ~ -type d -empty -delete

-exec 選項可以對搜索到的結果執行特定的命令。

如需要將 home 目錄下所有的 MP3 音頻文件復制到移動存儲設備(假設路徑是 /media/MyDrive ),可使用下面的命令:
find ~ -type f -name '*.mp3' -exec cp {} /media/MyDrive ''

其中的 大括弧 ( {} )作為檢索到的文件的 佔位符 ,而分號( ; )作為命令結束的標志。因為分號是 Shell 中有特殊含義的符號,所以需要使用單引號括起來。
每當 find 命令檢索到一個符合條件的文件,會使用其完整路徑取代命令中的 {} ,然後執行 -exec 後面的命令一次。

另一個很重要的用法是,在多個文件中檢索某個指定的字元串。
如在用戶主目錄下的所有文件中檢索字元串 hello ,可以使用如下命令:
find ~ -type f -exec grep -l hello {} ''

創建 Gzip 格式的壓縮文件的命令為: tar -czvf filename.tar.gz <list of files>

現在假設需要將用戶主目錄下所有的 MP3 文件添加到壓縮包 music.tar.gz 中,直觀的感覺是,其命令應為如下形式:
find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} ''

實際情況是,這樣得到的 music.tar.gz 其實只包含一個 MP3 文件。
原因是 find 命令 每次 發現一個音頻文件,都會再執行一次 -exec 選項後面的壓縮命令。導致先前生成的壓縮包被覆蓋。

可以先讓 find 命令檢索出所有符合條件的音頻文件,再將得到的 文件列表 傳遞給後面的壓縮命令。完整的命令如下:
find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} +

如果想瀏覽搜索到的文件(目錄)的詳細信息(如許可權和大小等),可以直接使用 -ls 選項。

find / -type file -size +1G -ls 瀏覽所有 1G 以上大小的文件的詳細信息

A Guide to the Linux 「Find」 Command
find 命令手冊 : man find

⑻ Linux許可權詳解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

許可權簡介

Linux系統上對文件的許可權有著嚴格的控制,用於如果相對某個文件執行某種操作,必須具有對應的許可權方可執行成功。

Linux下文件的許可權類型一般包括讀,寫,執行。對應字母為 r、w、x。

Linux下許可權的粒度有

擁有者 、群組 、其它組 三種。每個文件都可以針對三個粒度,設置不同的rwx(讀寫執行)許可權。通常情況下,一個文件只能歸屬於一個用戶和組,

如果其它的用戶想有這個文件的許可權,則可以將該用戶加入具備許可權的群組,一個用戶可以同時歸屬於多個組。

Linux上通常使用chmod命令對文件的許可權進行設置和更改。

一、快速入門

更改文件許可權 (chmod命令)

一般使用格式

chmod [可選項]

可選項:  -c, --changes          like verbose but report onlywhena change is made (若該檔案許可權確實已經更改,才顯示其更改動作)  -f, --silent, --quiet  suppress most error messages(若該檔案許可權無法被更改也不要顯示錯誤訊息)  -v, --verbose          output a diagnosticforevery file processed(顯示許可權變更的詳細資料)      --no-preserve-rootdonottreat'/'specially (the default)      --preserve-root    fail to operate recursively on'/'      --reference=RFILE  use RFILE's mode instead of MODE values-R, --recursive        change files and directories recursively(以遞歸的方式對目前目錄下的所有檔案與子目錄進行相同的許可權變更)--help顯示此幫助信息--version顯示版本信息mode :許可權設定字串,詳細格式如下 :[ugoa...][[+-=][rwxX]...][,...],其中[ugoa...]

u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示所有(包含上面三者)。[+-=]

+ 表示增加許可權,- 表示取消許可權,= 表示唯一設定許可權。[rwxX]

r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。

file...文件列表(單個或者多個文件、文件夾)

範例:

設置所有用戶可讀取文件 a.conf

設置 c.sh 只有 擁有者可以讀寫及執行

設置文件 a.conf 與 b.xml 許可權為擁有者與其所屬同一個群組 可讀寫,其它組可讀不可寫

設置當前目錄下的所有檔案與子目錄皆設為任何人可讀寫

數字許可權使用格式

在這種使用方式中,首先我們需要了解數字如何表示許可權。

首先,我們規定 數字 4 、2 和 1表示讀、寫、執行許可權(具體原因可見下節許可權詳解內容),即 r=4,w=2,x=1

。此時其他的許可權組合也可以用其他的八進制數字表示出來,如: rwx = 4 + 2 + 1 = 7 rw = 4 + 2 = 6 rx = 4

+1 = 5 即

若要同時設置

rwx (可讀寫運行) 許可權則將該許可權位 設置 為 4 + 2 + 1 = 7 若要同時設置 rw- (可讀寫不可運行)許可權則將該許可權位 設置

為 4 + 2 = 6 若要同時設置 r-x (可讀可運行不可寫)許可權則將該許可權位 設置 為 4 +1 = 5

上面我們提到,每個文件都可以針對三個粒度,設置不同的rwx(讀寫執行)許可權。即我們可以用用三個8進制數字分別表示 擁有者 、群組 、其它組( u、 g 、o)的許可權詳情,並用chmod直接加三個8進制數字的方式直接改變文件許可權。語法格式為 :

chmod file...

其中a,b,c各為一個數字,分別代表User、Group、及Other的許可權。相當於簡化版的chmod u=許可權,g=許可權,o=許可權file...而此處的許可權將用8進制的數字來表示User、Group、及Other的讀、寫、執行許可權

範例:

設置所有人可以讀寫及執行

設置擁有者可讀寫,其他人不可讀寫執行

更改文件擁有者(chown命令)

linux/Unix 是多人多工作業系統,每個的文件都有擁有者(所有者),如果我們想變更文件的擁有者(利用 chown 將文件擁有者加以改變),一般只有系統管理員(root)擁有此操作許可權,而普通用戶則沒有許可權將自己或者別人的文件的擁有者設置為別人。

語法格式:

chown [可選項] user[:group] file...

使用許可權:root說明:[可選項] :同上文chmoser :新的文件擁有者的使用者group :新的文件擁有者的使用者群體(group)

範例:

設置文件 d.key、e.scrt的擁有者設為 users 群體的 tom

設置當前目錄下與子目錄下的所有文件的擁有者為 users 群體的 James

二、Linux許可權詳解

Linux系統上對文件的許可權有著嚴格的控制,用於如果相對某個文件執行某種操作,必須具有對應的許可權方可執行成功。這也是Linux有別於Windows的機制,也是基於這個許可權機智,Linux可以有效防止病毒自我運行,因為運行的條件是必須要有運行的許可權,而這個許可權在Linux是用戶所賦予的。

Linux的文件許可權有以下設定:

Linux下文件的許可權類型一般包括讀,寫,執行。對應字母為 r、w、x。

Linux下許可權的屬組有 擁有者 、群組 、其它組 三種。每個文件都可以針對這三個屬組(粒度),設置不同的rwx(讀寫執行)許可權。

通常情況下,一個文件只能歸屬於一個用戶和組, 如果其它的用戶想有這個文件的許可權,則可以將該用戶加入具備許可權的群組,一個用戶可以同時歸屬於多個組。

如果我們要表示一個文件的所有許可權詳情,有兩種方式:

第一種是十位二進製表示法,(三個屬組每個使用二進制位,再加一個最高位共十位),可簡化為三位八進制形式

另外一種十二位二進製表示法(十二個二進制位),可簡化為四位八進制形式

十位許可權表示

常見的許可權表示形式有:

-rw------- (600)只有擁有者有讀寫許可權。-rw-r--r-- (644)只有擁有者有讀寫許可權;而屬組用戶和其他用戶只有讀許可權。-rwx------ (700)只有擁有者有讀、寫、執行許可權。-rwxr-xr-x (755)擁有者有讀、寫、執行許可權;而屬組用戶和其他用戶只有讀、執行許可權。-rwx--x--x (711)擁有者有讀、寫、執行許可權;而屬組用戶和其他用戶只有執行許可權。-rw-rw-rw- (666)所有用戶都有文件讀、寫許可權。-rwxrwxrwx (777)所有用戶都有讀、寫、執行許可權。

後九位解析:我們知道Linux許可權總共有三個屬組,這里我們給每個屬組使用三個位置來定義三種操作(讀、寫、執行)許可權,合起來則是許可權的後九位。 上面我們用字元表示許可權,其中 -代表無許可權,r代表讀許可權,w代表寫許可權,x代表執行許可權。

實際上,後九位每個位置的意義(代表某個屬組的某個許可權)都是固定的,如果我們將各個位置許可權的有無用二進制數 1和 0來代替,則只讀、只寫、只執行許可權,可以用三位二進制數表示為

r--=100-w-=010--x=001---=000

轉換成八進制數,則為 r=4, w=2, x=1, -=0(這也就是用數字設置許可權時為何是4代表讀,2代表寫,1代表執行)

實際上,我們可以將所有的許可權用二進制形式表現出來,並進一步轉變成八進制數字:

rwx=111=7rw-=110=6r-x=101=5r--=100=4-wx=011=3-w-=010=2--x=001=1---=000=0

由上可以得出,每個屬組的所有的許可權都可以用一位八進制數表示,每個數字都代表了不同的許可權(權值)。如 最高的許可權為是7,代表可讀,可寫,可執行。

故 如果我們將每個屬組的許可權都用八進制數表示,則文件的許可權可以表示為三位八進制數

-rw------- =600-rw-rw-rw- =666-rwxrwxrwx =777

關於第一位最高位的解釋:上面我們說到了許可權表示中後九位的含義,剩下的第一位代表的是文件的類型,類型可以是下面幾個中的一個:

d代表的是目錄(directroy)-代表的是文件(regular file)s代表的是套字文件(socket)p代表的管道文件(pipe)或命名管道文件(named pipe)l代表的是符號鏈接文件(symbolic link)b代表的是該文件是面向塊的設備文件(block-oriented device file)c代表的是該文件是面向字元的設備文件(charcter-oriented device file)

十二位許可權(Linux附加許可權)

附加許可權相關概念

linux除了設置正常的讀寫操作許可權外,還有關於一類設置也是涉及到許可權,叫做Linxu附加許可權。包括 SET位許可權(suid,sgid)和粘滯位許可權(sticky)。

SET位許可權:

suid/sgid是為了使「沒有取得特權用戶要完成一項必須要有特權才可以執行的任務」而產生的。

一般用於給可執行的程序或腳本文件進行設置,其中SUID表示對屬主用戶增加SET位許可權,SGID表示對屬組內用戶增加SET位許可權。執行文件被設置了SUID、SGID許可權後,任何用戶執行該文件時,將獲得該文件屬主、屬組賬號對應的身份。在許多環境中,suid

和 sgid 很管用,但是不恰當地使用這些位可能使系統的安全遭到破壞。所以應該盡量避免使用SET位許可權程序。(passwd

命令是為數不多的必須使用「suid」的命令之一)。

suid(set User ID,set UID)的意思是進程執行一個文件時通常保持進程擁有者的UID。然而,如果設置了可執行文件的suid位,進程就獲得了該文件擁有者的UID。

sgid(set Group ID,set GID)意思也是一樣,只是把上面的進程擁有者改成進程組就好了。

SET位許可權表示形式(10位許可權):

如果一個文件被設置了suid或sgid位,會分別表現在所有者或同組用戶的許可權的可執行位上;如果文件設置了suid還設置了x(執行)位,則相應的執行位表示為s(小寫)。但是,如果沒有設置x位,它將表示為S(大寫)。如:

1、-rwsr-xr-x表示設置了suid,且擁有者有可執行許可權2、-rwSr--r--表示suid被設置,但擁有者沒有可執行許可權3、-rwxr-sr-x表示sgid被設置,且群組用戶有可執行許可權4、-rw-r-Sr--表示sgid被設置,但群組用戶沒有可執行許可權

設置方式:

SET位許可權可以通過chmod命令設置,給文件加suid和sgid的命令如下(類似於上面chmod賦予一般許可權的命令):

chmo+sfilename設置suid位chmo-sfilename去掉suid設置chmodg+sfilename設置sgid位chmodg-sfilename去掉sgid設置

粘滯位許可權:

粘滯位許可權即sticky。一般用於為目錄設置特殊的附加許可權,當目錄被設置了粘滯位許可權後,即便用戶對該目錄有寫的許可權,也不能刪除該目錄中其他用戶的文件數據。設置了粘滯位許可權的目錄,是用ls查看其屬性時,其他用戶許可權處的x將變為t。

使用chmod命令設置目錄許可權時,+t、-t許可權模式可分別用於添加、移除粘滯位許可權。

粘滯位許可權表示形式(10位許可權):

一個文件或目錄被設置了粘滯位許可權,會表現在其他組用戶的許可權的可執行位上。如果文件設置了sticky還設置了x(執行)位,其他組用戶的許可權的可執行位為t(小寫)。但是,如果沒有設置x位,它將表示為T(大寫)。如:

1、-rwsr-xr-t表示設置了粘滯位且其他用戶組有可執行許可權2、-rwSr--r-T表示設置了粘滯位但其他用戶組沒有可執行許可權

設置方式:

sticky許可權同樣可以通過chmod命令設置:

chmod +t <文件列表..>

十二位的許可權表示方法

附加許可權除了用十位許可權形式表示外,還可以用用十二位字元表示。

11109876543210S  G  T r w x r w x r w x

SGT分別表示SUID許可權、SGID許可權、和 粘滯位許可權,這十二位分別對應關系如下:

第11位為SUID位,第10位為SGID位,第9位為sticky位,第8-0位對應於上面的三組rwx位(後九位)。

在這十二位的每一位上都置值。如果有相應的許可權則為1, 沒有此許可權則為0。

-rw-r-sr--的值為:010110100100-rwsr-xr-x的值為:100111101101-rwsr-sr-x的值為:110111101101-rwsr-sr-t的值為:111111101101

如果將則前三位SGT也轉換成一個二進制數,則

suid 的八進制數字是4

sgid 的代表數字是 2

sticky 位代表數字是1

這樣我們就可以將十二位許可權三位三位的轉化為4個八進制數。其中

最高的一位八進制數就是suid,sgdi,sticky的權值。

第二位為 擁有者的權值

第三位為 所屬組的權值

最後一位為 其他組的權值

附加許可權的八進制形式

通過上面,我們知道,正常許可權和附加許可權可以用4位八進制數表示。類似於正常許可權的數字許可權賦值模式(使用三位八進制數字賦值)

chmod file...

我們可以進一步使用4位八進制數字同時賦值正常許可權和附加許可權。

chmod file...

其中s是表示附加許可權的把八進制數字,abc與之前一致,分別是對應User、Group、及Other(擁有者、群組、其他組)的許可權。因為SUID對應八進制數字是4,SGID對於八進制數字是2,則「4755」表示設置SUID許可權,「6755」表示同時設置SUID、SGID許可權。

我們進一步將上小節的例子中的二進制數轉變為八進製表示形式,則

-rw-r-sr-- =010110100100=2644-rwsr-xr-x =100111101101=4755-rwsr-sr-x =110111101101=6755-rwsr-sr-t =111111101101=7755

對比範例:

設置 netlogin 的許可權為擁有者可讀寫執行,群組和其他許可權為可讀可執行

設置 netlogin 的許可權為擁有者可讀寫執行,群組和其他許可權為可讀可執行,並且設置suid

chmod 4755與chmod 755對比多了附加許可權值4,這個4表示其他用戶執行文件時,具有與所有者同樣的許可權(設置了SUID)。

為什麼要設置4755 而不是 755?

假設netlogin是root用戶創建的一個上網認證程序,如果其他用戶要上網也要用到這個程序,那就需要root用戶運行chmod 755 netlogin命令使其他用戶也能運行netlogin。但假如netlogin執行時需要訪問一些只有root用戶才有權訪問的文件,那麼其他用戶執行netlogin時可能因為許可權不夠還是不能上網。這種情況下,就可以用 chmod 4755 netlogin 設置其他用戶在執行netlogin也有root用戶的許可權,從而順利上網。

熱點內容
搞笑解壓舞 發布:2025-05-16 07:25:44 瀏覽:264
c封裝源碼 發布:2025-05-16 07:18:34 瀏覽:795
百度java下載 發布:2025-05-16 07:13:25 瀏覽:186
如何用c語言解方程 發布:2025-05-16 07:12:51 瀏覽:791
phpjson轉對象 發布:2025-05-16 07:07:42 瀏覽:55
static變數初始化java 發布:2025-05-16 07:05:20 瀏覽:249
sql刪除表的欄位 發布:2025-05-16 07:02:10 瀏覽:473
安卓手機相機出故障怎麼辦 發布:2025-05-16 06:47:11 瀏覽:456
華為如何給特定軟體設置密碼 發布:2025-05-16 06:44:09 瀏覽:468
內存和緩存的區別 發布:2025-05-16 06:42:42 瀏覽:188