Linux系統學習筆記:日常使用和管理 回到有關Linux系統的環境。Linux系統是多使用者的作業系統,對使用者管理有非常完善的支援,有簡單高效的檔案系統,還有大量的工具 + 生產力滿足日常工作的需要。本篇總結Linux系統的常用命令、使用者特性和檔案系統。常用命令Linux下的命令工具非常豐富,並且數量還在不斷地增長。 Linux的最常用命令包括: man 查看man手冊頁info 查看Texinfo文檔 ls 顯示檔案名稱或檔案清單,以及檔案的相關屬性資訊rm 刪除檔案cp 複製檔案mv 移動檔案,重新命名lpq lpr lprm 列印檔案 cat 顯示文字檔內容,可以用來拼接檔案less more 分屏顯示檔案head tail 顯示檔案頭部和尾部sort 排序檔案內容uniq 忽略檔案中的重複行diff 比較兩個檔案file 不開啟檔案,查看檔案的資訊grep 尋找字串 echo 顯示文本date 顯示日期和時間script 記錄會話資訊unix2dos dos2unix Linux文字檔和Windows文字檔的相互轉換 tar 檔案歸檔和解檔gzip gunzip zcat .gz檔案壓縮、解壓和查看bzip2 bunzip2 bzcat .bz2檔案的壓縮、解壓和查看 which whereis 尋找命令等的完整路徑apropos whatis 在man中搜尋索引鍵,給出簡要描述locate 尋找檔案的完整路徑 who w {who am i} 顯示登入使用者的資訊hostname 顯示主機名稱協助大部分命令可以通過 -h 或 --help 選項來查看簡要的協助資訊。 更詳細的協助文檔以 man 手冊頁的組織。手冊頁一般分為9節: 使用者級命令和應用程式。系統調用和核心出錯代碼。庫調用。裝置驅動程式和網路通訊協定。標準檔案格式。遊戲和示範。各種檔案和文檔。系統管理命令。少見隱秘的核心規範和介面。可以用 manpath 命令查看 man 的搜尋路徑。可以設定 MANPATH 環境變數來覆蓋預設路徑,也可以在/etc/manpath.config 中設定。手冊頁一般以 .gz 格式壓縮。 $ manpath/usr/local/man:/usr/local/share/man:/usr/share/manman 通過 less 命令顯示手冊頁,可以通過設定 PAGER 環境變數來修改。擷取手冊頁使用 man [sec] name命令,也可以用 -k 選項來按關鍵字尋找。 另一種協助文檔是Texinfo文檔,使用 info 命令查看。 路徑操作用於路徑操作的 ls 等命令可算是最為常用的命令了。它們用來管理檔案、目錄等的路徑。後面總結檔案系統時會再詳細說明它們。 檔案操作檔案操作的命令一般用於文字檔。 如建立檔案 a.txt : $ cat > a.txt # 將標準輸入重新導向到檔案MondayTuesdayWednesdayThursdayFridaySaturdaySunday^C$ cat b.txt # 顯示檔案內容MondayTuesdayTuesdayThursdayFridaySaturdaySunday$ head -3 a.txt # 查看開頭3行MondayTuesdayWednesday$ tail -f a.txt # 查看內容不斷增長的檔案,多用於日誌查看MondayTuesdayWednesdayThursdayFridaySaturdaySunday^C$ sort a.txt # 排序FridayMondaySaturdaySundayThursdayTuesdayWednesday$ uniq b.txt # 去掉重複行MondayTuesdayThursdayFridaySaturdaySunday$ diff -u a.txt b.txt # 比較檔案,-u顯示不同--- a.txt 2012-03-08 15:34:00.340179508 +0800+++ b.txt 2012-03-08 15:41:12.404569605 +0800@@ -1,6 +1,6 @@ Monday Tuesday-Wednesday+Tuesday Thursday Friday Saturday$ file a.txt # 查看檔案資訊a.txt: ASCII text$ grep -in --color sat *.txt # 尋找字串,-i不區分大小寫,-n顯示行號a.txt:6:Saturdayb.txt:6:Saturdaygrep 命令對單個檔案可以使用 -H 始終顯示檔案名稱,對目錄可以使用 -r 遞迴尋找。 幾個工具 + 生產力有幾個常用的如 echo 、 date 等命令,完成一些日常操作。 $ date --rfc-3339=s # =date會只顯示日期2012-03-08 15:59:57+08:00壓縮歸檔Linux下的壓縮公用程式有很多種,最常用的是 gzip 和 bzip2 。一般使用 tar 直接將檔案或目錄歸檔然後壓縮,它們也可以分開獨立使用。 $ tar czf w.tar.gz a.txt b.txt$ tar xzf w.tar.gz$ tar cjf w.tar.bz2 a.txt b.txt$ tar xjf w.tar.bz2一般把通過 tar 歸檔然後直接壓縮的包命名為 .tar.XX 的形式,以區別於單獨壓縮的 .gz 和 .bz2 檔案。 尋找命令為確定一個命令是否存在,可以使用 which 命令尋找它是否在搜尋路徑中,但它在Debian上不顯示使用者沒有執行許可權的命令,這時可以用 whereis 在更大範圍進行尋找。 還可以使用 locate 在整個檔案系統尋找,它可以找到任何類型的檔案。 locate 的資料庫通常由 updatedb命令定時產生。 $ which ifconfig # 沒找到,許可權不夠$ whereis ifconfigifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz$ locate ifconfig/sbin/ifconfig/usr/share/man/de/man8/ifconfig.8.gz/usr/share/man/fr/man8/ifconfig.8.gz/usr/share/man/man8/ifconfig.8.gz/usr/share/man/pt_BR/man8/ifconfig.8.gz查看使用者資訊w 和 who 可以分別以詳細的和簡略的方式查看使用者資訊, who am i 查看當前登入使用者的身份。 $ w 16:13:50 up 3:34, 3 users, load average: 0.00, 0.00, 0.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATyeolar pts/0 yeolar-pc.local 13:27 2:05 1.04s 1.04s -bashyeolar pts/1 yeolar-pc.local 16:11 0.00s 0.36s 0.00s wyeolar pts/2 yeolar-pc.local 16:13 8.00s 0.38s 0.08s sshd: yeolar [priv]$ whoyeolar pts/0 2012-03-08 13:27 (yeolar-pc.local)yeolar pts/1 2012-03-08 16:11 (yeolar-pc.local)yeolar pts/2 2012-03-08 16:13 (yeolar-pc.local)$ who am iyeolar pts/1 2012-03-08 16:11 (yeolar-pc.local)使用者Linux系統上的每個檔案和進程都屬於特定的使用者帳號。如果沒有得到屬主的許可,其他使用者就不能訪問這些對象。系統檔案和進程屬於 root 虛擬使用者,也稱為超級使用者。Linux是多使用者系統,使用者和許可權的劃分保障了Linux系統的多使用者安全。 每個檔案都有一個屬主和一個屬組。檔案的屬主指定屬群組成員可以對檔案做哪些操作,這樣可以讓一些成員共用檔案。Linux用數字來確定屬主和屬組。使用者ID(UID)映射到 /etc/passwd 檔案中的使用者名稱上,組ID(GID)映射到 /etc/group 檔案中的組名上。UID和GID對應的文字名稱是用來方便使用者的使用。 進程的屬主可以向該進程發送訊號,或者降低該進程的優先順序。進程有7個相關的ID,包括3個UID(真實、有效、儲存)、3個GID(真實、有效、儲存)和1個檔案系統UID。 超級使用者root 帳號的UID為0,超級使用者被允許在任何檔案或進程上執行正當的操作,有些系統調用只能夠由超級使用者執行。 為保障安全性, root 帳號的密碼的長度應該至少為8個字元。 為了執行一些系統級的操作,經常會需要成為 root 使用者,直接用 root 帳號登入的方法並不好,不安全的因素增加,而且也無法區分究竟是誰做了哪些操作。有兩種方法從普通使用者切換到 root 使用者,一是使用su 命令,另一個是使用 sudo 命令。 不加參數的 su 命令切換到 root 帳號,加使用者名稱作為參數會切換到該使用者帳號,使用 - 會同時將路徑切換到該使用者的主目錄。 sudo 以要執行的命令為參數,以 root 身份(或其他使用者)執行。設定檔 /etc/sudoers 設定授權使用sudo 的使用者和允許執行的命令,使用 visudo 命令來修改 /etc/sudoers 。 sudo 有一個可設定的逾時時間。 sudo 會儲存一個日誌,儲存命令執行相關的命令、主機、使用者、目錄和時間。 偽使用者系統中還定義了幾個偽使用者,一般是用 * 代替它們在 /etc/passwd 中的密碼欄位,使它們不能用來登入。幾個常見的如 bin (系統命令的屬主)、 daemon (無特權的系統軟體的屬主)、 nobody (普通NFS使用者)。 /etc/passwd檔案/etc/passwd 檔案是系統能夠識別的使用者的清單,在登入時,系統查詢該檔案來確定使用者的UID並驗證密碼。 每一行為一個使用者,包含如下欄位: 使用者名稱。經過加密的密碼或預留位置 x 。數值使用者ID。數值組ID。使用者資訊:全名、辦公室、分機號、住家電話。初始工作目錄。登入shell。現在通常將加密的密碼放在 /etc/shadow 檔案中,這稱為隱蔽口令系統,使用這種機制時, /etc/passwd中的密碼欄位寫作 x 。可以用 vipw 命令編輯該檔案。可以用 pwconv 命令讓 shadow 檔案的內容和 passwd檔案的內容保持一致。 /etc/group檔案/etc/group 檔案包含了組的名稱和每個組中的成員的列表。 每一行為一個組,包含如下欄位: 組名。加密的密碼或 x ,後者表示有一個 /etc/gshadow 檔案。數值組ID。成員列表,以逗號隔開。組的密碼很少使用,一般將其設為 * 。 帳號管理可以手工建立和刪除使用者。一般為了方便,使用 useradd 命令建立使用者, usermod 和 userdel 可以修改和刪除使用者。 可以用 usermod -L user 和 usermod -U user 對使用者上鎖和解鎖,禁止使用者的登入。 passwd 命令可以修改使用者的密碼。 登入賬戶記錄Linux在 /var/run/utmp 檔案中記錄當前登入系統的使用者,在 /var/log/wtmp 檔案中記錄登入和登出事件。分別由 who 和 last 命令讀取和列印記錄。 檔案系統檔案系統的類型常見的有EXT2、EXT3和EXT4,Linux現在還支援Windows下的FAT和NTFS類型。還有一些使用不是很廣泛的如IBM的JFS類型。 在 /etc/fstab 檔案中包含了和檔案系統相對應的裝置的清單。 df 命令查看檔案系統的大小。 $ df -h /Filesystem Size Used Avail Use% Mounted on/dev/sda3 78G 3.7G 71G 5% /通過 mount 和 umount 命令安裝和卸載檔案系統,如: # mount /dev/hda5 /users將磁碟分割上 /dev/hda5 表示的檔案系統安裝到路徑 /users 下。 可以把建立的檔案系統添加到 /etc/fstab 檔案中來自動安裝。 在卸載時,如果核心說明裝置忙,可以運行 fuser -mv mpoint 來查看正在使用檔案系統上的資源的進程。fuser -v file 可以查看特定檔案的使用,使用 -k 選項可以殺死所有帶來麻煩的進程。一個更強大的替代程式是 lsof 。 fsck 命令可以檢查和修複檔案系統,通常檔案和資料區塊的錯誤引用可以通過它來修複。 組織圖在Linux下,不同的檔案按照約定被放到一些路徑下,通常安裝程式會對檔案的位置做一些假設,因此應該儘可能地保持這一預設的檔案樹結構。 /bin 最小系統所需的命令/boot 核心和載入核心所需的檔案/dev 終端、磁碟等的裝置項/etc 關鍵的開機檔案和設定檔/home 使用者的主目錄/lib C編譯器的庫和部分C編譯器/media 可移動介質上的檔案系統的安裝點/opt 可選的應用軟體包/proc 所有正在啟動並執行進程的映像/root 超級使用者的主目錄/sbin 引導、修複或恢複系統的命令/tmp 臨時空間(重啟時刪除)/usr 次要檔案和命令的階層/usr/bin 大多數命令和可執行檔/usr/include 編譯C程式的標頭檔/usr/lib 庫/usr/local 本地軟體(使用者編寫或安裝的)/usr/local/bin 本地的可執行檔/usr/local/etc 本地系統的設定檔和命令/usr/local/lib 本地庫/usr/local/sbin 靜態連結的本地系統維護命令/usr/local/src /usr/local/* 的原始碼/usr/man 聯機使用者手冊/usr/sbin 次要的系統管理命令和修複命令/usr/share 多種系統共同的東西/usr/share/man 聯機使用者手冊/usr/src 非本地軟體包的原始碼/var 系統專用資料和設定檔/var/log 系統記錄檔/var/spool 假離線目錄(印表機、郵件等使用)/var/tmp 臨時空間(重啟時保留)檔案類型Linux中有7種檔案類型:普通檔案、目錄、字元裝置檔案、塊裝置檔案、通訊端、具名管道、符號連結。 檔案類型 ls 中的符號 建立方式 刪除方式普通檔案 - 編輯器、 cp 等 rm目錄 d mkdir rmdir 、 rm -r字元裝置檔案 c mknod rm塊裝置檔案 b mknod rm通訊端 s socket(2) rm具名管道 p mknod rm符號連結 l ln -s rm普通檔案就是一個資料包,Linux沒有對它規定任何結構。 目錄包含按名字對其他檔案的引用。 . 和 .. 分別代表目錄本身和它的父目錄。檔案的名稱儲存在它的父目錄中,而不是存在檔案本身處。可以有多個目錄同時引用一個檔案,並且可以有不同的名稱,這種類型的引用稱為永久連結,使用 ln 命令建立,Linux維護指向每個檔案的連結的計數。永久連結不能跨檔案系統。 裝置檔案使程式能夠同系統的硬體和外圍裝置進行通訊。字元裝置檔案讓相關的驅動程式做它們自己的輸入和輸出緩衝。塊裝置檔案由處理塊資料I/O的驅動程式使用,核心為它們提供緩衝。裝置檔案用兩個數字表示其特徵,分別為主裝置號和次裝置號,主裝置號對應哪個驅動程式,次裝置號對應定址的物理單元。 通訊端是處理序間通訊的一種方式。本地區通訊端只能從本地訪問,通過檔案系統對象使用,也稱為UNIX域通訊端。 具名管道也是同一主機上處理序間通訊的方式。 符號連結也稱軟連結,符號連結是通過檔案名稱的引用,而不是永久連結的直接引用。核心尋找路徑時遇到符號連結時,就重新導向到連結儲存的路徑名上。 檔案屬性Linux檔案系統中,每個檔案有一個16位的字儲存的屬性資訊,其中包括12位元模式位和4位檔案類型資訊,模式位又分為9個控制使用者讀寫和執行許可權的許可權位和3個和可執行程式運行相關的許可權位。 9個許可權位分為三組,分別設定使用者、組和其他人的讀取、寫入和執行許可權。另外3個許可權位為 setuid 位、setgid 位和粘住位。經常用八進位的數來表示許可權位。 值 許可權位 值 許可權位 值 許可權位 值 許可權位4000 setuid 400 使用者讀許可權 40 組讀許可權 4 其他讀許可權2000 setgid 200 使用者寫入權限 20 組寫入權限 2 其他寫入權限1000 粘住位 100 使用者執行許可權 10 組執行許可權 1 其他執行許可權對可執行檔設定 setuid 位和 setgid 位使程式可以訪問執行程式的使用者無權訪問的檔案和進程。對目錄設定 setgid 位使目錄中建立的檔案具有目錄的組許可權而不是建立檔案的使用者的組。對目錄設定粘住位後,必須是目錄的使用者、檔案的使用者或超級使用者,才可以刪除或重新命名目錄中的檔案。 在 ls -l 命令中,分別用 r 、 w 、 x 表示讀、寫、執行許可權, setuid 、 setgid 、粘住位分別在使用者、組和其他的執行許可權位上用 S 、 S 、 T 表示,同時設定了對應的可執行許可權時用小寫表示。 ls -l 命令的輸出的其他項為永久連結數、使用者、組、大小、修改日期、路徑。 使用 chmod 命令修改許可權,使用 chown 命令改變使用者和組。 $ chmod 755 dir$ chmod -R u+w dir$ chmod ug=srx,o= file$ chown -R yeolar:yeolar dir硬碟關於硬碟的知識這裡不進行詳細說明,可以看一些相關的參考書。 目前常見的硬碟介面有PATA(IDE)、SATA和SCSI,SATA是IDE的後續技術。在Linux系統中,一般用sdxn 形式的名稱表示SCSI硬碟, x 為 a b c ... 代表不同的硬碟, n 為數字代表不同的分區。用 hdxn 形式的名稱表示IDE和SATA硬碟, x 和 n 的含義和SCSI硬碟的一樣。 為硬碟分區使用 fdisk 命令。建立檔案系統和交換分區使用如 mke2fs 和 mkswap 命令, swapon 命令啟用交換分區。 Linux的硬碟管理有兩個重要的工具:RAID和LVM。Linux核心提供了建立軟RAID的支援,一般使用 mdadm命令。LVM是一種可選的子系統,使用它可以將多個硬碟組成卷組,分配為邏輯卷,還可以動態改變邏輯卷的大小。 USB裝置lsusb 命令列出核心已經發現的USB裝置。核心用什麼裝置檔案表示已發現的裝置可以查看系統日誌/var/log/kern.log 。