設備管理
Linux系統中設備是用文件來表示的,每種設備都被抽象為設備文件的形式,這樣,就給應用程序一個一致的文件界面,方便應用程序和操作系統之間的通信。
設備文件集中放置在/dev目錄下,一般有幾千個,不管有沒有對應的真實設備,Linux系統在安裝的時候都會自動預先創建。
磁盤設備
Linux系統磁盤設備命名方式遵循一定的規則。
前兩個字母表示分區所在設備的類型:
- hd:IDE硬盤
- sd:SCSI硬盤(U盤,移動硬盤等)
第三個字母表示分區在哪個設備上 - hda:第一塊IDE硬盤
- sda:第一塊SCSI硬盤
- sdb:第二塊SCSI硬盤
數字表示分區的次序:
- hda1:第一塊IDE硬盤第一分區
- sdb2:第二塊SCSI硬盤第二個分區
查看硬盤及分區情況
fdisk -l
lsblk
掛載的文件系統類型
可以掛載:ext、FAT、NTFS 、 ext2(extended file system )、ext3、MINIX、MSDOS、SYSV
- Linux系統的第一個文件系統是Minix(文件名不能超過14個字符,文件大小不能超過64MB)
- ext:1992年設計,是第一個專為linux設計的文件系統,文件大小可到2GB,文件名支持255字符,性能不佳
- ext2: 1993年設計,提高性能
- ext3:采用日志式文件系統技術(Journaling File System,獨立的日志文件跟蹤磁盤內容的變化),目前各個linux發行版使用
VFS
Linux引進ext文件系統時有了一個重大的改進:把文件系統從操作系統和系統服務中分離出來,在它們之間使用了一個接口層—虛擬文件系統VFS(Virtual File System)
Linux系統可以支持多種文件系統,為此,必須使用一種統一的接口,這就是虛擬文件系統(VFS)。通過VFS將不同文件系統的實現細節隱藏起來,因而從外部看上去,所有的文件系統都是一樣的。
VFS并不是一個實際的文件系統:只存在于內存,系統啟動時建立,系統關閉時消亡
VFS功能包括:
- 記錄可用文件系統的類型
- 將設備與對應的文件系統聯系起來
- 處理面向文件的通用操作
- 涉及到針對文件系統的操作時,把他們映射到相關的物理文件系統
掛載設備信息
計算機系統中,所有的存儲設備都是以目錄樹的形式對文件進行管理的 。
在Linux系統中,所有的文件都是在以“/”目錄為根的一棵“大”目錄樹中進行管理。
如果要使用USB存儲設備、光盤或軟盤等存儲設備,必須將這些設備中的“小”目錄樹像嫁接一樣掛載(mount)到Linux系統的“大”目錄樹中。
掛載對象的文件系統類型:/proc/filesystems
vfat (fat32) ext2 ext3 iso9660
掛載對象的設備名稱;
在Linux系統中,設備名稱通常都在/dev目錄下,設備名稱的命名是有規則的 ;
/dev/hda1 /dev/sda2 /dev/fd0 /dev/cdrom
設備掛載到哪一目錄,即掛載點。
Linux系統中有一個/mnt目錄,專門用作掛載點(mount point)目錄
在掛載設備時首先查看掛載點目錄是否存在,如果不存在必須首先創建該目錄,否則mount命令無法正常執行。
掛載設備過程
- 查看設備:使用命令“fdisk -l”可以查看系統的存儲設備
- 掛載設備 :首先使用mkdir命令建立掛載點目錄,然后再使用mount命令掛載相關設備
- 訪問設備
- 卸載設備 :用戶在使用完掛載設備后,不能直接將掛載設備從系統拔出,否則會出現問題,嚴重的會導致系統崩潰。用戶必須先執行卸載命令然后再該設備拔出
umount [掛載點或設備名]
mkfs
mkfs [選項][-t <文件系統類型>] [設備名稱] [區塊數]
說明:把指定的設備格式為指定的文件系統。
例如
- 格式化硬盤時:
mkfs -t ext3 /dev/hda4
- 格式化軟盤時,需要指定設備名和區塊數,每個區塊大約1000個字節,一張1.44MB的軟盤對應1440個區塊。格式化指令為:
mkfs -t ext3 /dev/fd0 1440
mount
mount [選項] <掛載設備名稱> <掛載點>
選項:
- t 掛載的文件系統 [ext2 ext3 vfat iso9660]
例如:
mount -t ext3 /dev/fd0 /mnt/floppy - o [參數=值] ,對于掛載的不同類型的設備可以使用一組不同的參數。[ro rw auto iocharset]
mount -o iocharset=cp936 /dev/sda1 /mnt/usb
df
磁盤空間使用情況
df [選項]
- a : 顯示所有文件系統的磁盤使用情況
- h : 以友好直觀方式顯示信息,即以KB或MB為單位
- T : 顯示文件系統類型
例子:以友好直觀方式顯示所有文件系統的使用情況,并列出文件系統類型
df -ahT
du
統計目錄或文件所占磁盤空間大小
du [選項/參數] [目錄名…]
- a : 遞歸顯示制定目錄中各個文件及下級目錄中各文件占用的數據塊數
- h : 以友好直觀方式顯示信息,即以KB或MB為單位
- b : 以字節為單位列出磁盤空間使用情況
- k : 以KB為單位顯示
- s : 對每個目錄參數只給出占用的數據塊總數
例子:以KB為單位,顯示/tmp目錄占用的磁盤空間情況
du -k /tmp
賬號管理和查看命令
- whoami命令的功能在于顯示用戶自身的用戶名。
- who [選項]:該命令主要用于查看當前在線的用戶情況
-H:顯示時加上頭標志 - w命令 :用于顯示登錄到系統的用戶情況,是who的增強版 w | more
- id [選項] : 顯示用戶信息
-g:顯示工作組信息
-u:顯示用戶信息 - finger命令:可用于查找和顯示用戶信息,并且在查找后顯示指定賬號的相關信息
- chfn命令:能夠改變系統存儲的用戶信息
- 切換用戶身份:su [用戶名]
進程
進程的概念
Linux操作系統包括三種不同類型的進程,每種進程都有自己的特點和屬性:
- 交互進程:由shell啟動的進程。
- 批處理進程:這種進程和終端沒有聯系,是一個進程序列。
- 守護進程:在后臺持續運行的進程。
啟動進程/手工啟動
- 前臺啟動:一般地,用戶鍵入一個命令,就已經啟動了一個前臺的進程。
中斷前臺進程
ctrl+c/
kill - 后臺啟動:對于非常耗時進程,可以讓進程在后臺運行。從后臺啟動進程其實就是在命令結尾加上一個“&”號,例:updaedb &
- jobs 顯示所有后臺進程
- ctrl+z 前臺->后臺,并暫停
- fg 將后臺進程調到前臺執行
- bg 將一個后臺暫停的進程,繼續執行
at
指定在將來的某個時間點執行某些命令,通過atd守護進程來實現
systemctl status atd
at [選項] TIME
at -l / atq #列出所有的作業
at -d / atrm 任務號 #刪除作業
at -q #指定隊列來存儲(默認為a隊列),隊列的編號為a-z A-Z,共52個,字母越大,優先級越低。
執行方式:
-
交互式
在shell提示符下輸入“at 時間”,然后按回車鍵。這時在下一行shell會等待用戶繼續輸入要執行的命令。每一行輸入一個命令,所有命令都輸入完畢后按Ctrl+d鍵結束。 -
指定文件
將各個命令寫入shell腳本中,然后使用下面格式設置在指定時間執行shell腳本中的命令:
at 時間 -f 腳本文件。
執行結果會發郵件通知
/var/spool/mail/xxx
時間格式
- 具體時間日期 hh:mm MM/DD/YY
23:59 03/15/2017 - 模糊詞語格式 hh:mm midnight tomorrow am…
17:20 tomorrow - 相對計時法 時間點 + 多少 + 時間單位
now + 2 minutes
5pm + 3 days
cron
at命令產生的進程調度不具有周期性,只能在時間條件滿足時執行一次。但很多時候需要重復地周期性地執行某個程序。crontab用來讓使用者在固定時間或固定時間間隔執行程序。
格式:
crontab [ -u user ] 文件
crontab [ -u user ] { -l | -r | -e }
只有root用戶可以指定他人的時間表
主要參數
- e:執行文字編輯器來設定時程表,內定的文字編輯器是vi
- r:刪除目前的時程表
- l:列出目前的時程表
和at命令相比,crontab命令適合完成固定周期的任務
原理
- cron命令在系統啟動時由一個shell腳本自動啟動,進入后臺,crond守護進程。
- cron啟動后搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的crontab文件,被找到的這種文件將載入內存。
- 如果沒有crontab文件,就轉入“休眠”狀態,釋放系統資源。
- cron每分鐘“醒”過來一次,查看當前是否有需要運行的命令。
- 如果發現某個用戶設置了crontab文件,它將以該用戶的身份去運行文件中指定的命令。命令執行結束后,任何輸出都將作為郵件發送給crontab的所有者,或者/etc/crontab文件中MAILTO環境變量中指定的用戶。
對用戶來說,只需要關注自己的crontab文件的撰寫,不需干涉crond進程的執行。因為一個用戶只有一個crontab文件,crontab文件不能直接創建或者直接修改,必須通過crontab命令得到。crontab命令用于安裝、刪除或者列出用于驅動cron后臺進程的crontab文件 。
crontab源文件格式
<minute> <hour> <day-of-month> <month-of-year> <day-of-week> <commands>
- f1: 分鐘,00-59
- f2: 小時,00-23
- f3: 一個月份中的第幾天,01-31
- f4: 月份,01-12
- f5: 一個星期中的第幾天,0-6
- commands: 要執行的程序
# 每月每天12點執行一次echo hello
0 12 * * * echo hello
# 在12月內,每天早上6點到12點,每隔20分鐘執行一次/usr/bin/backup
*/20 6-12 * 12 * /usr/bin/backup
# 每月每天的午夜0點20分,2點20分,4點20分…顯示當前時間
20 0-23/2 * * * date
進程管理
ps
進程查看命令
ps [選項]
主要選項的含義如下:
- e:顯示所有進程;
- f : 采用全格式顯示;
- h:不顯示標題;
- l:采用詳細的格式來顯示進程;
- a:顯示所有終端上的進程,包括其他用戶的進程;
- r:只顯示當前終端上正在運行的進程;
- x:顯示所有進程,不以終端來區分;
- u:以用戶為主的格式來顯示進程;
pstree
進程查看命令
pstree [選項] [pid | user]
主要選項的含義如下:
- a:顯示該進程的完整指令及參數;
- p : 顯示是將PID號一起顯示;
- pid:指定顯示某進程信息;
- user:指定顯示某用戶信息;
kill
刪除進程命令
kill [-s <信號> | -p ] [ -a ] <進程號> ..
kill -l [信號] :顯示信號詳情
選項的含義如下:
- s:指定需要送出的信號。既可以是信號名也可以是信號名對應的數字。
- HUP(1):重跑 kill -1
- KILL(9):強制殺死 kill -9
- TERM(15) (預設信號):結束 kill -15
強行中止(經常使用殺掉)一個進程標識號為324的進程:kill -9 324
作用:
- 解除Linux系統的死鎖
- 使用命令回收內存
killall
Linux下還提供了一個killall命令,可以直接使用進程的名字而不是進程標識號,例如:
killall -HUP inetd
top
系統監控命令:能顯示實時的進程列表,而且還能實時監視系統資源,包括內存、交換分區和CPU的使用率等。
top命令使用過程中,可以使用一些交互的命令來完成其它參數的功能。這些命令是通過快捷鍵啟動的。
- <空格>:立刻刷新。
- P:根據CPU使用大小進行排序。
- M:根據使用內存大小進行排序。
- T:根據時間、累計時間排序。
- t:切換顯示進程和CPU狀態信息。
- m:切換顯示內存信息。
- c:切換顯示命令名稱和完整命令行。
- q:退出top命令。
free
查看系統內存的使用情況
日志查看
日志文件(log files)是包含關于系統消息的文件,包括內核、服務、在系統上運行的應用程序等。
不同的日志文件記載不同的信息。
多數的日志文件位于/var/log目錄下。
某些程序(如samba)在/var/log中有單獨的日志文件目錄。
日志可以滾動
多數日志文件都使用純文本格式,可以使用任何文本編輯器如vi來查看它們。
大多數日志文件都需要擁有特權才允許查看。
系統初始化過程
BIOS初始化
主要負責計算機硬件檢測,確定啟動引導順序,并從可引導設備中加載和執行引導程序(如磁盤主引導分區MBR) ,確定從哪里可以引導并啟動操作系統,引導成功后,交由內核負責
GRUB加載
Boot Loader(啟動加載)管理程序
將引導裝載程序安裝到主引導記錄(MBR)的程序
用戶能夠開始操作系統的選擇,在內核引導時傳遞特定指令給內核,或是在內核引導前確定一些系統參數。
支持命令交互工具,提供非常方便的引導程序修復功能,并支持引導菜單的加密保護
內核初始化
用戶在GRUB引導菜單中選擇了合適的啟動項后,操作系統正式進入加載內核的功能。
內核初始化:
- 硬件設備的檢測
- 設備驅動程序的初始化
- 以只讀方式掛載根文件系統
- 啟動第一個應用進程init
第一個初始進程init啟動
當內核啟動之后,通過啟動用戶級程序init來完成引導進程的內核部分。
init總是第一個進程(PID=1)
init進程扮演了終極父進程的角色,失去了父進程的子進程就會以init作為它們的父進程。
確定系統運行級別
讀取配置文件/etc/inittab,這是一個系統初始化腳本程序,用于確定系統啟動的運行級別,定義系統常規功能。
運行系統初始化腳本
/etc/rc.d/rc.sysinit 是系統的初始化腳本,系統的大部分功能都由這個腳本實現
運行指定級別目錄內的腳本
每一個特定的運行級別都會有一個與之相對應的目錄,共有7個運行界別(/etc/rc.d/rc[x].d),每一個運行級別的目錄內都有一些可執行腳本。
運行用戶自定義腳本
用戶可以自定義一些系統啟動時啟動的腳本,通過修改/etc/rc.d/rc.local的內容來增加用戶自己需要的功能。