Shell編程
1. bash的功能
1.tab補全 2.歷史補全 3.別名alias 4通配符
2. 變量
1.環境變量
(PATH路徑 HOME當前用戶的工作目錄 MAIL郵件設置 LANG語言LOGNAME顯示用戶名稱)事先定義好的,可以修改
2.用戶自定義變量
root#vname=“TOM_Tesson”
#echo $vname
#TOM_Tesson
注意事項:
1.名字 不能數字開頭和特殊字符
2.賦值(=) =兩邊不能有空格,內容也不能有空格
3.用雙引號 " "包含名字
4.雙引號特殊字符
注意,變量名和等號之間不能有空格
- 命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭。
- 中間不能有空格,可以使用下劃線(_)。
- 不能使用標點符號。
- 不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。
-
使用變量
使用一個定義過的變量,只要在變量名前面加美元符號即可
-
只讀變量
使用 readonly 命令可以將變量定義爲只讀變量,只讀變量的值不能被改變。
-
刪除變量
使用 unset 命令可以刪除變量。
3.Shell 字符串
單引號
str='this is a string'
單引號字符串的限制:
- 單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作爲字符串拼接使用。
雙引號
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
輸出結果爲:
Hello, I know you are "runoob"!
雙引號的優點:
- 雙引號裏可以有變量
- 雙引號裏可以出現轉義字符
拼接字符串
your_name="runoob"
# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
輸出結果爲:
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
獲取字符串長度
string="abcd"
echo ${#string} #輸出 4
提取子字符串
以下實例從字符串第 2 個字符開始截取 4 個字符:
string="runoob is a great site"
echo ${string:1:4} # 輸出 unoo
查找子字符串
查找字符 i 或 o 的位置(哪個字母先出現就計算哪個):
string="runoob is a great site"
echo `expr index "$string" io` # 輸出 4
注意: 以上腳本中 ` 是反引號,而不是單引號 ',不要看錯了哦。
4.Shell 數組
bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。
類似於 C 語言,數組元素的下標由 0 開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於 0。
定義數組
在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式爲:
數組名=(值1 值2 ... 值n)
讀取數組
讀取數組元素值的一般格式是:
${數組名[下標]}
獲取數組的長度
獲取數組長度的方法與獲取字符串長度的方法相同,例如:
# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}
獲取數組中的所有元素
使用@ 或 * 可以獲取數組中的所有元素,例如:
#!/bin/bash
# author:菜鳥教程
# url:www.runoob.com
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "數組的元素爲: ${my_array[*]}"
echo "數組的元素爲: ${my_array[@]}"
執行腳本,輸出結果如下所示:
$ chmod +x test.sh
$ ./test.sh
數組的元素爲: A B C D
數組的元素爲: A B C D
5.Shell 註釋
單行註釋
以 # 開頭的行就是註釋,會被解釋器忽略。
通過每一行加一個 # 號設置多行註釋
多行註釋
多行註釋還可以使用以下格式:
:<<EOF
註釋內容...
註釋內容...
註釋內容...
EOF
EOF 也可以使用其他符號:
:<<'
註釋內容...
註釋內容...
註釋內容...
'
:<<!
註釋內容...
註釋內容...
註釋內容...
!
6.Shell 傳遞參數
我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式爲:$n。n 代表一個數字,1 爲執行腳本的第一個參數,2 爲執行腳本的第二個參數,以此類推……
$# | 傳遞到腳本的參數個數 |
---|---|
$* | 以一個單字符串顯示所有向腳本傳遞的參數。 如"$*“用「”」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 |
$$ | 腳本運行的當前進程ID號 |
$! | 後臺運行的最後一個進程的ID號 |
$@ | 與@“用「”」括起來的情況、以"$1" “n” 的形式輸出所有參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |
7.Shell echo命令
Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用於字符串的輸出。命令格式:
echo string
您可以使用echo實現更復雜的輸出格式控制。
1.顯示普通字符串:
echo "It is a test"
這裏的雙引號完全可以省略,以下命令與上面實例效果一致:
echo It is a test
2.顯示轉義字符
echo "\"It is a test\""
結果將是:
"It is a test"
同樣,雙引號也可以省略
3.顯示變量
read 命令從標準輸入中讀取一行,並把輸入行的每個字段的值指定給 shell 變量
#!/bin/sh
read name
echo "$name It is a test"
以上代碼保存爲 test.sh,name 接收標準輸入的變量,結果將是:
[root@www ~]# sh test.sh
OK #標準輸入
OK It is a test #輸出
4.顯示換行
echo -e "OK! \n" # -e 開啓轉義
echo "It is a test"
輸出結果:
OK!
It is a test
5.顯示不換行
#!/bin/sh
echo -e "OK! \c" # -e 開啓轉義 \c 不換行
echo "It is a test"
輸出結果:
OK! It is a test
6.顯示結果定向至文件
echo "It is a test" > myfile
7.原樣輸出字符串,不進行轉義或取變量(用單引號)
echo '$name\"'
輸出結果:
$name\"
8.顯示命令執行結果
echo `date`
注意: 這裏使用的是反引號 `, 而不是單引號 '。
結果將顯示當前日期
8.Shell printf 命令
%s %c %d %f都是格式替代符
%-10s 指一個寬度爲10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。
%-4.2f 指格式化爲小數,其中.2指保留2位小數。
9.Shell test 命令
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
數值測試
參數 | 說明 |
---|---|
-eq | 等於則爲真 |
-ne | 不等於則爲真 |
-gt | 大於則爲真 |
-ge | 大於等於則爲真 |
-lt | 小於則爲真 |
-le | 小於等於則爲真 |
字符串測試
參數 | 說明 |
---|---|
= | 等於則爲真 |
!= | 不相等則爲真 |
-z 字符串 | 字符串的長度爲零則爲真 |
-n 字符串 | 字符串的長度不爲零則爲真 |
文件測試
參數 | 說明 |
---|---|
-e 文件名 | 如果文件存在則爲真 |
-r 文件名 | 如果文件存在且可讀則爲真 |
-w 文件名 | 如果文件存在且可寫則爲真 |
-x 文件名 | 如果文件存在且可執行則爲真 |
-s 文件名 | 如果文件存在且至少有一個字符則爲真 |
-d 文件名 | 如果文件存在且爲目錄則爲真 |
-f 文件名 | 如果文件存在且爲普通文件則爲真 |
-c 文件名 | 如果文件存在且爲字符型特殊文件則爲真 |
-b 文件名 | 如果文件存在且爲塊特殊文件則爲真 |
10.Shell 輸入/輸出重定向
大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出發送回到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,默認情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,默認情況下,這也是你的終端。
重定向命令列表如下:
命令 | 說明 |
---|---|
command > file | 將輸出重定向到 file。 |
command < file | 將輸入重定向到 file。 |
command >> file | 將輸出以追加的方式重定向到 file。 |
n > file | 將文件描述符爲 n 的文件重定向到 file。 |
n >> file | 將文件描述符爲 n 的文件以追加的方式重定向到 file。 |
n >& m | 將輸出文件 m 和 n 合併。 |
n <& m | 將輸入文件 m 和 n 合併。 |
<< tag | 將開始標記 tag 和結束標記 tag 之間的內容作爲輸入。 |
需要注意的是文件描述符 0 通常是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。
11.Shell 文件包含
和其他語言一樣,Shell 也可以包含外部腳本。這樣可以很方便的封裝一些公用的代碼作爲一個獨立的文件。
Shell 文件包含的語法格式如下:
. filename # 注意點號(.)和文件名中間有一空格
或
source filename
程序1
功能:打印輸出
#vi sh1.sh
#! /bin/bash bash的命令腳本
PATH= /bin:/sbin:/usr/bin
/bin是系統的一些命令
/sbin一般是指超級用戶指令
/usr/bin是你在後期安裝的一些軟件的運行腳本
/usr/sbin 放置一些用戶安裝的系統管理的必備程序
export PATH 定義環境變量
echo -e “Hello World”
read -p “input val” test1 打印輸入提示,並把“input val”保存到test1中
echo $tset
exit 0
程序2
功能:求兩數之和
#vi sh2.sh
test -e:是否爲文件名
test -f:是否爲一般文件
test -d:是否是目錄
test -r:是否可讀
test -w:是否可寫
test -x:是否可執行
test -eq:是否相等
test -ne:是否不等
test -gt:是否大於
#vi sh2.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
read -p “enter first num” num1
read -p “enter second num” num2
total = $(num1*num2)
echo -e “result is $total”
test -e $file && echo “exist” || echo “no exist”
exist 0
程序3
功能:判斷文件的類型和權限類型
#vi sh3.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
echo -e “input file name”
read -p fname
test -z $fname && echo “input please” && exit 0
test !-e $fname && echo “file no exist” && exit 0
test -f $fname && ftype = “regular file”
test -d $fname && ftype = “dir”
test -r $fname && perm = “readable”
test -w KaTeX parse error: Expected 'EOF', got '&' at position 7: fname &̲& perm = "perm writable"
echo “fname:$fname is $type”
echo “and permission is $perm”
程序5
功能:查看系統服務是否開啓
#vi sh3.sh
#! /bin/bash
PATH = /bin:/sbin:/usr/bin
export PATH
test1 = $(netstat -tuln|grep “:80”)
if ["$test1"!=""]; then
echo “www server is running”
fi
test1 = $(netstat -tuln|grep “:22”)
if ["$test1"!=""]; then
echo “ssh is running”
fi
test1 = $(netstat -tuln|grep “:21”)
if ["$test1"!=""]; then
echo “FTP is running”
fi
Linux
Linux系統的特點
1)開源,免費
2)穩定
3)硬件要求低
4)多任務
5)軟件支持不足 主要指硬件(驅動)和軟件
6)操作的易用性:有圖形界面
柱面與扇區
Linux以柱面分,以扇面訪問
啓動過程
MBR:機器啓動
BIOS(啓動)
Boot Loader:加載操作系統內核
PT:分區表
-
有四個分區
-
最多存一個擴展分區
-
邏輯分區在擴展分區劃分
-
命名:文件fhs
1.雙系統可以做到兩個分區
2.虛擬機裝2個系統
分區的作用
注:裝系統之前要進行分區
-
方便管理
-
提高數據安全
-
提高數據的訪問速度
詳解:
-
內核的引導。
當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啓動設備(通常是硬盤)來啓動。
操作系統接管硬件以後,首先讀入 /boot 目錄下的內核文件。
-
運行 init。
init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啓動。
init 程序首先是需要讀取配置文件 /etc/inittab。
- SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
- Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
- Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
Linux系統有7個運行級別(runlevel):
- 運行級別0:系統停機狀態,系統默認運行級別不能設爲0,否則不能正常啓動
- 運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸
- 運行級別2:多用戶狀態(沒有NFS)
- 運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式
- 運行級別4:系統未使用,保留
- 運行級別5:X11控制檯,登陸後進入圖形GUI模式
- 運行級別6:系統正常關閉並重啓,默認運行級別不能設爲6,否則不能正常啓動
-
系統初始化。
在init的配置文件中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本。
它主要完成的工作有:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。
-
建立終端 。
rc執行完畢後,返回init。這時基本系統環境已經設置好了,各種守護進程也已經啓動了。
init接下來會打開6個終端,以便用戶登錄系統。
-
用戶登錄系統。
一般來說,用戶的登錄方式有三種:
- (1)命令行登錄
- (2)ssh登錄
- (3)圖形界面登錄
圖形模式與文字模式的切換方式
Linux預設提供了六個命令窗口終端機讓我們來登錄。
默認我們登錄的就是第一個窗口,也就是tty1,這個六個窗口分別爲tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 來切換它們。
如果你安裝了圖形界面,默認情況下是進入圖形界面的,此時你就可以按Ctrl + Alt + F1 ~ F6來進入其中一個命令窗口界面。
當你進入命令窗口界面後再返回圖形界面只要按下Ctrl + Alt + F7 就回來了。
如果你用的vmware 虛擬機,命令窗口切換的快捷鍵爲 Alt + Space + F1~F6. 如果你在圖形界面下請按Alt + Shift + Ctrl + F1~F6 切換至命令窗口。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-56Edk64U-1572060962373)(D:\typoraImage\1571812365415.png)]
管是重啓系統還是關閉系統,首先要運行 sync 命令,把內存中的數據寫到磁盤中。
關機的命令有 shutdown –h now halt poweroff 和 init 0 , 重啓系統的命令有 shutdown –r now reboot init 6。
Linux系統中常見文件系統格式
Windows常用的分區格式有三種,分別是FAT16、FAT32、NTFS格式。
在Linux操作系統裏有Ext2、Ext3、Linux swap和VFAT四種格式。 FAT16: 作爲一種文件名稱,FAT(File Allocation Table,文件分配表)自1981年問世以來,已經成爲一個計算機術語。由於時代的原因,包括Windows、MacOS以及多種Unix版本在內的大多數操作系統均對FAT提供支持。
這是MS-DOS和最早期的Windows 95操作系統中使用的磁盤分區格式。它採用16位的文件分配表,是目前獲得操作系統支持最多的一種磁盤分區格式,幾乎所有的操作系統都支持這種分區格式,從DOS、Windows 95、Windows OSR2到現在的Windows 98、Windows Me、Windows NT、Windows 2000、Windows XP都支持FAT16,但只支持2GB的硬盤分區成爲了它的一大缺點。FAT16分區格式的另外一個缺點是:磁盤利用效率低(具體的技術細節請參閱相關資料)。爲了解決這個問題,微軟公司在Windows 95 OSR2中推出了一種全新的磁盤分區格式——FAT32。 FAT32: 這種格式採用32位的文件分配表,對磁盤的管理能力大大增強,突破了FAT16下每一個分區的容量只有2GB的限制。由於現在的硬盤生產成本下降,其容量越來越大,運用FAT32的分區格式後,我們可以將一個大容量硬盤定義成一個分區而不必分爲幾個分區使用,大大方便了對磁盤的管理。而且,FAT32與FAT16相比,可以極大地減少磁盤的浪費,提高磁盤利用率。目前,Windows 95 OSR2以後的操作系統都支持這種分區格式。但是,這種分區格式也有它的缺點。首先是採用FAT32格式分區的磁盤,由於文件分配表的擴大,運行速度比採用FAT16格式分區的磁盤要慢。另外,由於DOS和Windows 95不支持這種分區格式,所以採用這種分區格式後,將無法再使用DOS和Windows 95系統。
NTFS: 爲了彌補FAT在功能上的缺陷,微軟公司創建了一種稱作NTFS的文件系統技術。它的優點是安全性和穩定性方面非常出色,在使用中不易產生文件碎片。並且能對用戶的操作進行記錄,通過對用戶權限進行非常嚴格的限制,使每個用戶只能按照系統賦予的權限進行操作,充分保護了系統與數據的安全。Windows 2000、Windows NT、以及Windows XP都支持這種分區格式。
Ext2: Ext2是GNU/Linux系統中標準的文件系統。這是Linux中使用最多的一種文件系統,它是專門爲Linux設計的,擁有極快的速度和極小的CPU佔用率。Ext2既可以用於標準的塊設備(如硬盤),也被應用在軟盤等移動存儲設備上。 Ext3: Ext3是Ext2的下一代,也就是保有Ext2的格式之下再加上日誌功能。Ext3是一種日誌式文件系統(Journal File System),最大的特點是:它會將整個磁盤的寫入動作完整的記錄在磁盤的某個區域上,以便有需要時回溯追蹤。當在某個過程中斷時,系統可以根據這些記錄直接回溯並重整被中斷的部分,重整速度相當快。該分區格式被廣泛應用在Linux系統中。
Linux swap: 它是Linux中一種專門用於交換分區的swap文件系統。Linux是使用這一整個分區作爲交換空間。一般這個swap格式的交換分區是主內存的2倍。在內存不夠時,Linux會將部分數據寫到交換分區上。 VFAT: VFAT叫長文件名系統,這是一個與Windows系統兼容的Linux文件系統,支持長文件名,可以作爲Windows與Linux交換文件的分區。
磁盤分區
a、磁盤的第一個扇區
主要啓動記錄區(Master Boot Record, MBR):可以安裝啓動管理程序的地方,有446 bytes
分區表(partition table):記錄整顆硬盤分區的狀態,有64 bytes
b、磁盤分區表
如何分區
在分區表所在的64 bytes容量中,總共分爲四組記錄區,每組記錄區記錄了該區段的起始與結束的柱面號碼
詳細說明
其實所謂的分區只是針對分區表進行配置而已
硬盤默認分區表僅能寫入四組分區信息
這四組分區我們稱爲 主分區 或 拓展分區
分區最小單位爲磁柱(cylinder),根據柱面的編號來進行分區
當系統要寫入硬盤時,一定會參考磁盤分區表,才能針對某個分區進行數據的處理
磁盤分區能夠保證數據的安全和提高系統的性能
邏輯分區和拓展分區是什麼
擴展分區的目的是使用額外的磁區來記錄分區資訊,本身不能格式化;
拓展分區完全可以看作一塊獨立的磁盤,也擁有自己的分區表;
對拓展分區進行進一步的分區可以得到邏輯分區;
邏輯分區的編號從5開始,1到4被磁盤默認的分區表給保留了;
主分區、擴展分配與邏輯分區的特性
主分區和擴展分區的數量最多爲4(硬盤的限制)
擴展分配最多只能有一個(操作系統的限制)
主要分區與邏輯分區可以格式化,擴展分配無法格式化
邏輯分區的數量依操作系統而不同,在Linux系統中,SATA硬盤最多有11個邏輯分區
系統安裝和啓動
a、linux 的啓動流程
BIOS:開機第一個運行的程序,根據設置加載啓動的介質(通常是硬盤);
MBR:第一個可啓動裝置的第一個磁區內的主要啓動記錄區塊,內含啓動管理程序;
啓動管理程序(boot loader):作用是加載和運行系統內核;
核心文件:開始操作系統的功能
b、關於 boot loader 的說明
loader 的主要功能:
提供啓動選擇菜單(GRUB)
加載核心文件開啓操作系統
啓動管理轉交其他loader
bootloader是由操作系統安裝的,除了安裝在MBR,還可以安裝在每個分區的啓動磁區,這也是多系統安裝的基礎
loader只會認識自己分區的可啓動核心文件,以及其他loader
c、linux和windows雙系統安裝
最好先安裝Windows再安裝Linux,windows安裝程序會強制覆蓋磁盤的MBR和所在盤的啓動磁區,並且不會提供啓動的選擇菜單
d、Linux安裝磁盤分區選擇
linux的文件目錄樹結構
文件系統與目錄樹的關係(掛載):所謂的掛載就是利用一個目錄當成進入點,將磁盤分區的數據放置在該目錄下,那個進入點的目錄我們稱爲掛載點
安裝簡單分區:只分一份根分區和一個交換分區,再預留一個空白的空間以備使用
Linux文件權限與目錄配置
1、文件權限
a、使用者和羣組
文件擁有者(user)、羣組(group)、其他人(others)的概念
相關的三個文件:/etc/passwd(用戶) /etc/shadow(密碼) /etc/group(羣組)
b、文件權限概念
如何改變文件屬性與權限
chgrp:只能修改文件所屬的組
chown:文件的擁有者和所屬的羣組都可以修改
chmod:改變權限,可以用數字和字母兩種方法進行權限的設定
數字方法:r(4)w(2)x(1)
字母方法:u、g、o、a + | - | = r、w、x
目錄和文件權限
文件權限:
linux文件是否可以執行是看權限而不是後綴名;
文件的寫權限是修改文件的權限而不是刪除文件的權限,
文件能否刪除看所屬的目錄是否具有 w 權限;
目錄權限:目錄的主要作用是記錄文件名列表
目錄的讀權限:讀文件名列表
目錄的寫權限:針對文件名的異動(新建、移動、刪除、改名)
目錄的執行權限:有執行權限就可以進入該目錄,沒有的話就不能進入到該目錄
目錄權限使用的注意點:
如果你在某目錄下不具有x的權限,就無法進入該目錄,也就無法執行該目錄下的任何指令
開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給
c、linux文件類型
普通文件 [-]
目錄文件 [d]
塊設備文件 [b]:就是硬盤等存取數據的設備
字符設備文件 [c] :即串行端口的接口設備,例如鍵盤、鼠標等等
套接字文件 [s]:這類文件通常用在網絡數據連接
管道文件 [p]:FIFO是first-in-first-out(先進先出)的縮寫,它主要的目的是解決多個程序同時存取一個文件所造成的錯誤
鏈接文件 [l]:類似Windows下面的快捷方式
在linux中擴展名僅僅是來區分這是一個什麼樣的文件的,和是否可執行無關
2、目錄配置
a、Linux目錄配置規範(FHS文件系統層次結構標準)
FHS將目錄定義成爲四種類型:
可分享的:可以分享給其他系統掛載使用的目錄,包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;
不可分享的:自己機器上運行的設備文件或者是與程序有關的socket文件等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了;
不變的:有些數據是不會經常變動的,跟隨着distribution而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;
可變動的:經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等
FHS針對目錄樹架構規定以下三層目錄下應該放置什麼數據:
/ (root):根目錄與開機/還原/系統修復等動作有關
/usr (unix software resource):與軟件安裝/執行有關
/var (variable):與系統運作過程有關
b、根目錄的意義與內容
注意事項
根目錄(/)所在分區應該越小越好,安裝軟件最好不要與根目錄放在同一個分區,這樣性能比較好,根目錄所在的文件系統也較不容易發生問題
/etc /bin /sbin /dev /lib 這五個目錄必須和根目錄在同一個分區
根目錄詳解
/boot:包含linux內核文件(vmlinuz)、開機選項菜單、開機配置文件和GRUB
/lib:開機會調用的函數庫和bin和sbin目錄指令會調用的函數庫
/media和/mnt:media掛載光盤,mnt掛載硬盤
/opt:第三方軟件安裝目錄,也可以安裝在/usr/local目錄下
/root:管理員的家目錄
/srv:網絡服務所需的數據目錄
其他:/proc和/sys–這兩個目錄都是虛擬文件系統,數據在內存中,本身不佔用磁盤空間
/proc:包含系統核心、進程信息(process)、周邊裝置的狀態及網絡狀態等等
/sys:包括目前已加載的核心模塊與核心偵測到的硬件裝置信息等等
/bin、/sbin、/usr/bin、/usr/sbin目錄的區別
/bin目錄: 主要放置一些系統的必備執行檔例如:cat、cp、chmod df、dmesg、gzip、kill
/usr/bin目錄:主要放置一些應用軟件工具的必備執行檔例如:c++、g++、gcc、chdrv、diff
/sbin目錄: 主要放置一些系統管理(管理員)的必備程序例如:cfdisk、dhcpcd、dump、e2fsck、fdisk
/usr/sbin目錄: 放置一些網絡管理的必備程序例如:dhcpd、httpd、imap、in.*d、inetd
用戶和管理員必備的二進制文件,就會放在/bin;系統管理員必備一般用戶根本不會用到的二進制文件,就會放在 /sbin
不是用戶必備的二進制文件,多半會放在/usr/bin;如果不是系統管理員必備的工具,多半會放在/usr/sbin
c、usr目錄
重要的目錄:/usr/bin /usr/sbin /usr/share(doc和man) /usr/local
d、var目錄
/var/lib:程序運行所需的數據文件
/var/lock:上鎖的文件(一次只能一個人或程序使用)
/var/log和/var/mail
/var/spool:放置一些隊列數據,隊列數據就是排隊等待其他程序使用的數據
Linux文件與目錄管理
1、目錄與路徑
a、相對路徑與絕對路徑各自的運用場景
絕對:絕對路徑的正確度要比較好,shell腳本里面最好使用絕對路徑
相對:相對路徑的寫法更加簡單,有時候無法確定絕對路徑,可以使用相對路徑
b、目錄的相關操作
幾個特殊目錄:
. 代表此層目錄
… 代表上一層目錄
- 代表前一個工作目錄
-
代表當前用戶家目錄
~account 代表 account 這個使用者的家目錄(account是個帳號名稱)
目錄常用命令
cd 和 pwd
mkdir:創建一個新的目錄
-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞迴創建起來!
rmdir:刪除一個空的目錄(只能刪除空的目錄)
-p :連同上一級『空的』目錄也一起刪除
c、關於運行檔路徑的變量: $PATH
不同身份使用者默認的PATH不同,默認能夠隨意運行的命令也不同(如root與vbird);
PATH是可以修改的,所以一般使用者還是可以透過修改PATH來運行某些位於/sbin或/usr/sbin下的命令來查詢;
使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確;
本目錄(.)最好不要放到PATH當中
2、文件與目錄管理
a、文件與目錄的查看: ls(-al)
關於命令的別名:alias[別名]=[指令名稱]
b、複製、刪除、新建與移動:cp, rm, mv
touch 新建文檔
cp 命令
加上-a或-p的選項可以連同文件的權限等信息一起復制,普通用戶可能無法複製user和group的信息
通過 -l 和 -s 選項可以創建文件連接(類似於快捷方式):文件連接的複製默認複製的是原始文件,d選項就是複製連接文件
多文件複製到一個目錄
rm 命令:rm [-fir] 文件或目錄:命令前加 \ 可以忽略確認信息
mv 命令:mv [-fiu] source destination
u選項是source比較新的話會更新des
如果有多個來源文件或目錄,則最後一個目標檔一定是目錄
還有改名的功能rename
c、取得路徑的文件名稱與目錄名稱
basename /etc/sysconfig/network
dirname /etc/sysconfig/network
3、文件內容查閱
cat 由第一行開始顯示文件內容
tac 從最後一行開始顯示
nl 顯示的時候,順道輸出行號
more 一頁一頁的顯示文件內容
less 從後往前翻頁,比more更加好用
搜索有高亮的標記,還支持pagedown和pageup的翻頁
head 只看頭幾行
加 -n 指定要查看的行數
tail 只看尾巴幾行
加 -f 可以動態監聽文件的變化並輸出
od 命令:默認是將文件以八進制輸出,也可以指定用二進制或者十六進制等格式輸出
od -t dCc /etc/issue
linux 文件的三個時間
修改時間(mtime):文件的內容被最後一次修改的時間,ls -l命令顯示出來的文件時間就是這個時間,當用vim對文件進行編輯之後保存,它的mtime就會相應的改變(ctime也是會變化的)
訪問時間(atime):對文件進行一次讀操作,它的訪問時間就會改變,像:cat、more等操作就會改變atime
狀態時間(ctime):當文件的狀態被改變的時候,狀態時間就會隨之改變,例如當使用chmod、chown等改變文件屬性的操作是會改變文件的ctime的
touch -t 0709150202 bashrc 這個命令運行後 mtime 和 atime 都變爲指定的時間,ctime 則是記錄當前時間
stat filename 可以查看文件的三個時間
建立文件系統
分區表:
1.super block超級塊 2.FSD文件系統的文字描述 3.block bitmap數據塊位示圖
4.inode bitmap索引節點位示圖 5.inode table索引節點表 6.block table空閒塊
VFS(虛擬文件系統)使用超級塊和索引節點來描述和管理文件系統
注:linux是索引式文件系統
window是鏈表式文件系統
索引節點
文件的inode
文件訪問權限:read write execute
文件所有者:owner group others
以上兩個可組成9種指令
文件創建時間,修改時間,最近一次訪問權限
文件類型
block索引
block:1K
1.直接索引 2.間接索引 3.三級索引
inode索引節點包括兩部分inode和block
inode:存儲數據屬性信息(ls -l 結果),包含指向文件實體的指針等,唯獨不包含文件名
作用: 爲每個文件進行信息索引
block: 存放文件數據內容
inode與block
1. inode
是索引節點,在每個Linux存儲設備或者存儲設備的分區被格式化爲ext4文件系統,一般生成兩個部分:第一部分爲inode,第二部分爲block
inode:存放的是文件/目錄屬性信息,沒有文件名
inode是一串數字,不同的文件對應的inode在文件系統中是唯一的;
inode相同的文件,互爲硬鏈接文件(文件又一個入口)
存放着block的位置,文件名存放在上一級目錄的block裏面。
2. block
**實際存放數據的位置/**空間
每個block一般大小1k**,2k**,4k**,引導分區boot**是1k其他都是4k
磁盤讀取數據是按block爲單位讀取的。
每讀取一個block就會消耗一次磁盤I/O
文件大:一個文件可能佔用多個block
文件小:一個block剩餘空間會被浪費
總結:
inode和block
1)怎麼來的
創建文件系統(格式化)
2)啥意思
- inode索引節點,存放的是文件的屬性,block**的位置
- block實際存放數據
- 文件名存放在上一級目錄的block裏面。
特點
1)創建一個非空文件,要佔用一個inode和至少一個block
2)如果兩個文件的inode相同,這兩個文件互爲硬連接,條件這兩個文件必須在同一個分區
3)block 4k ,如果存放小文件1k,剩餘空間被浪費
4)inode 256字節
文件與目錄組成
文件由inode、block組成
文件處理指令ls -la
文件訪問權限
-
建立文件touch file1 vi file2
-
拷貝文件 cp file2
-
刪除文件 rm fname
-
移動文件 mv
-
建立文件夾 mkdir
-
建立連接文件 ln -s
文件的用戶信息
文件時間
文件的類型
-
-,普通文件。
-
d,目錄文件,d是directory的簡寫。
-
l,軟連接文件,亦稱符號鏈接文件,s是soft或者symbolic的簡寫。
-
b,塊文件,是設備文件的一種(還有另一種),b是block的簡寫。
-
c,字符文件,也是設備文件的一種(這就是第二種),c是character的文件。
Linux系統最原始的也只有這五種,所以第0位,只能是以上五者之一。
目錄同樣由inode、block組成區別在於block內容不同
block 文件名
#useradd user1 -m
-
建立一個新用戶user1
-
建立user1對應的用戶目錄user1
/home/user1
-
自動生成與用戶名一致的用戶組
#usermod user1 -g grp1
#userdel user1
#users 顯示當前登錄系統所有的用戶的用戶列表
對於文件
文件是包含實際數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件等。對於文件來說,rwx權限的意義爲:
r:read,可讀取此文件的內容,即可以打開文件;
w:write,可編輯此文件的內容,如可以增加、刪除、更改文件內容;
x:execute,可以執行此文件。
需要注意的是,文件的權限rwx都是針對文件內容來說的。比如w權限,是針對文件內容的增、刪、改,而不是針對文件本身。即,某用戶有針對該文件的w權限,也無法刪除或重命名該文件。
對於目錄
對於目錄來說,rwx權限的意義爲:
r:表示有讀取目錄內容列表的權限,即可以使用ls命令查看該目錄的內容列表;
w:表示有更改目錄的權限,即可以在此目錄下新建文件或子目錄、刪除文件或子目錄、重命名文件或子目錄、挪動該目錄內的文件或子目錄等。
x:表示可以進入該目錄,即可以使用cd命令進入該目錄。
需要注意的,若某用戶有針對該目錄的w權限,則可以刪除該目錄下的文件,哪怕該用戶對於此文件無任何權限(因爲對文件的權限都是針對文件內容的)。
再需要注意的是x權限。r權限決定了用戶是否可以ls出目錄內容,而x權限決定了用戶是否可以cd到該目錄。比如我們在/tmp下創建目錄test1,設置其權限爲[drwxrw-r–]:
Vi的三種工作模式
命令模式、輸入模式、末行模式。
在命令模式下輸入a、A、i、I、o、O等命令之一可以進入輸入模式,在輸入模式下按Esc鍵回到命令模式;在命令模式下輸入:進入末行模式,末行命令執行完後回到命令模式。
Linux文件與目錄結構
引入:
硬盤的種類主要是SCSI 、IDE 、以及現在流行的SATA等.IDE是並口設備,而SATA是串口.硬盤的物理幾何結構是由盤、磁盤表面、柱面、扇區組成,一個張硬盤內部是由幾張碟片疊加在一起,這樣形成一個柱體面;每個碟片都有上下表面;磁頭和磁盤表面接觸從而能讀取數據;
1、硬盤分區劃分標準
硬盤的分區由主分區、擴展分區和邏輯分區組成;所以我們在對硬盤分區時要遵循這個標準;主分區(包括擴展分區)的最大個數是四個,主分區(包含擴展分區)的個數硬盤的主引導記錄MBR(Master Boot Recorder)決定的,MBR存放啓動管理程序(GRUB,LILO,NTLOARDER等)和分區表記錄。其中擴展分區也算一個主分區;擴展分區下可以包含更多的邏輯分區;所以主分區(包括擴展分區)範圍是從1-4,邏輯分區是從5開始的;比如下面的例子:
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
通過這個例子,我們可以看到主分區有3個,從 hda1-hda3 ,擴展分區由 hda5-hda10 ;此硬盤沒有主分區4,所以也沒有顯示主分區hda4 ;但邏輯分區不可能從4開始,因爲那是主分區的位置,明白了吧
2、合理的規劃分區
關於一個磁盤的分區,一個磁盤應該有四個主分區,其中擴展也算一個主分區;存在以下情況:
1)分區結構之一:四個主分區,沒有擴展分區;
[主|分區1] [主分|區2] [主|分區3] [主|分區4]
這種情況,如果您想在一個磁盤上劃分五個以上分區,這樣是行不通的;
三個主分區 一個擴展分區;
[ 主 | 分區1 ] [ 主 | 分區2 ] [ 主 | 分區3 ] [擴展分區]
|
[邏輯|分區5] [邏輯|分區6] [邏輯|分區7] [邏輯|分區8]
這種情況行得通,而且分區的自由度比較大;分區也不受約束,能分超過5個分區;
1.系統目錄結構
linux下各文件夾的結構說明及用途介紹:
/bin:二進制可執行命令。
/dev:設備特殊文件。
/etc:系統管理和配置文件。
/etc/rc.d:啓動的配 置文件和腳本。
/home:用戶主目錄的基點,比如用戶user的主目錄就是/home/user,可以用~user表示。
/lib:標準程序設計庫,又 叫動態鏈接共享庫,作用類似windows裏的.dll文件。
/sbin:系統管理命令,這 裏存放的是系統管理員使用的管理程序。
/tmp:公用的臨時文件存儲 點。
/root:系統管理員的主目 錄。
/mnt:系統提供這個目錄是 讓用戶臨時掛載其他的文件系統。
/lost+found:這個 目錄平時是空的,系統非正常關機而留下“無家可歸”的文件就在這裏。
/proc:虛擬的目錄,是系 統內存的映射。可直接訪問這個目錄來獲取系統信息。
/var:某些大文件的溢出 區,比方說各種服務的日誌文件。
/usr:最龐大的目錄,要用 到的應用程序和文件幾乎都在這個目錄。其中包含:
/usr/x11r6:存放x window的目錄。
/usr/bin:衆多的應用程序。
/usr/sbin:超級用戶的一些管理程序。
/usr/doc:linux文檔。
/usr/include:linux下開發和編譯應用程序所需要的頭文件。
/usr/lib:常用的動態鏈接庫和軟件包的配置文件。
/usr/man:幫助文檔。
/usr/src:源代碼,linux內核的源代碼就放在/usr/src/linux 裏。
/usr/local/bin:本地增加的命令。
/usr/local/lib:本地增加的庫根文件系統。
通常情況下,根文件系統所佔空間一般應該比較小,因爲其中的絕大部分文件都不需要經常改動,而且包括嚴格的文件和一個小的 不經常改變的文件系統不容易損壞。除了可能的一個叫/vmlinuz標準的系統引導映像之外,根目錄一般不含任何文 件。所有其他文件在根文件系統的子目錄中。
\1. /bin目錄
/bin目錄包含了引導啓動所需的命令或普通用戶可能用的命令(可能在引導啓動後)。這些命 令都是二進制文件的可執行程序(bin是binary的簡稱),多是系統中重要的系統文件。
\2. /sbin目錄
/sbin目錄類似/bin ,也用於存儲二進制文件。因爲其中的大部分文件多是系統管理員使用的基本的系統程序,所以雖然普通用戶必要且允許時可以使用,但一般不給普通用戶使 用。
\3. /etc目錄
/etc目錄存放着各種系統配置文件,其中包括了用戶信息文件/etc/passwd, 系統初始化文件/etc/rc等。linux正是靠這些文件才得以正常地運行。
\4. /root目錄
/root目錄是超級用戶的目錄。
\5. /lib目錄
/lib目錄是根文件系統上的程序所需的共享庫,存放了根文件系統程序運行所需的共享文件。 這些文件包含了可被許多程序共享的代碼,以避免每個程序都包含有相同的子程序的副本,故可以使得可執行文件變得更小,節省空間。
\6. /lib/modules目錄
/lib/modules目錄包含系統核心可加載各種模塊,尤其是那些在恢復損壞的系統時重 新引導系統所需的模塊(例如網絡和文件系統驅動)。
\7. /dev目錄
/dev目錄存放了設備文件,即設備驅動程序,用戶通過這些文件訪問外部設備。比如,用戶可 以通過訪問/dev/mouse來訪問鼠標的輸入,就像訪問其他文件一樣。
\8. /tmp目錄
/tmp目錄存放程序在運行時產生的信息和數據。但在引導啓動後,運行的程序最好使用/var/tmp來 代替/tmp,因爲前者可能擁有一個更大的磁盤空間。
\9. /boot目錄
/boot目錄存放引導加載器(bootstrap loader)使用的文件,如lilo,核心映像也經常放在這裏,而不是放在根目錄中。但是如果有許多核心映像,這個目錄就可能變得很大,這時使用單獨的 文件系統會更好一些。還有一點要注意的是,要確保核心映像必須在ide硬盤的前1024柱面內。
\10. /mnt目錄
/mnt目錄是系統管理員臨時安裝(mount)文件系統的安裝點。程序並不自動支持安裝到/mnt 。/mnt下面可以分爲許多子目錄,例如/mnt/dosa可能是使用 msdos文件系統的軟驅,而/mnt/exta可能是使用ext2文件系統的軟驅,/mnt/cdrom光 驅等等。
\11. /proc, /usr, /var, /home目錄
其他文件系統的安裝點。
目錄樹可以分爲小的部分,每個部分可以在自己的磁盤或分區上。主要部分是根、/usr 、/var 和 /home 文件系統。每個部分有不同的目的。
每臺機器都有根文件系統,它包含系統引導和使其他文件系統得以mount所必要的文件,根文件系統應該有單用戶狀態所必須的足夠的內容。還應該包括修復損壞 系統、恢復備份等的工具。
/usr 文件系統包含所有命令、庫、man頁和其他一般操作中所需的不改變的文件。 /usr 不應該有 一般使用中要修改的文件。這樣允許此文件系統中的文件通過網絡共享,這樣可以更有效,因爲這樣節省了磁盤空間(/usr 很容易是數百兆),且易於管理 (當升級應用時,只有主/usr 需要改變,而無須改變每臺機器) 即使此文件系統在本地盤上,也可以只讀mount,以減少系統崩潰時文件系統的損 壞。
/var 文件系統包含會改變的文件,比如spool目錄(mail、news、打印機等用的), log文件、 formatted manual pages和暫存文件。傳統上/var 的所有東西曾在 /usr 下的某個地方,但這樣/usr 就不可能只讀安裝 了。
/home 文件系統包含用戶家目錄,即系統上的所有實際數據。一個大的/home 可能要分爲若干文件系統,需要在 /home 下加一級名字,如/home/students 、/home/staff 等。
下面詳細介紹:
/etc文件系統
/etc目錄包含各種系統配置文件,下面說明其中的一些。其他的你應該知道它們屬於哪個程序, 並閱讀該程序的man頁。許多網絡配置文件也在/etc中。
\1. /etc/rc或/etc/rc.d或/etc/rc?.d:啓動、或改變運行級時運 行的腳本或腳本的目錄。
\2. /etc/passwd:用戶數據庫,其中的域給出了用戶名、真實姓名、用戶起始目 錄、加密口令和用戶的其他信息。
\3. /etc/fdprm:軟盤參數表,用以說明不同的軟盤格式。可用setfdprm進 行設置。更多的信息見setfdprm的幫助頁。
\4. /etc/fstab:指定啓動時需要自動安裝的文件系統列表。也包括用swapon -a啓用的swap區的信息。
\5. /etc/group:類似/etc/passwd ,但說明的不是用戶信息而是組的信息。包括組的各種數據。
\6. /etc/inittab:init 的配置文件。
\7. /etc/issue:包括用戶在登錄提示符前的輸出信息。通常包括系統的一段短說明 或歡迎信息。具體內容由系統管理員確定。
\8. /etc/magic:“file”的配置文件。包含不同文件格式的說 明,“file”基於它猜測文件類型。
\9. /etc/motd:motd是message of the day的縮寫,用戶成功登錄後自動輸出。內容由系統管理員確定。
常用於通告信息,如計劃關機時間的警告等。
\10. /etc/mtab:當前安裝的文件系統列表。由腳本(scritp)初始化,並由 mount命令自動更新。當需要一個當前安裝的文件系統的列表時使用(例如df命令)。
\11. /etc/shadow:在安裝了影子(shadow)口令軟件的系統上的影子口令 文件。影子口令文件將/etc/passwd文件中的加密口令移動到/etc/shadow中,而後者只對超級用戶(root)可讀。這使破譯口令更困 難,以此增加系統的安全性。
\12. /etc/login.defs:login命令的配置文件。
\13. /etc/printcap:類似/etc/termcap ,但針對打印機。語法不同。
\14. /etc/profile 、/etc/csh.login、/etc/csh.cshrc:登 錄或啓動時bourne或cshells執行的文件。這允許系統管理員爲所有用戶建立全局缺省環境。
\15. /etc/securetty:確認安全終端,即哪個終端允許超級用戶(root) 登錄。一般只列出虛擬控制檯,這樣就不可能(至少很困難)通過調制解調器(modem)或網絡闖入系統並得到超級用戶特權。
\16. /etc/shells:列出可以使用的shell。chsh命令允許用戶在本文件 指定範圍內改變登錄的shell。提供一
臺機器ftp服務的服務進程ftpd檢查用戶shell是否列在/etc/shells文件 中,如果不是,將不允許該用戶登錄。
\17. /etc/termcap:終端性能數據庫。說明不同的終端用什麼“轉義序列”控 制。寫程序時不直接輸出轉義
序列(這樣只能工作於特定品牌的終端),而是從/etc/termcap中查找要做的工作的 正確序列。這樣,多數的程序可以在多數終端上運行。
/dev文件系統
/dev目錄包括所有設備的設備文件。設備文件用特定的約定命名,這在設備列表中說明。設備文件在安裝時由系 統產生,以後可以用/dev/makedev描述。/dev/makedev.local 是系統管理員爲本地設備文件(或連接)寫的描述文稿(即如一些非標準設備驅動不是標準makedev 的一部分)。下面簡要介紹/dev下 一些常用文件。
\1. /dev/console:系統控制檯,也就是直接和系統連接的監視器。
\2. /dev/hd:ide硬盤驅動程序接口。如:/dev/hda指的是第一個硬 盤,had1則是指/dev/hda的第一個分區。如系統中有其他的硬盤,則依次爲/dev /hdb、/dev/hdc、. . . . . .;如有多個分區則依次爲hda1、hda2 . . . . . .
\3. /dev/sd:scsi磁盤驅動程序接口。如系統有scsi硬盤,就不會訪問/dev/had, 而會訪問/dev/sda。
\4. /dev/fd:軟驅設備驅動程序。如:/dev/fd0指 系統的第一個軟盤,也就是通常所說的a盤,/dev/fd1指第二個軟盤,. . . . . .而/dev/fd1 h1440則表示訪問驅動器1中的4.5高密盤。
\5. /dev/st:scsi磁帶驅動器驅動程序。
\6. /dev/tty:提供虛擬控制檯支持。如:/dev/tty1指 的是系統的第一個虛擬控制檯,/dev/tty2則是系統
的第二個虛擬控制檯。
\7. /dev/pty:提供遠程登陸僞終端支持。在進行telnet登錄時就要用到/dev/pty設 備。
\8. /dev/ttys:計算機串行接口,對於dos來說就是“com1”口。
\9. /dev/cua:計算機串行接口,與調制解調器一起使用的設備。
\10. /dev/null:“黑洞”,所有寫入該設備的信息都將消失。例如:當想要將屏幕 上的輸出信息隱藏起來
時,只要將輸出信息輸入到/dev/null中即可。
/usr文件系統
/usr是個很重要的目錄,通常這一文件系統很大,因爲所有程序安裝在這裏。/usr裏 的所有文件一般來自linux發行版;本地安裝的程序和其他東西在/usr/local下,因爲這樣可以在升級新版系 統或新發行版時無須重新安裝全部程序。/usr目錄下的許多內容是可選的,但這些功能會使用戶使用系統更加有效。/usr可容納許多大型的軟件包和它們的 配置文件。下面列出一些重要的目錄(一些不太重要的目錄被省略了)。
\1. /usr/x11r6:包含x window系統的所有可執行程序、配置文件和支持文件。爲簡化x的開發和安裝,x的文件沒有集成到系統中。x window系統是一個功能強大的圖形環境,提供了大量的圖形工具程序。用戶如果對microsoft windows比較熟悉的話,就不會對x window系統感到束手無策了。
\2. /usr/x386:類似/usr/x11r6 ,但是是專門給x 11 release 5的。
\3. /usr/bin:集中了幾乎所有用戶命令,是系統的軟件庫。另有些命令在/bin或/usr/local/bin中。
\4. /usr/sbin:包括了根文件系統不必要的系統管理命令,例如多數服務程序。
\5. /usr/man、/usr/info、/usr/doc:這些目錄包含所有手冊頁、 gnu信息文檔和各種其他文檔文件。每個聯機手冊的“節”都有兩個子目錄。例如:/usr/man/man1中包含聯機手冊第一節的源碼(沒有格式化的原 始文件),/usr/man/cat1包含第一節已格式化的內容。聯機手冊分爲以下九節:內部命令、系統調用、庫函數、設備、文件格式、遊戲、宏軟件包、 系統管理和核心程序。
\6. /usr/include:包含了c語言的頭文件,這些文件多以.h結尾,用來描述c 語言程序中用到的數據結構、
子過程和常量。爲了保持一致性,這實際上應該放在/usr/lib下,但習慣上一直沿用了這 個名字。
\7. /usr/lib:包含了程序或子系統的不變的數據文件,包括一些site - wide配置文件。名字lib來源於庫(library); 編程的原始庫也存在/usr/lib 裏。當編譯程序時,程序便會和其中的庫進行連接。也有許多程序把配置文件存入其中。
\8. /usr/local:本地安裝的軟件和其他文件放在這裏。這與/usr很相似。用戶 可能會在這發現一些比較大
的軟件包,如tex、emacs等。
/var文件系統
/var包含系統一般運行時要改變的數據。通常這些數據所在的目錄的大小是要經常變化或擴充 的。原來/var目錄中有些內容是在/usr中的,但爲了保持/usr目錄的相對穩定,就把那些需要經常改變的目錄放到/var中了。每個系統是特定的, 即不通過網絡與其他計算機共享。下面列出一些重要的目錄(一些不太重要的目錄省略了)。
\1. /var/catman:包括了格式化過的幫助(man)頁。幫助頁的源文件一般存在 /usr/man/catman中;有些man頁可能有預格式化的版本,存在/usr/man/cat中。而其他的man頁在第一次看時都需要格式化,格 式化完的版本存在/var/man中,這樣其他人再看相同的頁時就無須等待格式化了。(/var/catman經常被 清除,就像清除臨時目錄一樣。)
\2. /var/lib:存放系統正常運行時要改變的文件。
\3. /var/local:存放/usr/local中 安裝的程序的可變數據(即系統管理員安裝的程序)。注意,如果必要,
即使本地安裝的程序也會使用其他/var目錄,例如/var/lock 。
\4. /var/lock:鎖定文件。許多程序遵循在/var/lock中 產生一個鎖定文件的約定,以用來支持他們正在
使用某個特定的設備或文件。其他程序注意到這個鎖定文件時,就不會再使用這個設備或文件。
\5. /var/log:各種程序的日誌(log)文件,尤其是login (/var/log/wtmplog紀 錄所有到系統的登錄和註銷) 和syslog (/var/log/messages 紀錄存儲所有核心和系統程序信息)。/var/log 裏的文件經常不確定地增長,應該定期清除。
\6. /var/run:保存在下一次系統引導前有效的關於系統的信息文件。例如,/var/run/utmp包 含當前登錄的用戶的信息。
\7. /var/spool:放置“假脫機(spool)”程序的目錄,如mail、 news、打印隊列和其他隊列工作的目錄。每
個不同的spool在/var/spool下有自己的子目錄,例如,用戶的郵箱就存放在/var/spool/mail 中。
\8. /var/tmp:比/tmp允許更大的或需要存在較長時間的臨時文件。注意系統管理 員可能不允許/var/tmp有很舊的文件。
/proc文件系統
/proc文件系統是一個僞的文件系統,就是說它是一個實際上不存在的目錄,因而這是一個非 常特殊的目錄。它並不存在於某個磁盤上,而是由核心在內存中產生。這個目錄用於提供關於系統的信息。下面說明一些最重要的文件和目錄(/proc文件系統 在proc man頁中有更詳細的說明)。
\1. /proc/x:關於進程x的信息目錄,這x是這一進程的標識號。每個進程在 /proc下有一個名爲自己進程號的目錄。
\2. /proc/cpuinfo:存放處理器(cpu)的信息,如cpu的類型、製造商、 型號和性能等。
\3. /proc/devices:當前運行的核心配置的設備驅動的列表。
\4. /proc/dma:顯示當前使用的dma通道。
\5. /proc/filesystems:核心配置的文件系統信息。
\6. /proc/interrupts:顯示被佔用的中斷信息和佔用者的信息,以及被佔用 的數量。
\7. /proc/ioports:當前使用的i/o端口。
\8. /proc/kcore:系統物理內存映像。與物理內存大小完全一樣,然而實際上沒有 佔用這麼多內存;它僅
僅是在程序訪問它時才被創建。(注意:除非你把它拷貝到什麼地方,否則/proc下沒有任何東西佔用任何磁盤空間。)
\9. /proc/kmsg:核心輸出的消息。也會被送到syslog。
\10. /proc/ksyms:核心符號表。
\11. /proc/loadavg:系統“平均負載”;3個沒有意義的指示器指出系統當前 的工作量。
\12. /proc/meminfo:各種存儲器使用信息,包括物理內存和交換分區 (swap)。
\13. /proc/modules:存放當前加載了哪些核心模塊信息。
\14. /proc/net:網絡協議狀態信息。
\15. /proc/self:存放到查看/proc的 程序的進程目錄的符號連接。當2個進程查看/proc時,這將會是不同
的連接。這主要便於程序得到它自己的進程目錄。
\16. /proc/stat:系統的不同狀態,例如,系統啓動後頁面發生錯誤的次數。
\17. /proc/uptime:系統啓動的時間長度。
\18. /proc/version:核心版本。
2.linux文件存儲結構
2.1 文件概念與文件類型(p39)
磁盤上的文件系統是層次結構的,由若干目錄和其子目錄組成,最上層的稱爲跟(root)目錄,用"/"表示.
文件類型:普通文件,目錄文件,設備文件及符號鏈接文件
所在的block,讀出數據。 使用ls -i命令,可以看到文件名對應的inode號碼
2.2硬連接與軟連接(考 )
1.Linux 鏈接概念
Linux 鏈接分兩種,一種被稱爲硬鏈接(Hard Link),另一種被稱爲符號鏈接(Symbolic Link)。默認情況下,ln 命令產生硬鏈接。
硬連接
硬連接指通過索引節點來進行連接。在 Linux 的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱爲索引節點號(Inode Index)。在 Linux 中,多個文件名指向同一索引節點是存在的。比如:A 是 B 的硬鏈接(A 和 B 都是文件名),則 A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號相同,即一個 inode 節點對應兩個不同的文件名,兩個文件名指向同一個文件,A 和 B 對文件系統來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問。
硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因爲對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個連接被刪除後,文件的數據塊及目錄的連接纔會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。
軟連接
另外一種連接稱之爲符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似於 Windows 的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的軟鏈接(A 和 B 都是文件名),A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的數據塊。但是 A 的數據塊中存放的只是 B 的路徑名(可以根據這個找到 B 的目錄項)。A 和 B 之間是“主從”關係,如果 B 被刪除了,A 仍然存在(因爲兩個是不同的文件),但指向的是一個無效的鏈接。
2.通過實驗加深理解
[oracle@Linux]$ touch f1 #創建一個測試文件f1
[oracle@Linux]$ ln f1 f2 #創建f1的一個硬連接文件f2
[oracle@Linux]$ ln -s f1 f3 #創建f1的一個符號連接文件f3
[oracle@Linux]$ ls -li # -i參數顯示文件的inode節點信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
從上面的結果中可以看出,硬連接文件 f2 與原文件 f1 的 inode 節點相同,均爲 9797648,然而符號連接文件的 inode 節點不同。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory
通過上面的測試可以看出:當刪除原始文件 f1 後,硬連接 f2 不受影響,但是符號連接 f1 文件無效
3.總結
依此您可以做一些相關的測試,可以得到以下全部結論:
- 1).刪除符號連接f3,對f1,f2無影響;
- 2).刪除硬連接f2,對f1,f3也無影響;
- 3).刪除原文件f1,對硬連接f2沒有影響,導致符號連接f3失效;
- 4).同時刪除原文件f1,硬連接f2,整個文件會真正的被刪除。
2.3#ls -al命令解析信息
----a參數與l參數結合使用,以長列表形式顯示所有目錄及文件詳細信息。包括文件類型、文件權限、硬連接數、文件擁有者、文件所屬組、文件大小、更動時間、文件名等。其中
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qceaDZGu-1572060962375)(D:\typoraImage\1571768243920.png)]
第1列:第一列便是這個文件的屬性:
#第一個屬性表示這個文件時“目錄、文件或鏈接文件等”:
【d】,則是目錄
【-】,則是一般文件
【l】,則表示爲鏈接文件(link file)
【b】,則表示爲設備文件中可供存儲的接口設備,塊訪問
【c】,則表示爲設備文件中的串行端口設備,例如鍵盤、鼠標。字符訪問
【p】,則表示通道
【l】,則表示鏈接文件
【s】,則表示socket端口
#接下來的屬性中,3個爲一組,且均爲“rwx”3個參數組合。其中r表示可讀read,w表示可寫write,x表示可執行excute。
第一組爲“擁有者的權限”,第二組爲“同用戶組的權限”,第三組爲“其他非本用戶組的權限”。
第2列:文件的鏈接數.(表示連接佔用的節點(i-node))
第3、4列:擁有文件的用戶及組
第5列:文件的大小。
第6列:文件最後的修改時間。(文件的創建日期或者是最近的修改日期)
第7列:文件名.(如果文件名前面有.說明是隱藏文件。如果只輸入ls 前面加.的文件不會顯示出來。ls -al則會顯示出全部文件。)
4.inode
1.inode是什麼
(1.任何一個文件最多有1個inode
2.文件容量由block大小決定)
理解inode,要從文件儲存說起。
文件儲存在硬盤上,硬盤的最小存儲單位叫做”扇區”(Sector)。每個扇區儲存512字節(相當於0.5KB)。
操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個”塊”(block)。這種由多個扇區組成的”塊”,是文件存取的最小單位。”塊”的大小,最常見的是4KB,即連續八個 sector組成一個 block。
文件數據都儲存在”塊”中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名爲”索引節點”。
2.inode的內容
(1.文件訪問權限:read,write,excute
2.文件的用戶信息:owner,group,others
3.文件時間
4.文件類型
目錄與文件的區別:block文件內容)
inode包含文件的元信息,具體來說有以下內容:
- 文件的字節數
- 文件擁有者的User ID
- 文件的Group ID
- 文件的讀、寫、執行權限
- 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
- 鏈接數,即有多少文件名指向這個inode
- 文件數據block的位置
可以用stat命令,查看某個文件的inode信息:
stat example.txt
總之,除了文件名以外的所有文件信息,都存在inode之中。
3.inode的大小
inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。
每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。
查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令。
df -i
查看每個inode節點的大小,可以用如下命令:
sudo dumpe2fs -h /dev/hda | grep “Inode size”
由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件。
4.inode號碼
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。
這裏值得重複一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來說,文件名只是inode號碼便於識別的別稱或者綽號。表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。
使用ls -i命令,可以看到文件名對應的inode號碼:
ls -i example.txt
5.目錄文件
Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。
目錄文件的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。
ls命令只列出目錄文件中的所有文件名:
ls /etc
ls -i命令列出整個目錄文件,即文件名和inode號碼:
ls -i /etc
如果要查看文件的詳細信息,就必須根據inode號碼,訪問inode節點,讀取信息。ls -l命令列出文件的詳細信息。
ls -l /etc
6. 硬鏈接
一般情況下,文件名和inode號碼是”一一對應”關係,每個inode號碼對應一個文件名。但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼。這意味着,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱爲”硬鏈接”(hard link)。
ln命令可以創建硬鏈接:
ln 源文件 目標文件
運行上面這條命令以後,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做”鏈接數”,記錄指向該inode的文件名總數,這時就會增加1。反過來,刪除一個文件名,就會使得inode節點中的”鏈接數”減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。
這裏順便說一下目錄文件的”鏈接數”。創建目錄時,默認會生成兩個目錄項:”.”和”…”。前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的”硬鏈接”;後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的”硬鏈接”。所以,任何一個目錄的”硬鏈接”總數,總是等於2加上它的子目錄總數(含隱藏目錄),這裏的2是父目錄對其的“硬鏈接”和當前目錄下的”.硬鏈接“。
7. 軟鏈接
除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱爲文件B的”軟鏈接”(soft link)或者”符號鏈接(symbolic link)。
這意味着,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:”No such file or directory”。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode”鏈接數”不會因此發生變化。
ln -s命令可以創建軟鏈接。
ln -s 源文文件或目錄 目標文件或目錄
8. inode的特殊作用
由於inode號碼與文件名分離,這種機制導致了一些Unix/Linux系統特有的現象。
1. 有時,文件名包含特殊字符,無法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的作用。
2. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。
3. 打開一個文件以後,系統就以inode號碼來識別這個文件,不再考慮文件名。因此,通常來說,系統無法從inode號碼得知文件名。
第3點使得軟件更新變得簡單,可以在不關閉軟件的情況下進行更新,不需要重啓。因爲系統通過inode號碼,識別運行中的文件,不通過文件名。更新的時候,新版文件以同樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。
5.文件系統的物理結構(p158)
1.超級塊(superblock)包含文件系統的大小和形式的基本信息.
2.塊組描述結構.每一個塊組都有一個描述它的數據結構,即塊組描述結構(block group descriptor)包括數據塊位示圖,索引節點位示圖,索引節點表,空閒塊數、空閒索引節點數和已用目錄數。
Linux的常用命令
cat
功能:有從磁盤創建文件的功能(但不具備編輯功能),但主要功能還是2個或者以上文件的合併。
常配合使用參數:
-n 或–number 由1 開始對所有輸出的行數編號。
-b 或–number-nonblank 和-n 相似,只不過對於空白行不編號。
使用方法:
Cat –n diannaob1>diannaob2,把diannaob1裏的內容加上行號以後併入diannaob2。
Cat –b diannaob1 diannaob2>>diannaob3,對diannaob1和diannaob2裏的內容加上行號(空白行不加)併入diannaob3。cat
功能:有從磁盤創建文件的功能(但不具備編輯功能),但主要功能還是2個或者以上文件的合併。
常配合使用參數:
-n 或–number 由1 開始對所有輸出的行數編號。
-b 或–number-nonblank 和-n 相似,只不過對於空白行不編號。
使用方法:
Cat –n diannaob1>diannaob2,把diannaob1裏的內容加上行號以後併入diannaob2。
Cat –b diannaob1 diannaob2>>diannaob3,對diannaob1和diannaob2裏的內容加上行號(空白行不加)併入diannaob3。
cp
cp命令主要用於複製文件或目錄。
- -a:此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容。其作用等於dpR參數組合。
- -d:複製時保留鏈接。這裏所說的鏈接相當於Windows系統中的快捷方式。
- -f:覆蓋已經存在的目標文件而不給出提示。
- -i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答"y"時目標文件將被覆蓋。
- -p:除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中。
- -r:若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件。
- -l:不復制文件,只是生成鏈接文件。
ps
命令用於顯示當前進程 (process) 的狀態
df
命令完成_顯示文件系統空間使用情況_____ 功能
-h 易讀方式顯示基本信息
du
命令完成 顯示目錄或文件佔用磁盤空間容量____ 功能
ls
-a 列出目錄下的所有文件,包括以 . 開頭的隱含文件。
-b 把文件名中不可輸出的字符用反斜槓加字符編號(就象在C語言裏一樣)的形式列出。
-c 輸出文件的 i 節點的修改時間,並以此排序。
-d 將目錄象文件一樣顯示,而不是顯示其下的文件。
-e 輸出時間的全部信息,而不是輸出簡略信息。
-f -U 對輸出的文件不排序。
-g 無用。
-i 輸出文件的 i 節點的索引信息。
-k 以 k 字節的形式表示文件的大小。
-l 列出文件的詳細信息。
-m 橫向輸出文件名,並以“,”作分格符。
-n 用數字的 UID,GID 代替名稱。
-o 顯示文件的除組信息外的詳細信息。
-p -F 在每個文件名後附上一個字符以說明該文件的類型,“*”表示可執行的普通
文件;“/”表示目錄;“@”表示符號鏈接;“|”表示FIFOs;“=”表示套
接字(sockets)。
-q 用?代替不可輸出的字符。
-r 對目錄反向排序。
-s 在每個文件名後輸出該文件的大小。
-t 以時間排序。
-u 以文件上次被訪問的時間排序。
-x 按列輸出,橫向排序。
-A 顯示除 “.”和“…”外的所有文件。
-B 不輸出以 “~”結尾的備份文件。
-C 按列輸出,縱向排序。
-G 輸出文件的組的信息。
-L 列出鏈接文件名而不是鏈接到的文件。
-N 不限制文件長度。
-Q 把輸出的文件名用雙引號括起來。
-R 列出所有子目錄下的文件。
-S 以文件大小排序。
-X 以文件的擴展名(最後一個 . 後的字符)排序。
-1 一行只輸出一個文件。
--color=no 不顯示彩色文件名
--help 在標準輸出上顯示幫助信息。
--version 在標準輸出上輸出版本信息並退出。
dumpe2fs
顯示device中文件系統的超級塊和塊組信息。
dumpe2fs常用命令選項
選項 | 描述 |
---|---|
-b | 打印文件系統中的壞塊 |
-o | 不常用,檢查嚴重損壞文件系統時指定 |
-f | 強制顯示所有信息,即便dumpe2fs對有些文件系統功能標識不能識別。 |
- i | 顯示image文件系統信息。device指定image文件的路徑 |
-h | 只顯示超級塊信息 |
-x | 將已分組的塊的數量用十六進制顯示 |
-v | 顯示dumpe2fs的版本號並推出 |
useradd
useradd [option] username
[option]:
-d<登入目錄> 指定用戶登入時的目錄。
-g<羣組> 初始羣組。
-G<羣組> 非初始羣組。
-m 自動創建用戶的家目錄。
-M 不要創建用戶的家目錄。
-N 不要創建以用戶名稱爲名的羣組。
-s 指定用戶登入後所使用的shell。
文件和目錄
cd:是Change Directory的縮寫,用來切換工作目錄,語法:cd [相對或絕對路徑或特殊符號]
-
cd :進入該用戶的主目錄 ~(root用戶爲/root,其他用戶爲/home/用戶名)
-
cd … :返回上一級目錄(注意要空格)
-
cd - :返回上次所在目錄
-
cd / :返回根目錄 (絕對路徑)
-
cd ./目錄1/目錄2 :進入當前目錄下的子目錄(相對路徑)
-
pwd :顯示工作路徑(Print Working Directory 的縮寫)
ls:是List的縮寫,用於列出目錄下的文件,語法:
ls [選項][目錄或文件名]
-
ls -a :列出文件下所有的文件,包括以“.“開頭的隱藏文件
-
*ls -lh .log :列出文件的詳細信息(.log結尾,*爲通配符代表任意多個字符)
-
file 文件或目錄 :顯示文件的類型(目錄、text、zip、shell腳本等)
-
mkdir dir1 :創建目錄(dir1)(mkdir爲make directory的縮寫)
-
mkdir -p ./dir1/dir2 :遞歸創建目錄(-p:父目錄不存在時,同時建立)
-
touch a.txt :創建文件a.txt
rm:可以刪除一個目錄中的一個或多個文件或目錄,也可以將某個目錄及其下屬的所有文件及其子目錄均刪除掉; 語法:rm (選項)(參數)(注:如果參數中含有目錄,則必須加上-r選項);
-
rm 文件 :刪除文件
-
rm -r 目錄或文件 :刪除目錄(及目錄下所有文件)(非空也可以)
-
rm -rf 目錄或文件 :強制刪除,如:rm -rf * 爲刪除當前目錄下所有文件
-
find -inum 1842601 -exec rm -rf {} ; :刪除亂碼文件或目錄(會提示找不到此文件或文件夾但其實已經刪除了)(上傳中文文件會亂碼,rm命令刪除不了)(先使用ls -i命令找到inode,即文件或目錄前面的數字字符串,如1842601;)
mv:是move的縮寫,可以用來剪切移動文件、目錄或者將文件改名;
語法:mv 源文件 目標文件(改名)或目錄(移動); -
mv a b :移動或者重命名一個文件或者目錄(存在即移動目錄或覆蓋文件,不存在即改名)
-
mv /opt/git/g /opt/a :移動g到opt目錄下並改名爲a(a目錄不存在,若存在則爲移動g到a目錄下)
-
mv -t ./test a.txt b.txt :移動多個文件到某目錄下
cp:複製文件或目錄;cp命令可以將單個或多個文件複製到一個已經存在的目錄下;
常用:cp -ai 文件或目錄 目標目錄; -
cp -ai /opt/abc /opt/git/ :複製abc目錄(或文件)到git目錄下(選項a表示文件的屬性也複製、目錄下所有文件都複製;i表示覆蓋前詢問)
ln:link的縮寫,用於建立硬(軟)鏈接,常用於軟件安裝時建軟鏈接(類似快捷方式)到PATH;
語法:ln [-s] 源文件 目標文件 -
ln -s /opt/a.txt /opt/git/ :對文件創建軟鏈接(快捷方式不改名還是a.txt)
-
ln -s /opt/a.txt /opt/git/b :(快捷方式改名爲b)(下面的一樣可以改名)
-
ln -s /opt/mulu /opt/git/ :對目錄創建軟鏈接
-
ln /opt/a.txt /opt/git/ :對文件創建硬鏈接
文件權限
-
chmod [-R] 777文件或目錄 :設置權限(chmod a+rwx a=chmod ugo +rwx a=chmod 777 a)
注: r(read)對應4,w(write)對應2,x(execute)執行對應1;
-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時,如果加上-R的參數,那麼該目錄下的所有文件的屬組都會更改) -
chmod [{ugoa}{+-=}{rwx}][文件或目錄]
:如chmod u-w,g+x,o=r test.txt爲user(擁有者)去掉寫權限,group(所屬組)加上執行權限,other(其他人)權限等於只讀; -
chown [-R] admin:root /opt/ :變更文件及目錄的擁有者和所屬組(-R遞歸處理所有文件和文件夾,admin爲擁有者,root爲所屬者)
文件查找
- locate a.txt :在系統全局範圍內查找文件名包含a.txt字樣的文件(比find快);
locate:原理是updatedb會把文件系統中的信息存放到數據庫databases中(但一般一天才執行一次,所以locate找不到新創建的文件,需要先手動執行updatedb,再執行locate),locate從數據庫中讀數據;
find:在目錄結構中搜索文件,並執行指定的操作
語法:find pathname -options [-print -exec …]
pathname :爲 find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄(find查找範圍爲目標目錄及其子目錄所有文件及目錄);
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲’command’ { } ;,注意{ }和;之間的空格;
-print: find命令將匹配的文件輸出到標準輸出;
- find /home -mtime -2 :在/home下查最近2*24小時內改動過的文件
- find . -size +100M :在當前目錄及子目錄下查找大於100M的文件
- find . -type f :f表示文件類型爲普通文件(b/d/c/p/l/f 分別爲塊設備、目錄、字符設備、管道、符號鏈接、普通文件)
- find . -mtime +2 -exec rm {} ; :查出更改時間在2*24小時以前的文件並刪除它**
find . -name '\*.log' -exec grep -i hello {} \; -print
:在當前目錄及子目錄下查出文件名後綴爲.log的文件並且該文件內容包含了hello字樣並打印,-exec 命令 {} \表示對查出文件操作,-i表示不區分大小寫;find . -name '\*.log'|grep hello
:在當前目錄及子目錄下查出文件名後綴爲.log的文件並且文件名包含了hello字樣(grep用來處理字符串);- grep -i ‘HELLO’ . -r -n :在當前目錄及子目錄下查找文件內容中包含hello的文件並顯示文件路徑(-i表示忽略大小寫)
- which java :在環境變量$PATH設置的目錄裏查找符合條件的文件,並顯示路徑(查詢運行文件所在路徑)
- whereis java :查看安裝的軟件的所有的文件路徑(whereis 只能用於查找二進制文件、源代碼文件和man手冊頁,一般文件的定位需使用locate命令)
查看文件的內容
- cat [-n] 文件名 :顯示文件內容,連行號一起顯示
- less 文件名 :一頁一頁的顯示文件內容(搜索翻頁同man命令)
- head [-n] 文件名 :顯示文件頭n行內容,n指定顯示多少行
- tail [-nf] 文件名:顯示文件尾幾行內容,n指定顯示多少行,f用於實時追蹤文件的所有更新,常用於查閱正在改變的日誌文件(如tail -f -n 3 a.log 表示開始顯示最後3行,並在文件更新時實時追加顯示,沒有-n默認10行)
- sed -n ‘2,$p’ ab :顯示第二行到最後一行;
- sed -n ‘/搜索的關鍵詞/p’ a.txt :顯示包括關鍵詞所在行
- cat filename |grep abc -A10 :查看filename中含有abc所在行後10行(A10)、前10行(B10)內容
- less a.txt|grep git :顯示關鍵詞所在行,管道符”|”它只能處理由前面一個指令傳出的正確輸出信息,對錯誤信息信息沒有直接處理能力。然後傳遞給下一個命令,作爲標準的輸入;
- cat /etc/passwd |awk -F ‘:’ ‘{print $1}’ :顯示第一列
文本處理
- ls -l>file :輸出重定向>(改變原來系統命令的默認執行方式):ls -l命令結果輸出到file文件中,若存在,則覆蓋
- cat file1 >>file :輸出重定向之cat命令結果輸出追加到file文件(>表示覆蓋原文件內容,>>表示追加內容)
- ls fileno 2>file : 2>表示重定向標準錯誤輸出(文件不存在,報錯信息保存至file文件);
- **cowsay :重定向標準輸入’命令<文件’表示將文件做爲命令的輸入(爲從文件讀數據作爲輸入)
- **sed -i '4,表示最後一行)(sed可以增刪改查文件內容)
- sed -i ‘$a 增加的字符串’ a.txt :在最後一行的下一行增加字符串
- sed -i ‘s/old/new/g’ a.txt :替換字符串;格式爲sed ‘s/要替換的字符串/新的字符串/g’ 修改的文件
- vim 文件:編輯查看文件(同vi)
用戶與權限
- useradd 用戶名 :創建用戶
- userdel -r 用戶名 :刪除用戶:(-r表示把用戶的主目錄一起刪除)
- usermod -g 組名 用戶名 :修改用戶的組
- usermod -aG 組名 用戶名 :將用戶添加到組
- groups test :查看test用戶所在的組
- cat /etc/group |grep test :查看test用戶詳情:用戶名:口令:用戶標識號:組標識號:註釋性描述:主目錄:登錄Shell
- passwd [ludf] 用戶名 :用戶改自己密碼,不需要輸入用戶名,選項-d:指定空口令,-l:禁用某用戶,-u解禁某用戶,-f:強迫用戶下次登錄時修改口令
- groupadd 組名 :創建用戶組
- groupdel 用戶組 :刪除組
- groupmod -n 新組名 舊組名 :修改用戶組名字
- su - 用戶名:完整的切換到一個用戶環境(相當於登錄)(建議用這個)(退出用戶:exit)
- su 用戶名 :切換到用戶的身份(環境變量等沒變,導致很多命令要加上絕對路徑才能執行)
- sudo 命令 :以root的身份執行命令(輸入用戶自己的密碼,而su爲輸入要切換用戶的密碼,普通用戶需設置/etc/sudoers纔可用sudo)
磁盤管理
- df -h :顯示磁盤的空間使用情況 及掛載點
- df -h /var/log :(顯示log所在分區(掛載點)、目錄所在磁盤及可用的磁盤容量)
- du -sm /var/log/* | sort -rn : 根據佔用磁盤空間大小排序(MB)某目錄下文件和目錄大小
- fdisk -l :查所有分區及總容量,加/dev/sda爲查硬盤a的分區)
- fdisk /dev/sdb :對硬盤sdb進行分區
- mount /dev/sda1 /mnt :硬盤sda1掛載到/mnt目錄(mount 裝置文件名 掛載點)
- mount -t cifs -o username=luolanguo,password=win用戶賬號密碼,vers=3.0 //10.2.1.178/G /mnt/usb :遠程linux 共享掛載windows的U盤,G爲U盤共享名,需設置U盤共享
- mount -o loop /opt/soft/CentOS-7-x86_64-DVD-1708.iso /media/CentOS :掛載iso文件
- umount /dev/sda1 :取消掛載(umount 裝置文件名或掛載點)
壓縮、解壓和打包備份
單純tar僅爲打包(多個文件包成一個大文件),加上參數-j(bzip2格式.bz2)、-z(gzip格式.gz)可以備份、壓縮(-c)、解壓(-x),備份一般比壓縮多加參數-p(保留原本文件的權限與屬性),-C可以指定解壓到特定目錄;bzip2、gzip只能對單一文件壓縮;
- file 文件名 :查文件類型(可看是用哪一種方式壓縮的)
- tar -zxvf a.tar.gz -C ./test :解壓tar.gz到當前目錄下的test目錄
- tar -zcvf /opt/c.tar.gz ./a/ :壓縮tar.gz(把當前目錄下的a目錄及目錄下所有文件壓縮爲 /opt/目錄下的c.tar.gz,這樣tar -zxvf c.tar.gz解壓出來帶有目錄a)
- tar -jxvf a.tar.bz2 :解壓tar.bz2(到當前目錄)
- tar -jcvf c.tar.bz2 ./a/ :壓縮tar.bz2(把當前目錄下的a目錄及目錄下所有文件壓縮到當前目錄下爲c.tar.gz2)
- unzip a.zip :解壓zip(到當前目錄)
- unzip -o mdmtest.war -d /opt/mdm :推薦使用unzip解壓war包(-o覆蓋原有文件,-d指定文件解壓後存儲的目錄)
- zip -r c.zip ./a/ :壓縮zip(把當前目錄下的a目錄及目錄下所有文件壓縮到當前目錄下爲c.zip
- bzip2 -k file1 : 壓縮一個 ‘file1’ 的文件(-k表示保留源文件)(bzip2格式,比gzip好)
- bzip2 -d -k file1.bz2 : 解壓一個叫做 'file1.bz2’的文件
- gzip file1 : 壓縮一個叫做 'file1’的文件(gzip格式)(不能保留源文件)
- gzip -9 file1 : 最大程度壓縮
- gzip -d file1.gz : 解壓縮一個叫做 'file1’的文件
複習題
- 主分區+擴展分區最多4個,擴展分區最多1個,邏輯分區最多12個。擴展分區相當於邏輯分區的容器;Sdb3:第2塊SCSI硬盤上第3個主/擴展分區;sdb5:第2塊SCSI硬盤上第1個邏輯分區。
- 文件權限:第1位若爲“d”表示目錄,“b”表示設備(塊文件);“-”表示普通文件;24位表示文件所有者的權限;57位表示羣組內其他成員的權限;8~10位表示組外其他所有人的權限;
- 建立軟鏈接:ln –s file linkFile
- 創建目錄b,權限爲777:mkdir –m 777 b
- 不提示,直接刪除全部:rm -rf b
- 將a下所有目錄和文件複製到b:cp –r a b
- 把/etc目錄下所有後綴爲conf的文件複製到a目錄: cp /etc/*.conf a
- 分頁顯示文本文件:More:一次顯示的行數:-num 多個空行替換爲一行:-s 從第num行開始顯示:+num
- 回捲顯示文本文件:less
一
一、選擇題 (每小題2分,共50分)
1.在創建Linux分區時,一定要創建( D )兩個分區
A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SWAP/根分區
2.在Red Hat Linux 9中,系統默認的(A)用戶對整個系統擁有完全的控制權。
A. root B. guest C. administrator D.supervistor.
\3. 當登錄Linux時,一個具有唯一進程ID號的shell將被調用,這個ID是什麼( B )
A. NID B. PID C. UID D. CID
\4. 下面哪個命令是用來定義shell的全局變量( D )
A. exportfs B. alias C. exports D. export
\5. 哪個目錄存放用戶密碼信息( B )
A. /boot B. /etc C. /var D. /dev
\6. 默認情況下管理員創建了一個用戶,就會在( B )目錄下創建一個用戶主目錄。
A. /usr B. /home C. /root D. /etc
\7. . 當使用mount進行設備或者文件系統掛載的時候,需要用到的設備名稱位於( D )目錄。
A. /home B. /bin C. /etc D. /dev
\8. 如果要列出一個目錄下的所有文件需要使用命令行( C )。
A. ls –l B. ls C. ls –a(所有) D. ls –d
\9. 哪個命令可以將普通用戶轉換成超級用戶(D )
A. super B. passwd C. tar D. su
\10. 除非特別指定,cp假定要拷貝的文件在下面哪個目錄下( D )
A. 用戶目錄 B. home目錄 C. root目錄 D. 當前目錄
\11. 在vi編輯器裏,命令"dd"用來刪除當前的( A )
A. 行 B. 變量 C. 字 D. 字符
\12. 當運行在多用戶模式下時,用Ctrl+ALT+F*可以切換多少虛擬用戶終端( B )
A. 3 B. 6 C. 1 D. 12
\13. Linux啓動的第一個進程init啓動的第一個腳本程序是( B )。
A./etc/rc.d/init.d B./etc/rc.d/rc.sysinit C./etc/rc.d/rc5.d D./etc/rc.d/rc3.d
\14. 按下(A )鍵能終止當前運行的命令
A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D
\15. 下面哪個命令用來啓動X Window ( C )
A. runx B. Startx C. startX D. xwin
\16. 用來分離目錄名和文件名的字符是( B )
A. dash (-) B. slash (/) C. period (.) D. asterisk(*)
\17. 用 “rm -i”,系統會提示什麼來讓你確認( B )
A. 命令行的每個選項 B. 是否真的刪除 C. 是否有寫的權限 D. 文件的位置
\18. 以下哪個命令可以終止一個用戶的所有進程( D )
A. skillall B. skill C. kill D. killall
19.在Red Hat Linux 9中,一般用( D )命令來查看網絡接口的狀態
A. ping B. ipconfig C. winipcfg D ifconfig
\20. vi中哪條命令是不保存強制退出( C )(第五章)
A. :wq B. :wq! C. :q! D. :quit
21.局域網的網絡設備通常有(ABCDE )
A. 交換機 B. 路由器 C. 網橋 D. 雙絞線 E. HUB
22.在下列分區中,Linux默認的分區是( B )
A. FAT32 B. EXT3 C FAT .D NTFS
23.若要將鼠標從VM中釋放出來,可按 ( A )鍵來實現
A. Ctrl + Alt B. Ctrl +Alt +Del C. Ctrl +Alt +Enter D Ctrl +Enter
24.如果用戶想對某一命令詳細的瞭解,可用(C)
A. ls B. help (內部) C. man(列舉的信息多) D dir
\25. Samba服務器的配置文件是 (D )。
A httpd.conf B inetd.conf C rc.samba D smb.conf
二、填空題 (每空1分,共10分)
\26. 在Linux系統中,以_文件的_方式訪問設備 。
\27. Linux內核引導時,從文件 _/etc/fstad___中讀取要加載的文件系統。
\28. Linux文件系統中每個文件用**_i節點**____來標識。
\29. 某文件的權限爲:d-rw-_r–_r–,用數值形式表示該權限644,該文件屬性是 目錄。
\30. 靜態路由設定後,若網絡拓撲結構發生變化,需由**系統管理員_**修改路由的設置。
\31. 網絡管理的重要任務是:控制_和監控______。
\32. 安裝Linux系統對硬盤分區時,必須有兩種分區類型:文件系統分區 和 **__**交換分區。
\33. 編寫的Shell程序運行前必須賦予該腳本文件 **執行 **權限。
三、操作題(每小題5分,共40分)
40.簡述在虛擬機中安裝Red Hat Linux 9.0 的過程
答;1。下載操作系統的鏡像ISO文件
2.下載虛擬機並安裝
3.通過ISO文件安裝操作系統
4.執行相關配置即可
二
一、選擇題(單選題,每小題2分,共20分)
1.用戶編寫了一個文本文件a.txt,想將該文件名稱改爲txt.a,下列命令__D____可以實現。
A. cd a.txt xt.a B. echo a.txt > txt.a
C. rm a.txt txt.a D. cat a.txt > txt.a
2.Linux文件權限一共10位長度,分成四段,第三段表示的內容是___C___ 。
A. 文件類型 B. 文件所有者的權限
C. 文件所有者所在組的權限 D. 其他用戶的權限
3.在使用mkdir命令創建新的目錄時,在其父目錄不存在時先創建父目錄的選項是___D__。
A. -m B. -d C. -f D. -p
4.下面關於i節點描述錯誤的是__A___ 。
A.i節點和文件是一一對應的
B.i節點能描述文件佔用的塊數
C.i節點描述了文件大小和指向數據塊的指針
D.通過i節點實現文件的邏輯結構和物理結構的轉換
5.在vi編輯器中的命令模式下,重複上一次對編輯的文本進行的操作,可使用__C____命令。
A. 上箭頭 B. 下箭頭 C. “.” D. “*”
6.某文件的組外成員的權限爲只讀;所有者有全部權限;組內的權限爲讀與寫,則該文件的權限爲__D____ 。
A. 467 B. 674 C. 476 D. 764
7.在Redhat公司發佈的Linux版本中,若要使得用戶登錄驗證,需要修改以下__C____腳本。
A. /etc/inittab B. /etc/passwd
C. /etc/shadow D. /etc/group
8.下列不是Linux系統進程類型的是_D_____ 。
A. 交互進程 B. 批處理進程 C. 守護進程 D. 就緒進程
9.下列關於/etc/fstab文件描述,正確的是___D___ 。
A. fstab文件只能描述屬於linux的文件系統
B. CD_ROM和軟盤必須是自動加載的
C. fstab文件中描述的文件系統不能被卸載
D. 啓動時按fstab文件描述內容加載文件系統
10.在Shell腳本中,用來讀取文件內各個域的內容並將其賦值給Shell變量的命令是__D___ 。
A. fold B. join C. tr D. read
二、填空題(每題2分,共20分)
1.安裝Linux系統對硬盤分區時,必須有兩種分區類型:Linux原始分區(根分區) 和Linux交換分區 。
2.在Linux的兩種鏈接文件中,只能實現對文件鏈接的一種方式是:軟鏈接(符號鏈接)。
3.Linux主要採用了 請求調頁 和 寫時複製 _兩種動態內存管理技術實現了物理內存以On demand方式動態分配。
4.對於System V類型的共享內存頁面,Linux基於__Clock____算法決定哪些頁面應當被換出物理內存。
5.在Linux與中斷相關的三個核心數據結構中,用做抽象的中斷控制器的數據結構是_ hw_interrupt_type _____,它包含一系列處理中斷控制器特有的操作。
\6. 通過將_ request _____動態鏈入塊設備控制結構blk_dev_struct,Linux設備管理器有效的實現了物理設備和緩衝區之間的異步讀寫通訊。
7.將/home/stud1/wang目錄做歸檔壓縮,壓縮後生成wang.tar.gz文件,並將此文件保存到/home目錄下,實現此任務的tar命令格式__tar czvf wang.tar.gz /home/stud1/wang____。
8.對於給定的文件file,統計其中所有包含字符串”WHU”的行數的一條命令是_grep WHU file | wc -l
\9. 對於Shell腳本程序,若輸入參數數量多於9個,則程序遍歷每個參數可通過使用__shift__命令實現。
10.在System V進程通訊方式中,ipc_perm結構描述對一個系統IPC對象的存取權限,而用於定位IPC對象的引用標誌符key可以依據鍵值分成_公有____和___私有___兩種類型。
三、簡答題(每小題5分,共20分)
1.在底半技術中把一箇中斷處理分爲哪幾部分?爲什麼採用這種技術?
答:在底半技術中把一箇中斷處理分爲2部分:頂半部分和底半部分。2分
採用這種技術可以:使中斷的總延遲時間最小化,加快對中斷請求的響應速度,合併某些中斷處理。3分
2.論述實時信號、非實時信號、可靠信號、不可靠信號四個概念。
答:實時信號目前未用,非實時信號編號1~31、0表示空信號 1分
非實時信號沒有排隊機制,可能丟失 1分
不可靠信號0~31、可靠信號32~63 1分
不可靠信號每次處理完信號後,都將對信號的響應設置爲默認動作,需要在結尾再次安裝信號;可靠信號和不可靠信號的安裝函數也不同。兩者的區別主要在於信號類型取值,而不在於操縱他們的API 2分
3.簡要論述Kswapd核心線程的動態特性。
答:主要通過nr_async_pages參考free_pages_high和free_pages_low來判斷交換數量和線程睡眠時間: 1分
Nr_async_pages大於free_pages_high時每次釋放6個頁面,在free_pages_high和free_pages_low之間時釋放3個,小於free_pages_low時不釋放 2分
若Kswapd被喚醒後發現Nr_async_pages小於free_pages_low則睡眠時間加班,反之則逐步延長睡眠時間
4.簡述Linux文件系統通過i節點把文件的邏輯結構和物理結構轉換的工作過程。
答:Linux通過i節點表將文件的邏輯結構和物理結構進行轉換 1分
i節點是一個64字節長的表,表中包含了文件的相關信息,其中有文件的大小、文件所有者、文件的存取許可方式以及文件的類型等重要信息。1分
在i節點表中最重要的內容是磁盤地址表。在磁盤地址表中有13個塊號,文件將以塊號在磁盤地址表中出現的順序依次讀取相應的塊。若文件空間大於13塊,則分別用1次、2次、3次間接塊實現對數據塊的定位。 2分
此後,Linux文件系統通過把i節點和文件名進行連接,當需要讀取該文件時,文件系統在當前目錄表中查找該文件名對應的項,由此得到該文件相對應的i節點號,通過該i節點的磁盤地址表把分散存放的文件物理塊連接成文件的邏輯結構。
四、操作題(寫出完成下述功能的命令序列,每小題4分,共20分)
1.假設你的用戶賬號是zheng,現在你登錄進入linux系統,查看當前登錄到系統中的用戶,查看當前系統中運行的進程,然後再退出系統。
答:login:zheng
Password:口令
$who
$ps
$Ctrl+D
2.在當前目錄/home/zheng下新建一個目錄back,將當前目錄改爲back,在back下新建2個長度爲0的文件test1、test2,然後把test2移到其父目錄中並改名爲file12。
答:$ mkdir back
$ cd back
$ touch test1 test2
$ mv test2 …/file2
3.現在需要統計當前目錄/home/zheng下普通文件的數目並顯示結果,如何實現?
$find –type f | wc –l
4.假設你是系統管理員,需要增加一個新的用戶賬號zheng,爲新用戶設置初始密碼,鎖定用戶賬號uly,並刪除用戶賬號chang。
答:.#useradd zheng
#passwd zheng
#passwd –l uly
#userdel chang
5.若給需要將/home/zheng目錄下的所有文件打包壓縮成/tmp/zheng.tar.gz,你準備怎麼做?當需要從壓縮包中恢復時,又該如何處理?
答:#tar –zcvf /tmp/zheng.tar.gz /home/zheng
#tar -zxvf /tmp/zheng.tar.gz
五、下面給出了一個SHELL程序,試對其行後有#(n)形式的語句進行解釋,並說明程序完成的功能。(8分)
#!/bin/sh
DIRNAME=ls /root | grep bak
#(1)
if [ -z “$DIRNAME” ] ; then #(2)
mkdir /root/bak ; cd /root/bak #(3)
fi
YY=date +%y
; MM=date +%m
; DD=date +%d
#(4)
BACKETC=MM$DD_etc.tar.gz #(5)
tar zcvf $BACKETC /etc #(6)
echo “fileback finished!”
答:#(1)獲取/root中名稱包含bak的文件或目錄
#(2)判斷1結果爲空
#(3)創建目錄/root/bak並進入該目錄
#(4)獲取當前時間的年月日
#(5)按照年(2位)月(2位)日(2位)_etc方式構造壓縮文件名
#(6)壓縮etc目錄並保存在/root/bak中 6分
程序功能:若/root/bak不存在則創建之,然後將/etc按日期打包保存於該目錄中。2分
六、填寫標記代碼行的意義,給出功能描述和前6行程序輸出。(6分)
#include <unistd.h>
#include <signal.h>
int ntimes=0;
main(int argc, char *argv[]) {
int pid,ppid;
int p_action( ), c_action( );
signal(SIGUSR1 , p_action); #(1)
switch(pid=fork( )) { #(2)
case -1: perror("fork failed?);
exit(1);
case 0: signal(SIGUSR1,c_action);
ppid=getppid( );
for ( ; ; ) ;
default: {
for( ; ; ) {
pause;
sleep(1);
kill(pid,SIGUSR1); #(3)
}
}
}
}
p_action( ) {
printf(“parent caught signal #%d\n”,++ntimes);
}
c_action( ) {
printf(“child caught signal #%d\n”,++ntimes/, ++ltimes/);
int ppid;
ppid = getppid(); #(4)
kill(ppid, SIGUSR1);
sleep(3);
}
答:#(1)在父進程中爲信號SIGUSR1綁定函數p_action
#(2)創建子進程
#(3)向子進程發送信號SIGUSR1
#(4)獲取父進程的PID4分
父進程無線循環向子進程發送信號,子進程收到信號後向父進程發送相同信號,父子進程之間各自記錄全局變量的變化,結果如:
child caught signal #1
parent caught signal #1
child caught signal #2
parent caught signal #2
child caught signal #3
parent caught signal #32分
七、設計一個shell程序,添加一個新組爲class1,然後添加屬於這個組的30個用戶,用戶名的形式爲stdxx,其中xx從01到30。(6分)
答:#!/bin/sh
i=1
groupadd class1
while [ $i -le 30 ] 1分
do
if [ $i -le 9 ] ;then
USERNAME=stu0${i} 1分
else
USERNAME=stu${i} 1分
fi
useradd $USERNAME 1分
mkdir /home/$USERNAME
chown -R USERNAME 1分
chgrp -R class1 /home/$USERNAME
i=i + 1)) #或let “i=i+1” 1分
done
三
一、選擇題(單選題,每小題2分,共20分)
1.Linux系統的開發模型是 B__ 。
A.教堂模型 B.集市模型 C.層次模型 D.網狀模型
2.在Linux中,進程優先級的相關參數有多個,與實時進程優先級相關的參數是 D__ 。
A.policy B.counter C.priority D.rt_priority
3.B_ 屬於SYSTEM Ⅴ進程間通信方式。
A.管道 B.信號量 C.軟中斷信號 D.鎖機制
4.在Linux系統中,每個進程都有4GB的虛擬地址空間,其中內核空間佔用 C_ 。
A.0~2GB-1 B.0~3GB-1 C.3GB~4GB-1 D.2GB~4GB-1
5.Linux文件系統中,文件在外存的物理地址放在 A 中。
A.i節點 B.用戶打開文件表
C.系統打開文件表 D. 進程控制塊
6.以長格式列目錄時,若文件test的權限描述爲:drwxrw-r–,則文件test的類型及文件主的權限是__A____ 。
A. 目錄文件、讀寫執行 B. 目錄文件、讀寫
C. 普通文件、讀寫 D.普通文件、讀
7.當字符串用單引號(’’)括起來時,SHELL將 C__ 。
A.解釋引號內的特殊字符 B.執行引號中的命令
C.不解釋引號內的特殊字符 D.結束進程
8./etc/shadow文件中存放 B____ 。
A.用戶賬號基本信息 B.用戶口令的加密信息
C.用戶組信息 D.文件系統信息
9.Linux系統中,用戶文件描述符0表示 __A 。
A.標準輸入設備文件描述符 B.標準輸出設備文件描述符
C.管道文件描述符 D.標準錯誤輸出設備文件描述符
10.爲卸載一個軟件包,應使用 _B 。
A.rpm -i B.rpm -e C.rpm -q D.rpm -V
二、填空題(每空1分,共20分)
1.在Linux2.4.0版本中,進程有 6 種狀態,進程使用 exit__ 系統調用後進入僵死狀態。
2.在Linux 中,管道分爲 2__ 種類型,若創建或打開管道時獲得的描述符存放在fd中,則fd[1]是 管道寫描述符 。
3.Linux爲用戶提供的接口有 shell、XWINDOW、系統調用
4.Linux在I386體系結構中支持 __兩級____分頁機構。
5.每個設備文件名由主設備號和從設備號描述。第二塊IDE硬盤的設備名爲 hdb__,它上面的第三個主分區對應的文件名是 hdb3__ 。
\6. 超級塊是描述 文件系統屬性__ 信息的數據結構,索引節點是描述 文件屬性__ 信息的數據結構。
7.df命令完成_顯示文件系統空間使用情況_____ 功能,du命令完成 顯示目錄或文件佔用磁盤空間容量____ 功能。
8.命令組合(命令表)將 建立新的子進程____ 來執行命令。
\9. 磁盤限額管理可以使用 quota__ 軟件工具,其中硬限額的容量應該__大於____軟限額。
10.交換線程通過三種途徑來縮減已使用的內存頁面:減少buffer cache和page cache的大小、換出系統V類型的內存頁面、換出或丟棄進程的頁面
三、簡答題(每小題5分,共20分)
\2. vi編輯器有哪幾種工作模式?如何在這幾種工作模式之間轉換?
答:Vi的工作模式有三種:命令模式、輸入模式、末行模式。3分
在命令模式下輸入a、A、i、I、o、O等命令之一可以進入輸入模式,在輸入模式下按Esc鍵回到命令模式;在命令模式下輸入:進入末行模式,末行命令執行完後回到命令模式。
\3. 什麼是位置變量?shell的變量類型有哪些種?
位置變量是指命令行上傳遞給程序的參數。1分
Shell變量可以分爲:用戶自定義變量、環境變量、位置變量、特殊變量 4分
4.從內核實現的角度說明Linux進程共享文件的方式有哪幾種?舉例說明什麼情況下會產生對應的共享情況?
答:進程通過多個file結構共享一個inode,進程共享一個file結構。 2分
五、下面給出了一個SHELL程序,試對其行後有#(n)形式的語句進行解釋,並說明程序完成的功能。(8分)
#!/bin/bash #(1)
dir=$1 #(2)
if [ -d $dir ] #(3)
then
cd $dir #(4)
for file in *
do
if [-f $file ] #(5)
then
cat $file #(6)
echo “end of file $file”
fi
done
else
echo “bad directory name $dir”
fi
答:#(1)使用/bin/bash解釋腳本
#(2)將位置變量1賦值給變量dir
#(3)如果dir所指爲目錄
#(4)將當前目錄改爲dir
#(5)如果循環變量file所指是普通文件
#(6)顯示文件file的內容 6分
程序功能:若命令行參數是一個合法目錄則顯示該目錄下所有普通文件的內容,否則顯示錯誤的目錄名信息。2分
六、在Linux系統中運行下面程序,最多可產生多少個進程?畫出進程家族樹。(6分)
main()
{
fork();
fork();
fork();
}
答:最多可以產生7個進程 3分
家族樹如右 3分
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xU6X4p0m-1572060962379)(D:\typoraImage\wps1.png)]七、試編寫一個SHELL程序,該程序能接收用戶從鍵盤輸入的100個整數,然後求出其總和、最大值及最小值。(6分)
答:#!/bin/sh
read max
min=$max
sum=$max
i=1
while [$i –lt 100]
do
read x
sum=expr $sum + $x
if [ $max –lt $x ]
then
max=$x
fi
if [ $ x –lt $min ]
then
min=$x
fi
i=expr $i + 1
done
echo "sum = $sum ; max = $max min = $min "
四
1.若當前目錄爲/home,命令ls –l 將顯示home目錄下的( )。
A.所有文件 B.所有隱含文件
C.所有非隱含文件 D.文件的具體信息
2.下面關於文件 "/etc/sysconfig/network-scripts/ifcfg-eth0"的描述哪個是正確的? ( )。
A.它是一個系統腳本文件 B.它是可執行文件
C.它存放本機的名字 D.它指定本機eth0的IP地址
\3. 如何快速切換到用戶John的主目錄下?( )
A.cd @John B.cd #John C.cd &John D.cd ~John
4.啓動DNS服務的守護進程( )
A. httpd start B.httpd stop C. named start D. named stop
\5. 若URL地址爲http://www.nankai.edu/index.html,請問哪個代表主機名( )。
A.nankai.edu.cn B.index.html
C.www.nankai.edu/index.html D.www.nankai.edu
6.RED HAT LINUX 9默認使用的文件系統類型爲( )
A.ext2 B.ext3 C.FAT D.swap
7.在LINUX中,要查看文件內容,可使用( )命令。
A.more B.cd C.login D.logout
8.光盤所使用的文件系統類型爲( )。
A.ext2 B.ext3 C.swap D.ISO 9660
9.以下命令中,可以將用戶身份臨時改變爲root的是( )。
A.SU B.su C.login D.logout
10.LINUX所有服務的啓動腳本都存放在( )目錄中。
A./etc/rc.d/init.d B./etc/init.d C./etc/rc.d/rc D./etc/rc.d
11.若要使用進程名來結束進程,應使用( )命令。
A.kill B.ps C.pss D.pstree
12.RED HAT LINUX所提供的安裝軟件包,默認的打包格式爲( )。
A…tar B…tar.gz C…rpm D…zip
13.若要將當前目錄中的myfile.txt文件壓縮成myfile.txt.tar.gz,則實現的命令爲( )。
A.tar –cvf myfile.txt myfile.txt.tar.gz
B.tar –zcvf myfile.txt myfile.txt.tar.gz
C.tar –zcvf myfile.txt.tar.gz myfile.txt
D.tar –cvf myfile.txt.tar.gz myfile.txt
14.LINUX交換分區的格式爲( )。
A.ext2 B.ext3 C.FAT D.swap
15.以下文件中,只有root用戶纔有權存取的是( )
A.passwd B.shadow C.group D.password
16.usermod命令無法實現的操作是( )
A.賬戶重命名 B.刪除指定的賬戶和對應的主目錄
C.加鎖與解鎖用戶賬戶 D.對用戶密碼進行加鎖或解鎖
17.LINUX用於啓動系統所需加載的內核程序位於( )
A./ B./lib/modules/2.4.20_8/kernel C./boot D./proc
18.init進程對應的配置文件名爲( ),該進程是LINUX系統的第一個進程,其進程號PID始終爲1。
A./etc/fstab B./etc/init.conf C./etc/inittab.conf D./etc/inittab
19.在LINUX運行的7個級別中,X—WINDOWS圖形系統的運行級別爲( )。
A.2 B.3 C.5 D.6
20.若在文字界面下,需要鍵入何種指令才能進入圖形界面(Xwindow)。( )
A. reboot B.startx
C.startwindow D.getinto
二、 填空題(每空2分,共20分)
1.在Linux系統中,以( 文件 )方式訪問設備 。
\2. Linux內核引導時,從文件(/etc/fstab )中讀取要加載的文件系統。
3.鏈接分爲: 硬鏈接和( 軟鏈接 )。
4.某文件的權限爲:drw-r–r--,用數值形式表示該權限,該文件屬性是( 目錄 ) 。
5.前臺起動的進程使用 ( ctrl+c )終止。
\6. 設定限制用戶使用磁盤空間的命令是( quota )。
\7. 在Linux系統中,用來存放系統所需要的配置文件和子目錄的目錄是(/etc )。
8.將前一個命令的標準輸出作爲後一個命令的標準輸入,稱之爲( 管道 )。
9.爲腳本程序指定執行權的命令及參數是( chmod a+x filename )。
10.進行字符串查找,使用( grep )命令。
三、寫出完成以下功能的命令(每題2分,共10分)
1.在其父目錄不存在時先創建父目錄的命令。 mkdir –p
2.要使得名爲fido的文件具有如下權限-r-xr-x—x的命令。chmod 551 fido
3.在/root文件夾下查找後綴爲.cpp的文件。find /root –name *.cpp
4.關閉linux系統(不重新啓動)使用的命令 halt
5.將光盤/dev/hdc卸載的命令 。umount /dev/hdc
四、簡答和shell編程題(每題10分,共30分)
\1. 若下達rmdir命令來刪除某個已存在的目錄,但無法成功,請說明可能的原因。
參考答案:
此目錄可能不存在,
或者目錄不爲空,或者目錄中有隱含文件存在,
或者目錄被設置了權限,
解決方法就是先修改權限,在使用rm –r 命令刪除。
2.簡述解決忘記root密碼的辦法。
參考答案:
1)用RedHat標準安裝盤啓動系統
當出現提示符時敲入:linux rescue
就會以修復模式啓動系統
2)系統啓動完畢後,會將硬盤mount到/mnt/sysimage,屆時會有提示
3)進入提示符後,敲入命令:
chroot /mnt/sysimage
4)敲入命令:
passwd
更改密碼
5)連續敲入兩次exit,即重起系統,將光盤拿出,按正常模式啓動系統
除了用光盤引導rescue模式,還有一種方法是用啓動裝載器來進入單用戶模式:
(1) grub
進入啓動畫面之後,敲入“e”,把光標移動到kernel …那一行,再敲入“e”,在kernel 一行的最後加上空格single,回車
敲入“b”,啓動系統,即進入單用戶模式,
這個時候就可以用passwd命令改密碼了。
(2) lilo
進入lilo命令行模式,敲入linux single,即進入單用戶模式。
passwd …
如果grub/lilo設了密碼,一定要記住才行。要是忘了grub/lilo的密碼,就只有用rescue模式了。
3.創建一個shell 腳本,它從用戶那裏接收10個數,並顯示已輸入的最大的數。
參考程序:
#! /bin/bash
max=0
for((count=1 ; count <= 10 ; count = count+1))
do
echo -n "Enter number $count : "
read value
if [ $max -lt $value ]
then
max=$value
fi
done
五
一、單項選擇題(每題2分,共40分)
當安裝linux操作系統時將選擇下列那一個操作? ( )
A. 選擇 “圖形登錄方式” 設定系統開始運行級爲4
B. 選擇 “文本登錄方式” 設定系統開始運行級爲3
C. 選擇 “文本登錄方式” 設定系統開始運行級爲5
D. 選擇 “圖形登錄方式” 設定系統開始運行級爲3
2.Linux通過VFS支持多種不同的文件系統。Linux缺省的文件系統是( )
A.VFAT B.ISO9660 C.Ext系列 D.NTFS
3.關閉linux系統(不重新啓動)可使用( )命令。
A.ctrl+alt+del B.halt C.shutdown -r D.reboot
4.修改以太網mac地址的命令爲( )。
A.ping B.ifconfig C.arp D.traceroute
5.在vi編輯器中的命令模式下,鍵入( )可在光標當前所在行下添加一新行。
A. B. C. D.a
\6. 以下選項中,哪個命令可以關機? ( )
A. init 0 B. init 1 C. init 5 D. init 6
7.請選擇關於 /etc/fstab 的正確描述。 ( )
A. 系統啓動後,由系統自動產生
B. 用於管理文件系統信息
C. 用於設置命名規則,是否使用可以用 TAB 來命名一個文件
D. 保存硬件信息
8.你使用命令“vi /etc/inittab”查看該文件的內容,你不小心改動了一些內容,爲了防止系統出問題,你不想保存所修改內容,你應該如何操作( )
A.在末行模式下,鍵入:wq B.在末行模式下,鍵入:q!
C.在末行模式下,鍵入:x! D.在編輯模式下,鍵入“ESC”鍵直接退出vi
9.刪除文件命令爲( )****
****A.mkdir B.move C.mv D.rm
10.顯示已經掛裝的文件系統磁盤inode使用狀況的命令是( ) ?
A.df –i B.su –I C.du –I D.free –i
11.網絡管理員對www服務器可進行訪問、控制存取和運行等控制,這些控制可在( )文件中體現。A.httpd.conf B.lilo.conf C.inetd.conf D.resolv.conf
12.如果想在Linux下實現熱啓,應當修改/etc/inittab下的哪一行( )。
A.#Trap CTRL-ALT-DELETE
B.#ca::ctrlaltdel :/sbin/shutdown -t3 -r now
C.#id:3:initdefault:
D.#10:3:wait:/etc/rc.d/rc 3
13.啓動samba服務器進程,可以有兩種方式:獨立啓動方式和父進程啓動方式,其中後者是在( )文件中以獨立進程方式啓動。
A./usr/sbin/smbd B./usr/sbin/nmbd C.rc.samba D./etc/inetd.conf
14下列哪個命令在建立一個 tar歸檔文件的時候列出詳細列表( )。
A.tar -t b)tar -cv c)tar -cvf d)tar –r
15.假設文件fileA的符號鏈接爲fileB,那麼刪除fileA後,下面的描述正確的是( ) 。
A.fileB也隨之被刪除
B.fileB仍存在,但是屬於無效文件
C.因爲fileB未被刪除,所以fileA會被系統自動重新建立
D.fileB會隨fileA的刪除而被系統自動刪除
16.一個bash shell腳本的第一行是( )?
A.#/bin/csh B.#/bin/bash
C./bin/bash D.#!/bin/bash
17.改變文件所有者的命令爲( )?A.chmod B.touch C.chown D.cat
18.在給定文件中查找與設定條件相符字符串的命令爲( )。
A.grep B.gzip C.find D.sort
19.建立一個新文件可以使用的命令爲( )。
A.chmod B.more C.cp D.touch
\20. 存放Linux基本命令的目錄是什麼( )?
A. /bin B. /tmp C. /lib D. /root
二、 填空題(每空2分,共20分)
1.將前一個命令的標準輸出作爲後一個命令的標準輸入,稱之爲( 管道 )。
2.在shell編程時,使用方括號表示測試條件的規則是:方括號兩邊必有( 空格)。
3.在Linux系統下,第二個IDE通道的硬盤(從盤)被標識爲( hdb )。
4.當系統管理員需升級內核版本和改變系統硬件配置時,應(重新編譯內核 )。
5.在Linux系統中,測試DNS服務器是否能夠正確解析域名的的客戶端命令,使用命令( nslookup )。
6.啓動進程有手動啓動和調度啓動兩種方法,其中調度啓動常用的命令爲 at 、batch 和( crontab ) 。
7.在Linux操作系統中,設備都是通過特殊的(文件 )來訪問。
8.shell不僅是(用戶命令的解釋權 ),它同時也是一種功能強大的編程語言。
9.在Windows9.x環境下共享Unix/Linux中的用戶目錄的一個工具是(samba )服務器。
10.結束後臺進程的命令是(kill )。
三、寫出完成以下功能的命令(每題2分,共10分)
1.在/home目錄下查找文件名爲。Profile的文件,找到後刪除
2.將test.tar.gz文件解壓縮
3.升級安裝wu-ftpd軟件包
4.創建一個用戶,用戶名爲user02,所屬私有組和標準組爲stuff,用戶家目錄爲/home/user2,用戶登陸shell爲/bin/bash。
5.賦予所有用戶讀和寫backup.tar.gz文件的權限:
參考答案:
1.find /home –name .profile -exec rm{ } ;
2.tar -xzvf test.tar.gz
3.rpm –Uvh wu-ftpd-2.6.2-8.i386.rpm
4.useradd –g stuff –G stuff -d /home/user2 -s /bin/bash user02
5.Chmod a+rw back.tar.gz
四、簡答和shell編程題(每題10分,共30分)
\1. Linux內核主要由哪幾部分組成?每部分的作用?
參考答案:
Linux內核主要由五個子系統組成:進程調度,內存管理,虛擬文件系統,網絡接口,進程間通信。
進程調度(SCHED):控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程;內存管理(MM)允許多個進程安全的共享主內存區域;虛擬文件系統(VirtualFileSystem,VFS)隱藏了各種硬件的具體細節,爲所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統;網絡接口(NET)提供了對各種網絡標準的存取和各種網絡硬件的支持;進程間通訊(IPC) 支持進程間各種通信機制。
2.有一普通用戶想在每週日凌晨零點零分定期備份/user/backup到/tmp目錄下,該用戶應如何做?
參考答案:
(1)第一種方法:
用戶應使用crontab –e 命令創建crontab文件。格式如下:
0 0 * * sun cp –r /user/backup /tmp
(2)第二種方法:
用戶先在自己目錄下新建文件file,文件內容如下:
0 * * sun cp –r /user/backup /tmp
然後執行 crontab file 使生效。
3.寫一個shell 腳本,檢查給出的串是否爲迴文(palindrome)。
參考程序:
#! /bin/bash
echo “Enter string”
read str
len=echo $str | wc -c
len=expr $len - 1
l=expr $len / 2
ctr=1
flag=0
while test $ctr -le $l
do
a=echo $str | cut -c$ctr
b=echo $str | cut -c$len
if test $a -ne $b
then flag=1
break
fi
ctr=expr $ctr + 1
len=expr $len - 1
done
if test $flag -eq 0
then echo “String is palindrome”
else echo “String not a palindrome”
fi
六
*一、填空題(2 X 10 分)*
1.全部Redhat 9.0系統安裝最大大約需要多大磁盤空間 ( 5G ).
2.Redhat 9.0默認的文件系統類型爲 ( ext3 )
3.輸入了Shell命令的部分字符後按什麼鍵可補全其餘部分? ( tab )
4.要顯示內存用量用什麼命令? ( free )
5.完全刪除/tmp下的所有文件用什麼命令及參數? ( rm –r /tmp )
6.若從任一目錄用什麼命令可快速轉到用戶家目錄? ( cd ~ )
7.要強制殺死某個進程用什麼命令 ( kill -9 PID )
8以192.168.6.0/255.255.255.0代表的系列計算機是 ( 192.168.6.1-192.168.6.254 )
9.改變命令提示符的環境變量是 ( PS1 )
10.要查找文件除了用find命令外還可以用什麼命令? ( locate )
*二、敘述題 (70分)*
1.敘述Linux操作系統的三個主要部分及其功能。(6分)
內核:內核是系統的心臟,是運行程序和管理像磁盤和打印機等硬件設備的核心程序。
命令解釋層:是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。
文件結構:是文件存放在磁盤等存儲設備上的組織方法,文件結構的相互關聯性使共享數據變得容易。
2. 分別敘述linux對IDE硬盤和usb接口的移動硬盤的各個分區如何表示?(6分)
hdxx,sdxx,
3.敘述什麼是shell? 什麼是X window?Redhat的默認shell和X window是什麼?(6分)
Shell 是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。是一個命令解釋器,它可以用來啓動、掛起、停止、甚至編寫程序。
Xwindow 選擇shell如何進行任務控制。是否支持命令行編輯。是否支持命令行歷史記錄,環境變量有哪些,什麼是它的開機啓動文件或者配置文件,支持什麼樣的編程框架?
是UNIX和Linux系統上的圖形用戶界面系統。
3 Linux的默認shell是bash,默認XWindow是XFree86
4.執行命令 ls –l 時,某行顯示如下: (8分)
-rw-r–r-- 1 chris chris 207 jul 20 11:58 mydata
(1)用戶chris 對該文件具有什麼權限? (2)執行命令useradd Tom後,用戶Tom對該文件具有什麼權限?
(3)如何使任何用戶都可以讀寫執行該文件?(4)如何把該文件屬主改爲用戶root ?
1 讀寫
2 只讀
3 chmod 777 mydata
4 chown root mydata
5.關於Samba服務器:(1)敘述該服務器的功能;(2)配置該服務器時對安全性選項卡中的驗證模式有哪幾種選項?(5分)
Samba服務器的功能是在既有windows也linux操作系統的局域網中提供計算機間的文件共享。
配置該服務器時對安全性選項卡中的驗證模式有域、服務器、共享、用戶四種選項
6. 利用vsftp配置FTP服務器,要求:(1)匿名用戶可以下載上傳文件;(2)本地用戶不允許登陸。寫出詳細的配置過程和配置選項。(8分)
(1)主要配置文件是/etc/lvsftpd/vsftpd.conf;將vsftpd.conf文件中的#anon-upload-enalle=Yes 前的“#“刪掉,並將/var/ftp/pub目錄設爲同組和其它可寫權限。chmod go+w /var/ftp/pub↓
(2)用service vsftpd start(stop)(restart)命令啓動(關閉)(重啓)服務器。
7.如何在兩臺Linux系統的計算機上實現文件共享?寫出該服務器的配置細節以及在客戶端的執行命令。(8分)
(1) Linux的NFS服務器的功能是向系統中的Linux計算機提供共享文件系統。
(2)使用NFS服務器配置工具配置NFS,選擇[主菜單]/[系統設置]/[服務器設置]/[NFS服務器]命令。添加NFS共享目錄及允許共享的主機名(而不是提供共享的主機名)讀寫權限等內容
(3) Mount IP:/NetDirectory localDerctory
8. 假設linux分配給光驅的設備名是/dev/cdrecord,敘述Linux如何在這個光驅上使用光盤。寫出詳細的命令步驟解釋。(7分)
(1) 插好U盤,用fdisr –l /dev/sda/ 命令查看U盤分區情況
(2) 建立掛袋目錄:mkdir /mnt/usb
(3) 掛載U盤:mount –tvfat /dev/sda1 /mnt/usb
(4) 用文件管理器或命令行方式瀏覽文件
(5) 卸載U盤:umount/mnt/usb
(6) 卸去U盤。
掛載
Mount /dev/cdrecord /mnt/cdrom
*卸載 umount /mnt/cdrom*
9.敘述Linux如何使用Windows系統硬盤(設備名爲/dev/hda3,分區類型爲fat32)上的文件,如何實現開機自動掛載windows硬盤。寫出詳細的步驟。(8分)
(1) 用fdisk -l /dev/had 命令查看硬盤分區中情況及文件系統情況,決定要掛裝Windows分區
(2) 建立掛裝目錄 mkdir /mnt/dos
(3) 掛裝Windows系統 mount –tvfat /dev/had/ /mnt/dos
(4) 瀏覽Windows文件系統 ls /mnt/dos
(5) 卸載:umount /mnt/dos
(6) 打開/etc/fstab 添加一行
/dev/hda3 /mnt/hd vfat defaults 0 0
七
*一、填空題(20%)*
\1. 默認情況下,超級用戶和普通用戶的登錄提示符分別是:“#”和“$”。
\2. Linux內核引導時,從文件 /etc/fstab 中讀取要加載的文件系統。
\3. Linux系統下經常使用的兩種桌面環境是:GNOME和KDE。
\4. 鏈接分爲: 硬鏈接 和 符號鏈接 。
\5. Linux系統中有三種基本的文件類型:普通文件、目錄文件和設備文件。
\6. 某文件的權限爲:drw-r–r--,用數值形式表示該權限,則該八進制數爲: 644 ,該文件屬性是 目錄 。
\7. 在超級用戶下顯示Linux系統中正在運行的全部進程,應使用的命令及參數是 ps -aux 。
\8. 將前一個命令的標準輸出作爲後一個命令的標準輸入,稱之爲 管道 。
\9. /sbin 目錄用來存放系統管理員使用的管理程序。
\10. 觀察當前系統的運行級別可用命令:who -r實現。
\11. grep -E ‘[Hh]enr(y|ietta)’ file的功能是:(在文件File中查找Henry、henry、Henrietta或 henrietta)
\12. 設C語言程序my.c
A. 生成目標文件my.o的命令是(gcc -c my.c)。
B. 生成彙編語言文件my.s的命令是(gcc -S my.c)。
C. 生成可執行程序myp的命令是(gcc -o myp my.c)。
\13. 設有兩個C語言程序模塊c1.c和c2.c(不含main函數)
A. 由c1.c和c2.c生成靜態庫libmyar.a的命令是(gcc -o libmyar.a -c c1.c c2.c)。
B. 由c1.c和c2.c生成共享庫libmyar.so的命令是(gcc -shared -o libmyvar.so -c f1.c f2.c)。
\14. 在某Makefile內有以下語句:
SRC = f1.c f2.c f3.c
TGT = $(SRC:.c=.d)
SRC += f4.c
則TGT=________ f1.o f2.o f3.o ____________
SRC=_______ f1.c f2.c f3.c f4.c _________
*二、選擇題(40%)*
\1. 關於Linux內核版本的說法,以下錯誤的是( )。
A.表示爲主版本號.次版本號.修正號 B.1.2.3表示穩定的發行版
C.1.3.3表示穩定的發行版 D.2.2.5表示對內核2.2的第5次修正
\2. 自由軟件的含義是( )。
A.用戶不需要付費 B.軟件可以自由修改和發佈
C.只有軟件作者才能向用戶收費 D.軟件發行商不能向用戶收費
\3. 系統引導的過程一般包括如下幾步:a.MBR中的引導裝載程序啓動;b.用戶登錄;c.Linux內核運行;d.BIOS自檢。正確的順序是( )。
A.d,b,c,a B.d,a,c,b C.b,d,c,a D.a,d,c,b
\4. 字符界面下使用shutdown命令重啓計算機時所用的參數是( )。
A.-h B.-t C.-k D.-r
\5. 下列設備屬於塊設備的是( )。
A.鍵盤 B.終端
C.遊戲杆 D.硬盤
\6. cd命令可以改變用戶的當前目錄,當用戶鍵入命令“cd”並按Enter鍵後,( )。
A.當前目錄改爲根目錄 B.當前目錄不變,屏幕顯示當前目錄
C.當前目錄改爲用戶主目錄 D.當前目錄改爲上一級目錄
\7. 在UNIX/Linux系統添加新用戶的命令是( )
A. groupadd B. usermod
C. userdel *D. useradd*
\8. 添加用戶時使用參數( )可以指定用戶目錄。
A. -d B. -p
C. -u D. -c
\9. 修改用戶自身的密碼可使用( )
A. passwd B. passwd -d mytest
C. passwd mytest D. passwd -l
\10. 設用戶所使用計算機系統上有兩塊IDE硬盤,Linux系統位於第一塊硬盤上,查詢第二塊硬盤的分區情況命令是:( )
A. fdisk -l /dev/hda1 B. fdisk -l /dev/hdb2
C. fdisk -l /dev/hdb D. fdisk -l /dev/hda
\11. 統計磁盤空間或文件系統使用情況的命令是:( )
A. df B. dd
C. du D. fdisk
\12. 用於文件系統直接修改文件權限管理命令爲:( )
A. chown B. chgrp
C. chmod D. umask
\13. 若使pid進程無條件終止使用的命令是( )。
A. kill -9 B. kill -15
C. killall -1 D. kill -3
\14. 顯示系統主機名的命令是( )
A. uname -r B. who am i
C. uname -n D. whoami
\15. 查詢已安裝軟件包dhcp內所含文件信息的命令是( )
A. rpm -qa dhcp B. rpm -ql dhcp
C. rpm -qp dhcp D. rpm -qf dhcp
\16. Linux系統中用於打印隊列查詢的命令是( )。
A. lp B. lprm
C. lpr D. lpstat
\17. 202.196.100.1是何類地址( )
A、A類 B、B類
C、C類 D、D類
\18. 當IP地址的主機地址全爲1時表示:( )
A、專用IP地址 B、對於該網絡的廣播地址
C、本網絡地址 D、回送地址
\19. 路由器最主要的功能是:( )
A、將信號還原爲原來的強度,再傳送出去B、選擇信息包傳送的最佳路徑
C、連接互聯網 D、集中線路
\20. FTP傳輸中使用哪兩個端口( )?
A、23和24 B、21和22
C、20和21 D、22和23
*三、判斷題(10%)*
\1. RedHat LINUX安裝時自動創建了根用戶。正確
\2. 在安裝RedHat Linux時要以圖形化模式安裝,直接按Enter 。正確
\3. LINUX中的超級用戶爲root,登陸時不需要口令。錯誤
\4. Linux不可以與MS-DOS、OS/2、Windows等其他操作系統共存於同一臺機器上。錯誤
\5. Linux的特點之一是它是一種開放、免費的操作系統。 正確
\6. redhat系統中,默認情況下根口令沒有字符長短的的限制,但是必須把口令輸入兩次;如果兩次輸入的口令不一樣,安裝程序將會提示用戶重新輸入口令。 錯誤
\7. 確定當前目錄使用的命令爲:pwd。 正確
\8. RedHat默認的 Linux 文件系統是ext3。正確
\9. RedHat Linux使用 ls -all 命令將列出當前目錄中的文件和子目錄名。 錯誤
\10. 在RedHat中cd ~ 這個命令會把你送回到你的家目錄。正確
\11. 在字符界面環境下注銷LINUX,可用exit或ctrl+D。正確
\12. 虛擬控制檯登陸就是使用文本方式登陸虛擬控制檯登陸就是使用文本方式登陸。正確
*四、簡答題(20%)*
1.什麼是Linux?其創始人是誰?Linux操作系統的誕生、發展和成長過程始終依賴着的重要支柱都有哪些?
答:Linux是一個功能強大的操作系統,同時它是一個自由軟件,是免費的、源代碼開放的,可以自由使用的類UNIX產品。其創始人是Linus。Linux操作系統的誕生、發展和成長過程始終依賴着的重要支柱有以下幾點:(1)UNIX操作系統;(2)MINIX操作系統;(3)GNU計劃;(4)POSIX標準;(5)Internet網絡。
\2. 試述如何創建一個用戶。
答:可使用命令useradd創建新用戶,但不能在系統中隨便創建用戶,需經相關部分批准後方能創建。對於長期或暫時不使用的用戶,應將其從系統中刪除或鎖定起來,以防非法使用。創建新用戶時可以使用命令useradd -d home newuser指定用戶家目錄,若不指定則使用默認的家目錄/home/newuser。一般情況下,當一個用戶被創建之後,只有超級用戶爲它設置密碼後才能被啓用或登錄使用。
\3. Linux系統有幾種類型文件?它們分別是什麼?有哪些相同點和不同點?
答:3類。分別是普通文件,目錄文件和設備文件。相同是它們都是文件,都有一個文件名和i節點號。不同點是,普通文件的內容爲數據,目錄文件的內容爲目錄項或文件名與i節點對應表,設備文件不佔用磁盤空間,通過其i節點信息可建立與內核驅動程序的聯繫。
\4. 綜述Linux系統的文件權限及其管理。
答:Linux用文件存取控制表來解決存取權限的控制問題。存取控制表以文件爲單位,把用戶按某種關係畫分爲若干組,同時規定每組用戶的存取權限。每個文件都有一張存取控制表。在實現時,該表存放在文件說明中,也就是i節點的文件權限項。
就某個文件而言,它只對三類用戶(文件主,同組人,其它人)分配權限。權限的修改或分配可通過命令chmod來實現。當然chmod和chgrp等命令也有着權限控制作用,因爲文件的主和組變了,它相應的權限也會隨之改變。
\5. 在UNIX/Linux系統中,環境變量是非常重要,在字符界面下試說明:
(1) PATH變量的作用,如何得到PATH的值?
(2) 在UNIX/Linux系統的超級用戶的環境變量PATH中允許包含當前目錄嗎?
(3) 若在超級用戶的當前目錄內有可執行文件mypro,如何執行它(寫出執行時鍵盤輸入內容)?
(4) 如何使用該命令在後臺執行(寫出執行時鍵盤輸入內容)?
答:(1) PATH爲命令搜索路徑,可用echo $PATH命令顯示;(2)UNIX/Linux的PATH變量內不允許包含當前路徑(.);(3)./mypro;(4)./mypro &
*五、綜合編程題(10%)*
1、設計一個shell程序計算n的階乘。要求:
(1) 從命令行接收參數n;
(2) 在程序開始後立即判斷n的合法性,即是否有參數,若有是否爲正整數,若非法請給錯誤提示;
(3) 最後出計算的結果。
參考代碼:
#!/bin/sh
if [ $# -eq 0 ]; then echo -e “$0 no Params.\a\n”; exit 0; fi
x=echo $1 | awk '/[^[:digit:]]/ { print $0 } '
if [ “x$x” != “x” ] ; then echo -e “Input: $* error!\a”; exit 1; fi
fact=1;tmp=1
while [ $tmp -le $1 ]
do
fact=((++tmp));
done
echo “fact=$fact”
\2. 閱讀Makefile文件:
all : libmys.so
SRC = f1.c f2.c f3.c
TGT = $(SRC:.c=.o)
%.o : %.c
cc -c $?
libmys.so : $(TGT)
cc -shared -o $@ $(TGT)
clean:
rm -f $(TGT)
回答以下問題:
(1) 此Makefile文件的主要功能是什麼?
(2) 此Makefile文件包含多少個規則?它們分別是什麼?
(3) 使用此Makefile文件可以生成目標文件f2.o嗎?爲什麼?
參考答案:
(1)生成共享庫文件libmys.so;
(2) 4個。分別是:all,%.o,libmys.so和clean。
(3) 可以。因爲規則%.o : %.c已經定義了*.o與*.c的關係和生成方法。
八
1.以下哪一個是linux內核的穩定版本( B )
A.2.5.24 B. 2.6.17 C. 1.7.18 D. 2.3.20
2.怎樣顯示當前目錄( A )。
A. pwd B. cd C. who D. ls
3.欲把當前目錄下的 file1.txt 複製爲 file2.txt,正確的命令是( D )。
A. copy file1.txt file2.txt B. cp file1.txt | file2.txt
C. cat file2.txt file1.txt D. cat file1.txt > file2.txt
\4. 如果您想列出當前目錄以及子目錄下所有擴展名爲“.txt”的文件,那麼您可以使用的命令是( B )。
A. ls *.txt B. find . –name “.txt” C. ls –d .txt D. find . “.txt”
\5. 如何刪除一個非空子目錄 /tmp( B )。
A. del /tmp/* B. rm -rf /tmp C. rm -Ra /tmp/* D. rm –rf /tmp/*
\6. 存放用戶帳號的文件是( C )。
A. shadow B. group C. passwd D. Gshadow
7.下面哪個系統目錄中包含Linux使用的外部設備( B )。
A. /bin B. /dev C. /boot D. /home
8.一個文件名字爲rr.Z,可以用來解壓縮的命令是( D )
A.tar B. gzip C. compress D. uncompress
9. Linux通過VFS支持多種不同的文件系統。Linux缺省的文件系統是( C )
A.VFAT B. ISO9660 C. Ext系列 D. NTFS
10. 在vi編輯器中的命令模式下,鍵入( B )可在光標當前所在行下添加一新行
A. O B. o C. i D. a
11.在vi編輯器中的命令模式下,重複上一次對編輯的文本進行的操作,可使用( C )命令。
A.上箭頭 B. 下箭頭 C. . D. *
12.刪除文件命令爲(D)
A.mkdir B. move C. mv D. rm
13.如果想在Linux下實現熱啓,應當修改/etc/inittab下的哪一行( B )
A.#Trap CTRL-ALT-DELETE
B. ca::ctrlaltdel:/sbin/shutdown -t3 -r now
C. id:3:initdefault:
D. 10:3:wait:/etc/rc.d/rc 3
14.假設文件fileA的符號鏈接爲fileB,那麼刪除fileA後,下面的描述正確的是( B)
A.fileB也隨之被刪除
B. fileB仍存在,但是屬於無效文件
C. 因爲fileB未被刪除,所以fileA會被系統自動重新建立
D. fileB會隨fileA的刪除而被系統自動刪除
15.在給定文件中查找與設定條件相符字符串的命令爲( A )
A.grep B. gzip C. find D. sort
16.從後臺啓動進程,應在命令的結尾加上符號( A )
A.& B. @ C. # D. $
\17. 如果執行命令 #chmod 746 file.txt,那麼該文件的權限是( A )。
A. rwxr–rw- B. rw-r–r-- C. --xr—rwx D. rwxr–r—
\18. Linux有三個查看文件的命令,若希望在查看文件內容過程中可以用光標上下移動來查看文件內容,應使用命令( C )
A.cat B. more C. less D. menu
\19. 若一臺計算機的內存爲128MB,則交換分區的大小通常是( C )
A.64MB B. 128MB C. 256MB D. 512MB
\20. 在使用mkdir命令創建新的目錄時,在其父目錄不存在時先創建父目錄的選項是( B )
A.-m B. -p C. -f D.-d
\21. 用ls –al 命令列出下面的文件列表,是符號連接文件的是( D )
A.-rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello
B.-rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey
C.drwxr–r-- 1 hel users 1024 Sep 10 08:10 zhang
D.lrwxr–r-- 1 hel users 7 Sep 12 08:12 cheng
\22. 文件exer1的訪問權限爲rw-r–r--,現要增加所有用戶的執行權限和同組用戶的寫權限,下列命令正確的是( A )
A.chmod a+x, g+w exer1 B.chmod 765 exer1
C.chmod o+x exer1 D.chmod g+w exer1
\23. 關閉linux系統(不重新啓動)可使用-命令( C )
A.ctrl+alt+del B.shutdown -r C.halt D.reboot
24.對文件進行歸檔的命令爲(B )
A.gzip B.tar C.dump D.dd
\25. NFS是( C )系統
A.文件 CbPLinux聯盟B 磁盤 CbPLinux聯盟C.網絡文件 CbPLinux聯盟D.操作
\26. 下列那一個指令可以設定使用者的密碼( C )
A.pwd B.newpwd C.passwd D.password
\27. 下列那一個指令可以切換使用者身份( D )
A.passwd B.log C.who D.su
\28. 下列那一個指令可以顯示目錄的大小( C )
A.dd B.df C.du D.dw
\29. 下列那一個不是壓縮指令( D )
A.compress B.gzip C.bzip2 D.tar
\30. 下列那一個指令可以用來切換至不同的 runlevels( B )
A.tel CbPLinux聯盟B telinit CbPLinux聯盟C.goto CbPLinux聯盟D.reboot
\31. 欲查詢 bind 套件是否有安裝,可用下列那一指令( D )
A.rpm -ivh bind*.rpm B.rpm -q bind*.rpm
C.rpm -U bind*.rpm D.rpm -q bind
\32. 欲安裝 bind 套件, 應用下列那一指令( A )
A.rpm -ivh bind*.rpm B.rpm -ql bind*.rpm
C.rpm -V bind*.rpm D.rpm -ql bind
\33. 欲移除 bind 套件,應用下列那一指令( D )
A.rpm -ivh bind*.rpm B.rpm -Fvh bind*.rpm
C.rpm -ql bind*.rpm D.rpm -e bind
\34. 下列那一個指令可以用來查看系統負載情形( A )
A.w B.who c C.load D.ps
\35. 檔案權限 755 , 對檔案擁有者而言, 何義( A )
A.可讀,可執行, 可寫入 CbPLinux聯盟B 可讀 CbPLinux聯盟C.可讀,可執行 CbPLinux聯盟D.可寫入CbPLinux聯盟CbPLinux聯盟
36.下面哪個系統目錄中存放了系統引導、啓動時使用的一些文件和目錄
( D )。
A./root B. /bin C. /dev D. /boot
\37. 如何刪除目錄 /tmp下的所有文件及子目錄( D )。
A. del /tmp/* B. rm -rf /tmp C. rm -Ra /tmp/* D. rm –rf /tmp/*
38.可以用來對文件xxx.gz解壓縮的命令是( C )
A.compress B. uncompress C. gunzip D. tar
39.對文件重命名的命令爲(C)
A.rm B. move C. mv D. mkdir
\40. 一下哪個環境變量表示當前路徑( B )。
A. PATH B. PWD C. HOME D.ROOT
*二、填空題********:*
1. /Sbin 目錄用來存放系統管理員使用的管理程序
2.在Linux系統下,第二個IDE通道的硬盤(從盤)被標識爲 hdb
3.vi編輯器具有三種工作模式,即:命令模式、文本編輯模式和 行編輯模式
4.linux文件系統中每個文件用 i節點 來標識
5.前臺啓動的進程使用複合鍵 CTRL+C 終止。
\6. 結束後臺進程的命令是 kill
7.將前一個命令的標準輸出作爲後一個命令的標準輸入,稱之爲 管道
8.增加一個用戶的命令是 useradd
9.成批添加用戶的命令是 newuser
\10. 檢查已安裝的文件系統/dev/had5是否正常,若檢查有錯,則自動修復,其命令及參數是
Fsck –a /dev/had5
11.把文件file1和file2合併成file3的命令是 cat file1 file2>file3
12.在/home目錄中查找所有的用戶目錄的命令是 find /home –type d
\13. top 命令能夠實時地顯示進程狀態信息。
\14. 利用管道技術統計當前目錄下有多少個文件,該命令是 ls ./|wc –w
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Yt3sQflg-1572060962385)(D:\typoraImage\wps1.jpg)]15.以下爲 u盤插入usb接口後執行fdisk –l的結果。則要將該u盤掛裝到/mnt/usb下的命令是 mount /dec/sdb1 /mnt/usb
\16. 在 Linux 系統中,壓縮文件後生成後綴爲.gz文件的命令是 gzip
\17. RPM有5種基本操作模式,即: 安裝、查詢、校驗、升級、刪除
18.將當前目錄下的文件man.config 壓縮爲man.config.bz2 的命令是 bzip2 –z man.config
19.將/home/stu目錄下所有的.gz壓縮文件解壓縮,包括子目錄,命令是 gunzip –r /home/stu
20.將當前目錄下的bin目錄和hello、hello.c文件備份並壓縮爲binzxj.tar.gz文件的命令是 tar –czvf binzxj.tar.gz bin hello hello.c
\21. 將/home/ixdba目錄做歸檔壓縮,壓縮後生成ixdba.tar.bz2文件,並將此文件保存到/home目錄下,實現此任務的tar命令格式 tar -cjvf /home/ ixdba.tar.bz2 /home/ixdba
22.如下爲命令終端下的一個截圖:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ykue0nwZ-1572060962386)(D:\typoraImage\wps2.jpg)]
則,以下兩句的執行結果是: the home path is $HOME
path=‘the home path is $HOME’
echo $path
\23. 以下爲程序名爲prog的程序內容。則 sh prog a b c d的執行結果爲 C
set A B C D
shift
shift
echo $1
\24. RPM有5種基本操作模式,即: 。
\25. shell腳本程序test(具有可執行權限)只有如下兩條語句,則sh test 5的運行結果是50.00
price=$10.00
echo $price
*三.簡答題:*
1. 簡述linux的幾個運行級別及其相應的含義。
0-關機模式,
1-單用戶模式,單用戶只有系統管理員可以登錄。
2-多用戶模式,但是不支持文件共享,例如不支持NFS服務.這種模式不常用。
3-完全的多用戶模式,支持NFS服務.最常用的用戶模式,默認登錄到系統的字符界面。
4-保留模式。
5-完全多用戶模式,默認登錄到X-window系統,也就是登錄到linux圖形界面。
6-重啓模式,也就是執行關閉所有運行的進程,然後重新啓動系統。
2.什麼是鏈接?符號鏈接與硬鏈接的區別是什麼?
鏈接是指用一個i節點對應多個文件名。硬鏈接是把文件的i節點號指向該i節點,
且鏈接計數器值加1。刪除鏈接文件時計數器值減1,當其值爲0時,i節點被釋放。
符號鏈接是隻有文件名的一個鏈接文件,並不指向一個真正的i節點。
在刪除符號鏈接文件時與硬鏈接文件有區別。
3.使用進程調度啓動,指定30分鐘後(或在2008年12月28日晚上20點30分)將/home/stu目錄裏的文件備份並壓縮爲stu.tar.gz,並放到/home/temp目錄裏(當前/home/temp目錄並不存在)。
(1) 編輯一個文件,如:atfile,內容如下:
mkdir /home/temp
tar –czvf /home/temp/stu.tar.gz /home/stu/*
(2) 執行at命令
at –f atfile now +30 minutes
解答2:
(1) 執行at命令
at now +30 minutes
(2) 回車出現at>提示符後,繼續輸入要做的命令
at> mkdir /home/temp
at> tar –czvf /home/temp/stu.tar.gz /home/stu/*
at>
4.Shell程序中,對用戶變量賦值有哪些方式?簡要說明每種賦值方式的使用方法。
(1) 等號賦值
1)在等號前後均不能有空格。
2)當需要將一個包含空格的字符串賦給用戶變量時,應用單引號將該字符串括起來。
(2) 鍵盤賦值
由read命令來實現的。用法爲:read 用戶變量名
當shell程序執行到該行時,將等待用戶從鍵盤輸入,
當用戶按下回車鍵時shell把你輸入的內容賦給用戶變量。
(3) 命令替換賦值
用法爲:用戶變量=命令
該語句將首先執行反向單引號之間的命令,
然後將其執行後輸出的內容賦給該用戶變量,在這種賦值方式中,
等號前後同樣不能有空格,而且必須用反向單引號(即重音號)把命令括起來。
*四、綜合應用:*
1.編寫1個彈出式菜單的shell程序並實現其簡單的菜單功能:
* MENU *
* 1.copy 2.rename *
* 3.remove 4.find *
* 5.exit *
即用戶按下數字1,則提示用戶輸入源和目的文件名後執行復制;輸入數字2,則提示用戶輸入要更名的文件或目錄後執行更名操作;輸入數字3,則提示用戶輸入要刪除的文件並執行刪除操作;輸入數字4,則提示用戶輸入要查找的文件並執行查找操作;輸入數字5,則退出該菜單shell程序的執行。
#! /bin/sh -
clear
while [ 0 ]; do
echo “************************************************”
echo " menu "
echo " 1.copy 2.rename "
echo " 3.remove 4.find "
echo " 5.exit "
echo “************************************************”
echo
echo -n " select:"
read choice
echo
case $choice in
1)
echo -n “source file:”
read src
echo
echo -n “destination fold:”
read des
cp -arf $src $des
if $?; then
echo “copy sucessful!”
else
echo " copy fail"
fi;;
2)
echo -n “the file to be renamed:”
read src
echo
echo -n “the new file:”
read des
mv $src $des
if $?; then
echo “rename sucessful!”
else
echo " rename fail"
fi;;
3)
echo -n “the file to be removed:”
read src
rm -rf $src
if $?; then
echo “remove sucessful!”
else
echo " remove fail"
fi;;
echo -n “the file to be found:”
read src
find $HOME -name $src;;
5) exit;;
*) echo “Invalid option”;;
esac
done
\2. 編寫shell程序,實現自動刪除50個用戶賬號的功能。賬號名爲stud1至stud50
#!/bin/sh
i=1
while [ $i -le 50 ]
do
userdel -r stud${i}
i=i+1 ))
done
echo “remove sucessful!”
else
echo " remove fail"
fi;;
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7cIIiMdc-1572060962388)(D:\typoraImage\wps3.jpg)]3.用shell編寫小九九乘法表程序,程序執行結果如下:
#! /bin/sh –
for i in 1 2 3 4 5 6 7 8 9
do
for j in 1 2 3 4 5 6 7 8 9
do
if ( test $j -le $i ) then
echo -ne expr $i \* $j
“\t”
else
echo
break
fi
done
done