導航:首頁 > 操作系統 > linuxshell小寫

linuxshell小寫

發布時間:2023-08-19 07:43:57

1. 求助:linux常用SHELL命令

LINUX常用命令

1 文件與目錄操作命令

1.1文件內容查詢命令

grep、fgrep、egrep

CODE:[Copy to clipboard]語法:grep[選項][查找模式][文件名1,文件名2,……]
選項:

QUOTE:
-E 每個模式作為一個擴展的正則表達式對待
-F 每個模式作為一組固定字元串對待,而不作為正則表達式
-i 比較時不區分大小寫
-l 顯示首次匹配匹配串所在的文件名並用換行符將其分開。當在文件中多次出現匹配串時,不重復顯示次文件名;
-x 只顯示整行嚴格匹配的行
1.2文件查找命令 find、locate

語法:

CODE:[Copy to clipboard]find 起始目錄 尋找條件 操作
以名稱和文件屬性查找

QUOTE:
-name『字串『 查找文件名匹配所給字串的所有文件,字串內可用通配符*、?、[]。
-lname『字串『 查找文件名匹配所給字串的所有符號鏈接文件,字串內可用通配符*、?、[]。
-gid n 查找屬於ID號為n的用戶組的所有文件。
-uid n 查找屬於ID號為n的用戶的所有文件。
-group『字串『 查找屬於用戶組名為所給字串的所有的文件。
-user『字串『 查找屬於用戶名為所給字串的所有的文件。
-path『字串『 查找路徑名匹配所給字串的所有文件,字串內可用通配符*、?、[]。
-perm 許可權 查找具有指定許可權的文件和目錄,許可權的表示可以如711、644。
-type x 查找類型為 x的文件,
語法:locate 相關字

1.3文件的復制、刪除和移動命令

文件復制命令

CODE:[Copy to clipboard]cp [選項] 源文件或目錄 目標文件或目錄
選項:

QUOTE:
- a 通常在拷貝目錄時使用
-d 拷貝時保留連接
-f 刪除已經存在的目標文件而不提示
-i 和f選項相反
-p 此時cp除復制源文件內容外,還將其修改的時間和訪問許可權也復制到新文件中
-r 若給出的源文件是一目錄文件,此時cp將遞歸復制該目錄下的所有的子目錄和文件,此時目標文件必須為一個目錄名;
-l 不作拷貝,只是鏈接文件
文件移動命令

CODE:[Copy to clipboard]mv[選項] 源文件或目錄 目標文件或目錄

QUOTE:
-i 互動式操作
-f 禁止互動式操作
文件刪除命令

CODE:[Copy to clipboard]rm[選項] 文件…

QUOTE:
-f 忽略不存在的文件,從不給出提示
-r 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除
-i 進行互動式刪除
1.4文件鏈接命令

CODE:[Copy to clipboard]ln [選項] 目標 [鏈接名] 或 ln [選項] 目標 目錄

QUOTE:
選項:
- s 建立符號鏈接
1.5目錄的創建和刪除命令

mkdir 創建一個目錄
語法:

CODE:[Copy to clipboard]mkdir [選項] dirname
選項:
- m 對新建目錄設置存取許可權
-p 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄。

rmdir 刪除空目錄
語法:

CODE:[Copy to clipboard]rmdir [選項] dirname

QUOTE:
選項:
- p 遞歸刪除目錄dirname,當子目錄刪除後其父目錄為空時,也一同被刪除。
1.6改變工作目錄,顯示目錄內容命令

1、改變工作目錄:

CODE:[Copy to clipboard]cd [directory]
2、顯示當前工作的目錄的絕對路徑:

CODE:[Copy to clipboard]pwd
3、顯示目錄內容:

CODE:[Copy to clipboard]ls [選項] [目錄或是文件]

QUOTE:
選項:
- a 顯示指定目錄下所有子目錄與文件,包括隱藏文件;
-c 按照文件的修改時間排序
-C 分成多列顯示各項
-d 如果參數是目錄,只顯示其名稱而不顯示其下的個文件
-F 在目錄名後面標記「/」,可執行文件後面標記「*」,符號鏈接後面標記「@」,管道(或FIFO)後面標記「|」,socket文件後面標記「=」。
-l 以長格式來顯示文件的詳細信息
-L 若指定的名稱為一個符號鏈接,則顯示鏈接所指向的文件
-t 顯示時按修改時間而不是名字排序
-u 顯示時按文件上次存取的時間而不是名字排序
4、改變文件或目錄的訪問許可權命令

CODE:[Copy to clipboard]chmod [who] [+| - | = ] [mode] 文件名?

QUOTE:
Who選項:
- u表示用戶,即文件和目錄的所有者
-g表示同組用戶
-o(other)表示其他用戶
-a (all)表示所有用戶

QUOTE:
操作符號:
+ 添加某個許可權 - 取消某個許可權
= 賦予給定許可權並取消其他所有的許可權(如果有的話)

QUOTE:
mode 選項:
- r 可讀
-w 可寫
-x 可執行

CODE:[Copy to clipboard]chgrp [-R] group filename? 改變目錄或文件所屬的組

CODE:[Copy to clipboard]chown [-Rv] 用戶或組 文件
1.7備份與壓縮命令

1、tar命令 為文件和目錄創建檔案
語法:

CODE:[Copy to clipboard]tar [主選項+輔助選項] 文件或者目錄

QUOTE:
u 主選項
c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,則選此項
r 把要存檔的文件追加到檔案文件的末尾
t 列出檔案文件的內容,查看已經備份了哪些文件;
u 更新文件
x 從檔案文件中釋放文件;
u 輔助選項
b 該選項為磁帶機設定的,其後跟一位數字,用來說明區塊的大小,系統預設值為20
f 使用檔案文件或設備,這個選項通常是必選的
k 保存已經存在的文件。例如把某個文件還原,在還原的過程中,遇到相同的文件,不會進行覆蓋;
m 在還原文件時,把所有文件的修改時間設定為現在;
M 創建多卷的檔案文件,以便在幾個磁碟中存放;
v 詳細報告tar處理的文件信息
w 每一步都要求確認
z 用gzip來壓縮/解壓縮文件
2、gzip命令 壓縮/解壓縮命令
語法:

CODE:[Copy to clipboard]gzip [選項] 壓縮(解壓縮)的文件名

QUOTE:
選項:
-c 將輸出寫到標准輸出上,並保留原有文件
-d 將壓縮文件解壓
-l 顯示每個壓縮文件的詳細信息
-r 遞歸式地查找指定目錄並壓縮其中的所有文件或者是解壓縮
-t 測試、檢查壓縮文件是否完整
-v 對每一個壓縮和解壓的文件,顯示文件名和壓縮比
3、unzip 命令
用MS windows下的壓縮軟體winzip壓縮的文件在linux系統下展開
語法:

CODE:[Copy to clipboard]unzip [選項] 壓縮文件名.zip

QUOTE:
選項:
-x 文件列表 解壓縮文件,但不包括指定的file文件
-v 查看壓縮文件目錄,但不解壓
-t 測試文件有無損壞 ,但不解壓
-d 目錄 將壓縮文件解到指定目錄下
-z 只顯示壓縮文件的註解
-n 不覆蓋已經存在的文件
-o 覆蓋已經存在的文件且不要求用戶確認
-j 不重建文檔的目錄結構,把所有文件解壓到同一目錄下
1.8在LINUX環境下運行DOS命令

linux系統提供了一組稱為mtools的可移植工具,可以讓用戶輕松地從標準的DOS軟盤上讀寫文件和目錄。

QUOTE:
mcd 目錄名 改變MSDOS目錄
m 源文件 目標文件 在MSDOS和UNIX之間復制文件;
mdel 目錄名 刪除MSDOS目錄
mdir 目錄名 顯示MSDOS目錄
mformat 驅動器號 在低級格式化的軟盤上創建MSDOS文件系統
rnlabel 驅動器號 產生MSDOS卷標
mmd 目錄名 刪除MSDOS目錄
mren 源文件 目標文件 重新命名已存在的MSDOS文件
mtype 文件名 顯示MSDOS文件的內容
2 設備管理命令

1)linux採用下面的形式定義一個IDE硬碟:

CODE:[Copy to clipboard]/dev/hd[drive][partition]
2)SCSI硬碟使用同樣的機製表示:

CODE:[Copy to clipboard]/dev/sd[drive][partition]
3)對於一般的LINUX分區,可以用mkfs將其格式化並生成文件系統,命令如下:

CODE:[Copy to clipboard]mk2fs –c <partition>; <size>;
4)裝載文件系統:

CODE:[Copy to clipboard]mount –t ext2 [-o optioms] partition mountpiont
其中,

QUOTE:
-t為指定裝載文件系統的類型;
-o指定一些選項,如只讀ro,可讀可寫rw等等;
partition定義分區名稱;
mountpiont定義文件系統被裝載的目錄名稱。
5)裝載CD-ROM文件系統:

CODE:[Copy to clipboard]mount –t iso9660 –r /dev/cdrom /mnt/cdrom
6)裝載軟碟機文件系統:

CODE:[Copy to clipboard]mount –t msdos –rw /dev/fd0 /dev/mnt/floppy
7)卸載文件系統

CODE:[Copy to clipboard]umount /mnt/cdrom
磁帶設備的安裝要注意以下幾點:

QUOTE:
1、 首先要選擇一個唯一的SCSI ID號,然後再將設備鏈接到適當的位置

2、 選擇驅動程序。

3、 生成設備文件。SCSI磁帶設備的主要設備號是9,次要設備號是0。設備文件名通常是/dev/nrst0(不支持回繞的磁帶設備)或/dev/nst0(支持回繞的磁帶設備)

用 ls /dev/*rst*
檢查磁帶設備文件是否存在,如果不存在,用
mknod –m 666 /dev/nrst0 c 9 9
mknod –m 666 /dev/rst0 c 9 0 生成

4、 可以對塊長度、緩存、磁帶密度等參數進行一些設置,例如
mt setblk 20 將塊長度指定為20
mt setblk 0 指定塊程度沒有限制

5、 通過檢查系統的啟動信息可以確定系統是否識別了新的磁帶設備。用dmesg命令,查看是否有以下類似的信息:
aha274x:target 4now synchronous at 4.4Mb/s
Vendor:TANDBERG Model:TDC 3800 Rev: =05:
Type: Sequential-Access ANSI SCSI revision: 02
Detected scsi tape st0 at scsi0, id4, lun0
Scsi : detected 1 SCSI tape 1 SCSI crom 1 SCSI disk total
3 軟體包管理命令

3.1軟體安裝的步驟

在LINUX系統上安裝軟體的步驟有:

QUOTE:
1、 查找所要安裝軟體的源文件
2、 把源文件解開放到一個目錄中,命令如下:
tar zxvf <源文件名>;
3、 針對本操作系統配置源文件。可以是編輯make文件或其他文件,也可能是運行該軟體自帶的自動配置工具,如./configure
4、 make源文件,通常是運行make命令,即執行 make
5、 安裝二進制文件和其他支撐文件,運行命令: make install
6、 最後,完成所有其他必須的配置
3.2軟體包管理命令

QUOTE:
rpm –ivh <軟體包>;
// 安裝指定的軟體包,並在安裝過程中用#表示安裝的進度
rpm –Uvh <軟體包>;
// 更新一個已經存在的或還沒安裝好的軟體包,並刪除所有該軟體包的舊版本。
rpm –e
//卸載一個rpm軟體包
rpm –qa
// 查看系統中已經安裝的軟體包
rpm –q <軟體包>;
// 查看系統中某個軟體包的版本號;
rpm –qlp <軟體包>;
//列出某個軟體包中的所有文件
rpm –qf <軟體包>;
//找出一個文件屬於哪個軟體包
4 LINUX系統常用命令

4.1 與系統管理有關的命令

Wall (Write All)

QUOTE:
對全部已 登錄的用戶發送信息,用戶可以先反要發送的信息寫好存入一個文件中,然後輸入:
# wall < FileName

例:Wall 『Thank you !』
Write
向某一用戶發送信息。
Write xxq
hello
輸入Ctrl+C組合即可終止
Shutdown命令

CODE:[Copy to clipboard]Shutdown [選項] [時間] [警告信息]

QUOTE:
-k 並不真正關機,而只是發出警告信息給所有的用戶。
-r 關機後立即重新啟動。
-h 關機後不重新啟動。
-f 快速關機,啟動時跳過fsck。
-n快速關機,不經過init程序。
-c 取消一個已經運行的shutdown
例:系統馬上關機:Shutdown –h now
Free命令
查看當前系統內存的使用情況,

CODE:[Copy to clipboard]Free [-b] [-k] [-m]

CODE:[Copy to clipboard]-b 以位元組為單位顯示。
-k 以K位元組為單位顯示。
-m 以M位元組為單位顯示。
Uptime

QUOTE:
顯示系統已經運行了多長的時間:現在時間、系統已經運行的時間、目前有多少登錄用戶、系統在過去的1分鍾、5分鍾和15分鍾內的平均負載。
4.2與用戶有關的命令

Passwd命令
設置、更換用戶口令。

CODE:[Copy to clipboard]Passwd [用戶名]
Su
使一個普通的用戶具有超級用戶的權利,離開可用EXIT命令。

4.3其它命令

Echo命令
在顯示器上顯示一段文字,一般起到一個提示的作用。

CODE:[Copy to clipboard]echo [-n] 字元串
Cal命令
顯示某年某月的日歷。

CODE:[Copy to clipboard]cal [選項] [月[年]]

QUOTE:
選項的含義:
-j 顯示也給定月中的每一天是一年中的和幾天(從1月1日算起)。
-y 顯示也整年的日歷。
Date命令
date命令的功能是顯示和設置系統日期和時間。

4.4磁碟管理

磁碟空間管理

df命令
檢查文件系統的磁碟空間佔用局部。

CODE:[Copy to clipboard]Df [選項]

QUOTE:
-a 顯示所有文件系統的磁碟使用情況,包括0塊(block)的文件系統,如/proc文件系統。
-k 以K位元組為單位顯示。
-i 顯示i節點信息,而不是磁碟塊。
- t 顯示各指定類型的文件系統的磁碟空間使用情況。
-x 列出不是某一指定類型文件系統的磁碟窨使用情況(與t相反)。
-T 顯示文件系統類型。
命令
的英文原意為disk usage,含義為顯示磁碟空間的使用情況。功能是統計目錄(或文件)所佔磁碟空間的大小。

CODE:[Copy to clipboard] [選項] [Names…]

QUOTE:
-s 對每人Names 參數只給也佔用的數據塊總數。
-a 遞歸地顯示指定目錄中各文件用子孫目錄中的各文件佔用的數據塊總數。
-b 以位元組為單位列也磁碟窨使用情部(預設以K位元組為單位)
-k 以1024位元組為單位列也磁碟空間使用情況。
-c 最後再加上一個總計(系統預設)
-l 計算所有的文件大小,對硬鏈接文件,則計算多次。
-x 跳過在不同文件系統上的目錄不予統計。
dd命令
把指定的輸入文件拷貝到指定的輸出文件中,並且在拷貝的過程中可以進行格式轉換。語法:

CODE:[Copy to clipboard]dd 〔選項〕

QUOTE:
if =輸入文件(或設備名稱)。
of =輸出文件(或設備名稱)。
ibs = bytes 一次讀取bytes位元組,即讀入緩沖區的位元組數。
skip = blocks 跳過讀入緩沖區開頭的ibs*blocks塊。
obs = bytes 一次寫入bytes位元組,即寫 入緩沖區的位元組數。
bs = bytes 同時設置讀/寫緩沖區的位元組數(等於設置obs和obs)。
cbs = bytes 一次轉換bytes位元組。
count = blocks 只拷貝輸入的blocks塊。
conv = ASCII 把EBCDIC碼轉換為ASCII碼。
conv = ebcdic 把ASCII碼轉換為EBCDIC碼。
conv = ibm 把ASCII碼轉換為alternate EBCDIC碼。
conv = blick 把變動位轉換成固定字元。
conv = ublock 把固定們轉換成變動位
conv = ucase 把字母由小寫變為大寫。
conv = lcase 把字母由大寫變為小寫。
conv = notrunc 不截短輸出文件。
conv = swab 交換每一對輸入位元組。
conv = noerror 出錯時不停止處理。
conv = sync 把每個輸入記錄的大小都調到ibs的大小(用ibs填充)。
fdformat命令
低級格式化軟盤。

CODE:[Copy to clipboard]format [-n] device

QUOTE:
-n 格式化後不做檢驗
4.5常用的網路命令

FTP命令

Telnet命令。

Netstat命令

QUOTE:
-a 顯示所有的scoket,包括正在監聽和。
-c 每隔1秒就重新顯示一遍,直到用戶中斷它。
-i 顯示所有網路介面的信息,格式同」ifconfig –e」
-n 以網路IP地址代替名稱,顯示也網路連接情形。
-r 顯示核心路由表,格式同」route –e:。
-t 顯示TCP協議的連接情況。
-u 顯示UDP協議的連接情況。
-v 顯示正在進行的工作。
nslookup命令。

finger命令,功能是查詢用戶的信息。

ping命令。
(用戶和組的管理可以使用工具:TurboUserCfg或是XturboUserCfg。)

4.6有關進程的命令。

進程和啟動

CODE:[Copy to clipboard]at [-V] [-q] [-f文件名] [-mldbv]時間

at –c 作業 [作業….]

AT命令啟動的進程系統只執行一次。

batch [-V] [-q 隊列] [-f 文件名] [-mv] [時間]
在系統負載較小時,資源比較空閑時執行。

cron命令
按一定的時間間隔執行命令。

crontab命令
用於安裝、刪除或列出用於驅支cron後台進程的表格。
進程查看

CODE:[Copy to clipboard]who命令。

w命令
是一個比who命令更強大的命令
w –[husfV] [user]
-h 不顯示標題。
-u 當列出當前進程和CPU時間時忽略用戶名。
-s 使用短模式。不顯示登錄時間JCPU和PCPU時間。
-f 切換顯示FROM項,也就是遠程主機名項。
-V 顯示版本信息。

user 只顯示指定用戶的情況。

ps命令。
-e 顯示所有進程。
-f 全格式
-h 不顯示標題。
-l 長格式。
-w 寬輸出。
a 顯示終端上所有進程,包括其他用戶的進程。
r 只顯示正在運行的進程。
x 顯示沒有控制終端的進程。
top 命令
動態顯示系統當前的進程和其他狀況。
5系統的啟動過程。

5.1初始啟動

在PC機啟動時,BIOS從指定的啟動設備中讀入「主引導記錄」(MBR)。MBR的格式是:
地址偏移量 內容 大小
+00 h 可執行的代碼(啟動模塊) 可能變化
+1BE h 第一分區表項 16位元組
+1CE h 第二分區表項 16位元組
+1DE h 第三分區表項 16位元組
+1EE h 第四分區表項 16位元組
+1FE h 可執行的標記(AA55 h) 2位元組

啟動模塊包含足以裝入操作系統的代碼,或者是第二步的載入代碼的位置。啟動模塊需要使用BIOS調用來從磁碟裝入數據,而這些中斷調用,如INT 13h等,限制了最大磁碟柱面號為1023。這也就是說啟動模塊需要載入的一切內容,如初始內存磁碟、內核、啟動的時間信息等,必須存放在1024個柱面以內。
在MBR中只有四個分區表項,每個表項的格式如下:

地址偏移 內容 大小
+00h 分區狀態:00代表非啟動分區,80h代表啟動分區 1位元組
+01h 分區的起始位置 磁頭 1位元組
+02h 分區的起始位置 柱面和扇區 1位元組
+04h 分區的類型 1位元組
+05h 分區的結束位置 磁頭 1位元組
+06h 分區的結束位置 柱面和扇區 1位元組
+08h 在主引導區和本分區的第一個扇區間的扇區數目 4位元組
+0Ch 分區內的扇區數目 4位元組

5.2 Linux的啟動過程

1啟動的命令行參數

在Linux啟動時,它處理所有傳遞給它的命令行參數。這可以影響Linux的運行方式。命令行參數包括:

QUOTE:
mem=xxxM:定Linux可以使用的內存大小。這在用戶的計算機系統有超過64MB的內存時才需要。因為從前的主板只對第一個64MB內存進行緩存,使用超過64MB的內存會使整個計算機的性能下降,所有內存均按無緩存的速度運行。
single:使Linux按單用戶方式啟動,預設方式是多用戶方式。
root=/dev/xxx:指定Linux要安裝為根文件系統的設備。
init=<file>;:指定作為初始化進程的文件。
initrd=<dev>;:指定作為初始內存磁碟的設備。
ro:指定根文件系統為只讀。
rw:指定根文件系統為可讀可寫。
2 Init進程

在內核初始化自身和找到的硬體設備後,在後台啟動進程init(/sbin/init),init進程號1運行。
在UNIX世界中有許多啟動過程的版本,一些是基於系統V,一些是基於BSD。大多數Linux版本使用系統V的實現方法,在這里描述的就是這樣。
init是由文件/etc/inittab內容和功能控制的,隨啟動模式是單用戶或多用戶而不同。

QUOTE:
單用戶模式:init進程忽略/etc/inittab文件,在執行少數幾個腳本程序後調用/dev/console shell。這樣,用戶就可以有了一個shell,而且可以執行一定限度的任務。
多用戶模式:init進程把系統帶入/etc/inittab文件指定的運行級別。Init通過標準的Linux方法進入一個指定的進行級別。
3.進行級別

Linux與其他UNIX操作系統一樣,可以任何時刻處於任何一個運行級別。這些運行級別提供的功能不同,為主要是由於其運行的服務方程序(後台daemon)的不同造成的。Linux共有6種運行級別。

QUOTE:
0:關閉計算機或終止計算機運行,這個級別就是系統停止運行。
1:單用戶啟動級別,系統只有一個用戶,就是root,該用戶在控制台登錄。
2:多用戶運行級別,但無網路功能。在這個運行級別,網路功能沒有啟動,但是系統允許多個用戶登錄,可以通過虛擬控制台或串列線路。
3:多用戶模式,有網路功能。在這個運行級別,所有標准網路服務均被啟動。
4:目前沒有實現。
5:X11運行級別,在這個運行級別,X伺服器軟體運行,提供圖形界面的登錄方式。
6:系統重新啟動。
查詢當前運行級別:runlevel;

4在啟動過程中運行的腳本
在init進程運行時,它負責查看預設的運行級別,並進入該運行級別。這是通過運行在/etc/rc.d/rcX.d目錄下的腳本程序來實現的,其中X代表運行的級別,即一個運行級別對應一個目錄。不同的字母開頭的文件有不同的作用。其中:
以K開頭的腳本程序是系統離開某個運行級別時執行的,作用是停止某種服務。當系統從某個支持級別變為其他級別時,首先要進行原運行級別所對應的所有K程序。
以S開頭的腳本程序是系統進入某個運行級別時所執行的,作用是啟動某種服務。當系統改變為某個運行級別時,就要運行新運行級別所對應的所有S程序。

5增加啟動腳本程序
用戶可能有一些特定的硬體設備要初始化,或需要在系統啟動時初始化一些其他應用程序,用戶可以增加自己的初始化腳本程序來完成這些工作。通常步驟是:
復制一個已經存在的腳本,這樣可以得到一個通用的框架格式。
修改這個腳本,以完成自己的需求,要注意使程序可以處理啟動和關閉的參數,盡管可能關閉處理什麼也不需要干。
把這個肢本拷貝到/etc/rc.d/init.d目錄下,命名為」serv」。
按下面的方法在相應的目錄下建立運行控制鏈接:

CODE:[Copy to clipboard]ln –s ../init.d/serv/etc/rc.d/rc3.d/s99 serv
進行測試。

6 LILO和其他的啟動模塊
要啟動Linux,啟動模塊是必須的。一般用於Linux的啟動模塊是LILO,LILO用自己的主引導區代替一般的主引導區。LILO可以通過修改/etc/lilo.conf文件內容來進行配置,對引導區內容的更新通過lilo命令來完成。
下面給也了一個裝有DOS,TurboLinux3.4.0和RedHat 5.2系統的計算機的lilo.conf文件。在例子中的數字標號是用戶加上去並要在文中詳細解釋的。

CODE:[Copy to clipboard]# more /etc/lilo.conf
boot=dev/had
map=/boot/map
instll/boot/boot.b
prompt
#表示啟動盤是/dev/had,這是主IDE硬碟。
timeout=50
#表示等待用戶輸入的時間是50秒。
default=TL3.4
other=dev/hda1
#表示如果在上述的時間內沒有輸入,預設的啟動系統是TL3.4,即TurboLinux 3.4.0
label=dos
table=dev/had
#表示如果在LILO提示用戶輸入啟動系統時,用戶按了<Tab>;鍵,各個系統將以label的內容顯示出來,供用戶選擇。
image=/mnt/tl3.4/boot/vmlinuz
label=TL3.4
root=/dev/hda3
read-only
TurboLinux的啟動文件,/mnt/tl3.4/boot/vmlinuz被確定,根文件系統在/dev/hda3,根文件系統是只讀方式的。

CODE:[Copy to clipboard]image=/mnt/rh5.2/boot/vmlinuz-2.0.36-0.7
label=RH5.2
root=/dev/hda4
read-only
RedHat的啟動文件,/mnt/rh5.2/boot/vmlinuz-2.0,36-0.7被確定,根文件系統在/dev/hda4,根文件系統可讀寫。

2. 每天三分鍾搞定linux shell腳本10 字元串相關的if判斷


字元串比較包括

注意 :這里的符號要 轉義 ,否則變成了重定向了。

運行結果:

注意 :上面的 等號左右兩側 中括弧內側 一定要有空格

運行結果:

以上的例子,說明 小寫字母排在字典的後面 (類似於ascii的大小)。


sort 可以對字元串排序,sort 命令會把小寫字母放在前面


運行結果:

注意上面的 中括弧內側 一定要有空格。

注意 :有時候想在字元串比較的時候使用 正則表達式 ,可以使用 雙方括弧 ,如:

運行如下:

注意:上面的 雙等號左右兩側,中括弧內側 一定要有空格

3. Linux shell中在vi打開的文件中查找關鍵字

linux shell中使用vi命令打開文本文件後,如果需要查找字元

從開頭搜索
在命令模式下,輸入 / 你要查找的字元
按下回車,可以看到vim把游標移動到該字元處
再按n(小寫)查看下一個匹配
按N(大寫)查看上一個匹配(capslock切換大小寫,也可以在小寫狀態下按shift+n)

從結尾處搜索
?要搜索的字元串或字元

搜索後,打開別的文件發現也被高亮了,怎麼關閉?
命令行模式下,輸入:nohlsearch或者:set nohlsearch
可以簡寫成noh喝set-noh

4. shell腳本書寫方法

在shell學習過程中,感覺挺有用的一份比較,略整理分享給大家。

首先,shell的作用

用戶的登陸shell 登陸後默認的shell程序是: /bin/bash

不同的shell內部指令,運行環境會有所區別

常見的shell有

/bin/sh

/bin/bash

/sbin/nologin

1.編寫腳本代碼:

使用vi編輯器,每行一條Linux命令,按照順序執行

2.然後賦予腳本文件可執行的屬性

3.執行腳本文件的三種方法

./chao.sh

sh /chao.sh

source /chao.sh

更完善的腳本構成

注釋信息

可執行語句

重定向操作

類型 操作符 用途

重定向輸入 < 從指定文件讀取而不是從鍵盤輸入

重定向輸出 > 將輸出文件保存到指定文件(覆蓋原有內容)

>> 將輸出文件保存到指定文件(覆蓋原有內容)

標准錯誤輸出 2> 將錯誤信息保存到指定的文件(覆蓋原有內容)

2>> 將錯誤信息保存到指定的文件

混合輸出 &> 將標准輸出,標准錯誤的內容保存到同一文件中

管道操作符號「|」

將左側的命令輸出結果,作為右側命令的處理對象

shell變數的作用

為靈活管理Linux系統提供的特定參數,有兩層意思

變數名:使用固定的名稱,由系統預設或用戶定義

變數值: 能夠根據用戶設置,系統環境的變化而變化

變數的類型

自定義變數:由用戶自己定義,修改和使用

環境變數: 由系統維護,用於設置工作環境

位置變數: 通過命令行給腳本程序傳遞參搏春喚數

預定義變數:BASH中內置的一類變數,不能直接修改

定義一個新的變數

格式: 變數名=變數值

變數名以字母或下劃線開頭,區分大小寫,建議全大寫

查看變數的值: echo $變數名

賦值時使用引號:

雙引號:允許使用$符引用其他變數值

單引號: 禁止引用其他變數值,$視為普通字元

反撇號:命令替換,提基凱取命令執行後的輸出結果

將鍵盤輸入內容為變數賦值

格式: read [-p "提示信息"] 變數名

設置變數的作用范圍

export 變數名

export 變數名=變數值

兩種格式可以混合使用

整數變數的運算:

expr 變數1 運算符 變數2 [運算符 變數3]

常見的運算符

加法運算符 +

減法運算符: -

乘法運算符:\*

除法運算符: /

取余運算:%

整數變數的運算(2)

((變數=變數運算符變數));

等號後面的變數可以是具體數值

例子:

((a=a+3)森笑);

環境變數:

由系統提前創建,用來設置用戶的工作環境

配置文件: /etc/profile ~/.bash_profile

常見環境變數的舉例

位置變數:

表示為$n, n為1~9之間的數字

預定義變數:

/etc/passwd /etc/shadow

例如一些服務的內置用戶名或密碼

如apache的啟動用戶就是預定義變數

條件測試操作

測試特定的 表達式是否成立,當條件成立時,測試語句的返回值為0,否則為其他數值

格式 : test 條件表達式

應用實例:

test -z 進行測試的時候 字元串長度為0的時候 結果才返回1

如果變數數值為0 返回0

條件測試操作

[ 操作符 文件或目錄]

[5] 部分是判斷表達式,-d表示判斷是否是目錄

&&是」邏輯與「操作符,只有&&前面的判斷成立,後面的語句才會執行

-b的意思是判斷 後面的路徑是否是一個目錄

echo $? 表示對剛剛執行的表達式進行判斷

0表示成立,1表示不成立

-e filename 如果 filename存在,則為真 [ -e /var/log/syslog ]

-d filename 如果 filename為目錄,則為真 [ -d /tmp/mydir ]

-f filename 如果 filename為常規文件,則為真 [ -f /usr/bin/grep ]

-L filename 如果 filename為符號鏈接,則為真 [ -L /usr/bin/grep ]

-r filename 如果 filename可讀,則為真 [ -r /var/log/syslog ]

-w filename 如果 filename可寫,則為真 [ -w /var/mytmp.txt ]

-x filename 如果 filename可執行,則為真 [ -L /usr/bin/grep ]

filename1-nt filename2 如果 filename1比 filename2新,則為真 [ /tmp/install/etc/services -nt /etc/services ]

filename1-ot filename2 如果 filename1比 filename2舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字元串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)

-z string 如果 string長度為零,則為真 [ -z "$myvar" ]

-n string 如果 string長度非零,則為真 [ -n "$myvar" ]

string1= string2 如果 string1與 string2相同,則為真 [ "$myvar" = "one two three" ]

string1!= string2 如果 string1與 string2不同,則為真 [ "$myvar" != "one two three" ]

算術比較運算符

num1-eq num2 等於 [ 3 -eq $mynum ]

num1-ne num2 不等於 [ 3 -ne $mynum ]

num1-lt num2 小於 [ 3 -lt $mynum ]

num1-le num2 小於或等於 [ 3 -le $mynum ]

num1-gt num2 大於 [ 3 -gt $mynum ]

num1-ge num2 大於或等於 [ 3 -ge $mynum ]

整數值比較

格式: [ 整數1 操作符 整數2 ]

字元串比較

格式1: [ 字元串1 = 字元串2 ]

[ 字元串1 != 字元串2 ]

格式2: [ -z 字元串 ]

邏輯測試:

格式1: [ 表達式1 ] 操作符 [ 表達式2 ]

格式2: 命令1 操作符 命令2

if語句的結構

while語句的語法結構

5. Linux Shell 腳本編程最佳實踐

IT路邊社

前言

與其它的編碼規范一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標准。這份文檔主要側重於我們所普遍遵循的規則,對於那些不是明確強制要求的,我們盡量避免提供意見。

編碼規范對於程序員而言尤為重要,有以下幾個原因:

本文檔中的准則致力於最大限度達到以下原則:

盡管本文檔涵蓋了許多基礎知識,但應注意的是,沒有編碼規范可以為我們回答所有問題,開發人員始終需要再編寫完代碼後,對上述原則做出正確的判斷。

:未明確指明的則默認為必須(Mandatory)

主要參考如下文檔:

僅建議Shell用作相對簡單的實用工具或者包裝腳本。因此單個shell腳本內容不宜太過復雜。

在選擇何時使用shell腳本時時應遵循以下原則:

可執行文件不建議有擴展名,庫文件必須使用 .sh 作為擴展名,且應是不可執行的。

執行一個程序時,無需知道其編寫語言,且shell腳本並不要求具有擴展名,所以更傾向可執行文件沒有擴展名。

而庫文件知道其編寫語言十分重要,使用 .sh 作為特定語言後綴的擴展名,可以和其他語言編寫的庫文件加以區分。

文件名要求全部小寫, 可以包含下劃線 _ 或連字元 - , 建議可執行文件使用連字元,庫文件使用下劃線。

正例:

反例:

源文件編碼格式為UTF-8。避免不同操作系統對文件換行處理的方式不同,一律使用 LF 。

每行最多不超過120個字元。每行代碼最大長度限制的根本原因是過長的行會導致閱讀障礙,使得縮進失效。

除了以下兩種情況例外:

如出現長度必須超過120個字元的字元串,應盡量使用here document或者嵌入的換行符等合適的方法使其變短。

示例:

除了在行結束使用換行符,空格是源文件中唯一允許出現的空白字元。

對從來沒有用到的或者被注釋的方法、變數等要堅決從代碼中清理出去,避免過多垃圾造成干擾。

Bash 是唯一被允許使用的可執行腳本shell。

可執行文件必須以 #!/bin/bash 開始。請使用 set 來設置shell的選項,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令參數及路徑不需要引號 grep -li Hugo /dev/ "$1"
# 示例8:常規變數用雙引號,ccs可能為空的特殊情況可不用引號 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正則用單引號,$1可能為空的特殊情況可不用引號 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置參數傳遞推薦帶引號的"$@",所有參數作為單字元串傳遞用帶引號的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 當執行 ./t.sh a b c 時輸出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

使用 $(command) 而不是反引號。

因反引號如果要嵌套則要求用反斜杠轉義內部的反引號。而 $(command) 形式的嵌套無需轉義,且可讀性更高。

正例:

反例:

條件測試

使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。

因為在 [[ 和 ]] 之間不會出現路徑擴展或單詞切分,所以使用 [[ ... ]] 能夠減少犯錯。且 [[ ... ]] 支持正則表達式匹配,而 [ ... ] 不支持。參考以下示例:

盡可能使用變數引用,而非字元串過濾。

Bash可以很好的處理空字元串測試,請使用空/非空字元串測試方法,而不是過濾字元,讓代碼具有更高的可讀性。正例:

反例:

正例:

反例:

正例:

反例:

文件名擴展

當進行文件名的通配符擴展時,請指定明確的路徑。

當目錄中有特殊文件名如以 - 開頭的文件時,使用帶路徑的擴展通配符 ./* 比不帶路徑的 * 要安全很多。

應該避免使用eval。

Eval在用於分配變數時會修改輸入內容,但設置變數的同時並不能檢查這些變數是什麼。反例:

請使用進程替換或者for循環,而不是通過管道連接while循環。

這是因為在管道之後的while循環中,命令是在一個子shell中運行的,因此對變數的修改是不能傳遞給父shell的。

這種管道連接while循環中的隱式子shell使得bug定位非常困難。反例:

如果你確定輸入中不包含空格或者其他特殊符號(通常不是來自用戶輸入),則可以用for循環代替。例如:

使用進程替換可實現重定向輸出,但是請將命令放入顯式子 shell,而非 while 循環創建的隱式子 shell。例如:

總是檢查返回值,且提供有用的返回值。

對於非管道命令,使用 $? 或直接通過 if 語句來檢查以保持其簡潔。

例如:

當內建命令可以完成相同的任務時,在shell內建命令和調用外部命令之間,應盡量選擇內建命令。

因內建命令相比外部命令而言會產生更少的依賴,且多數情況調用內建命令比調用外部命令可以獲得更好的性能(通常外部命令會產生額外的進程開銷)。

正例:

反例:

載入外部庫文件不建議用使用.,建議使用source,已提升可閱讀性。正例:

反例:

除非必要情況,盡量使用單個命令及其參數組合來完成一項任務,而非多個命令加上管道的不必要組合。常見的不建議的用法例如:cat和grep連用過濾字元串; cat和wc連用統計行數; grep和wc連用統計行數等。

正例:

除特殊情況外,幾乎所有函數都不應該使用exit直接退出腳本,而應該使用return進行返回,以便後續邏輯中可以對錯誤進行處理。正例:

反例:

推薦以下工具幫助我們進行代碼的規范:

原文鏈接:http://itxx00.github.io/blog/2020/01/03/shell-standards/

獲取更多的面試題、腳本等運維資料點擊: 運維知識社區 獲取

腳本之---簡訊轟炸機

腳本之---QQ微信轟炸機

ansible---一鍵搭建redis5.0.5集群

elk7.9真集群docker部署文檔

全球最全loki部署及配置文檔

最強安全加固腳本2.0

一鍵設置iptbales腳本

6. LINUX環境下對大小寫敏感,如何解決

解決的方法就是重新編譯一套linux系統,反正都是開源的。如果用別人的,別人要區分大小寫,你只能忍了。要麼繼續老老實實地用windows和WINDOWS吧。

閱讀全文

與linuxshell小寫相關的資料

熱點內容
有什麼做手帳app 瀏覽:156
phpjquery源碼 瀏覽:884
大話西遊手游源碼 瀏覽:653
javaudp代碼 瀏覽:660
linuxu盤啟動win7 瀏覽:990
如何啟用交換機dhcp伺服器 瀏覽:237
三田汽車壓縮機好嗎 瀏覽:294
馬蜂窩app偏向什麼客戶 瀏覽:366
php簡單的登錄注冊 瀏覽:554
我們接到上級命令 瀏覽:349
php本周星期一 瀏覽:65
裘錫圭pdf 瀏覽:726
android模擬器調試 瀏覽:135
sap命令大全 瀏覽:296
mysql導出數據命令 瀏覽:954
文件夾隱藏了出不來 瀏覽:564
電信網上大學源碼 瀏覽:206
rr輪轉調度演算法 瀏覽:253
我的世界無法登入伺服器怎麼辦 瀏覽:149
文件加密授權特定隱藏訪問控制 瀏覽:801