命令格式: 命令 [-選項] [參數]
如:ls -la /usr
**說明: **
大部分命令遵從該格式
多個選項時,可以一起寫 eg:ls –l –a à ls –la
簡化選項與完整選項(註:並非所有選項都可使用完整選項) eg:ls –all à ls –a
作用:切換用戶身份
語法:su [選項] 用戶名
-c 僅執行一次命令,而不切換用戶身份
$ su – root
env
$ su – root –c 「useradd longjing」
文件或目錄的CRUD
英文:change directory 命令路徑:內部命令 執行許可權:所有用戶
作用: 切換目錄
語法:cd [目錄] / 切換到根目錄
.. 回到上一級目錄
. 當前目錄
~ 當前用戶的宿主目錄(eg:# cd ~用戶名 進入某個用戶的家目錄)
英文:list 命令路徑:/bin/ls 執行許可權:所有用戶
作用:顯示目錄文件
語法:ls [-alrRd] [文件或目錄]
-a all 顯示所有文件,注意隱藏文件,特殊目錄.和..
-l(long) 顯示詳細信息
-R(recursive) 遞歸顯示當前目錄下所有目錄
-r (reverse) 逆序排序
-t(time) 按修改時間排序(降序)
英文:print working directory 命令路徑:/bin/pwd 執行許可權:所有用戶
作用:顯示當前工作目錄
語法:pwd [-LP]
-L 顯示鏈接路徑,當前路徑,默認
-P 物理路徑
eg:# cd /etc/init.d
英文:make directories 命令路徑:/bin/mkdir 執行許可權:所有用戶
作用:創建新目錄
語法:mkdir [-p] 目錄名
-p 父目錄不存在情況下先生成父目錄 (parents)
eg: mkdir linux/test 如果目錄linux不存在,則報錯,使用參數-p即可自動創建父目錄。
命令路徑:/bin/touch 執行許可權:所有用戶
作用:創建空文件或更新已存在文件的時間
語法:touch 文件名
eg:touch a.txt b.txt touch {a.txt,b.txt} 同時創建多個文件
創建帶空格的文件 eg:touch "program files" 在查詢和刪除時也必須帶雙引號
注意:生產環境中,文件名,一定不要加空格
英文: 命令路徑:/bin/cp 執行許可權:所有用戶
作用:復制文件或目錄
語法:cp [–rp] 源文件或目錄 目的目錄
-r -R recursive 遞歸處理,復制目錄
-p 保留文件屬性 (原文件的時間不變)
eg:
1,相對路徑 cp –R /etc/* . cp –R ../aaa ../../test/
2,,絕對路徑 cp –R / ect/service /root/test/aa/bb
英文:move 命令路徑:/bin/mv 執行許可權:所有用戶
作用:移動文件或目錄、文件或目錄改名
語法:mv 源文件或目錄 目的目錄
英文:remove 命令路徑:/bin/rm 執行許可權:所有用戶
作用:刪除文件
語法: rm [-rf] 文件或目錄
-r (recursive)刪除目錄,同時刪除該目錄下的所有文件
-f(force) 強制刪除文件或目錄 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認
注意:工作中,謹慎使用rm –rf 命令。
擴展點 :刪除亂碼文件
一些文件亂碼後使用rm -rf 依然無法刪除
此時,使用ll -i 查找到文件的inode節點
然後使用find . -inum 查找到的inode編號 -exec rm {} -rf ;
就能順利刪除了
英文:concatenate 命令路徑:/bin/cat 執行許可權:所有用戶
作用:顯示文件內容
語法:cat [-n] [文件名]
-n 顯示行號
eg:cat /etc/services
命令路徑:/bin/more 執行許可權:所有用戶
作用:分頁顯示文件內容
語法:more [文件名]
空格或f 顯示下一頁
Enter鍵 顯示下一行
q或Q 退出
命令路徑:/usr/bin/head 執行許可權:所有用戶
作用:查看文件前幾行(默認10行)
語法:head [文件名]
-n 指定行數
eg:head -20 /etc/services head –n 3 /etc/services
命令路徑:/usr/bin/tail 執行許可權:所有用戶
作用:查看文件的後幾行
語法:tail [文件名]
-n 指定行數
-f (follow) 動態顯示文件內容
獲取一個大文件的部分文件,可使用head或tail命令
head -n 100 /etc/services >config.log
英文: link 命令路徑:/bin/ln 執行許可權:所有用戶
作用:產生鏈接文件
語法:
ln -s [源文件] [目標文件] 創建軟鏈接 源文件 使用 絕對路徑
ln [源文件] [目標文件] 創建硬鏈接
eg:ln -s /etc/service ./service.soft
創建文件/etc/service的軟鏈接service.soft
eg:/etc/service /service.hard
創建文件/etc/service的硬鏈接/service.hard
軟連接類似於windows下的快捷方式
軟連接文件格式:
lrwxrwxrwx. 1 root root 13 Jul 20 07:50 service -> /etc/services
1 硬鏈接數量,如果該文件沒有硬鏈接,就只有本身一個硬鏈接。
13鏈接文件的長度
格式解析(特徵):
1, 軟連接的文件類型是 l(軟連接),軟連接文件的許可權 都是 lrwxrwxrwx
2,-> 箭頭指向到源文件
真正的許可權取決於對源文件的許可權
時間值為創建軟連接的時間
軟連接可以跨文件系統生成
硬鏈接特徵
1,相當於 cp -p +同步更新
2,通過i節點識別,與源文件有相同的inode節點
3,硬鏈接不能跨分區,ln /home/test/issuels /boot/test (錯誤)
4,不能針對目錄使用 ln /tmp/ aa.hard (無法將目錄/tmp 生成硬鏈接)
刪除軟連接
rm -rf symbolic_name
英文:manual 命令路徑:/usr/bin/man 執行許可權:所有用戶
作用:獲取命令或配置文件的幫助信息
語法:man [命令/配置文件]
eg:man ls man services
(查看配置文件時,不需要配置文件的絕對路徑,只需要文件名即可)
調用的是more命令來瀏覽幫助文檔,按空格翻下一頁,按回車翻下一行,按q退出。
使用/加上關鍵的參數可直接定位搜索, n 查找下一個,shift+n 查找上一個
eg: /-l 直接查看-l的介紹
擴展:man的級別 (幫助文檔的類型, 了解1 5即可)
man man-pages 查看每一種類型代表的含義 man文檔的類型(1~9)
1是命令,5是配置文件 man優先顯示命令,可指定幫助類型
eg:man 5 passwd (5代表配置文件級別)
[圖片上傳失敗...(image-6718d2-1624438708895)]
help 查看shell內置命令的幫助信息
eg:help cd
內置命令,使用whereis,which,man都不能查看
type 命令 查看內部命令還是外部命令
命令名 --help 列舉該命令的常用選項
eg: cp --help
命令路徑:/bin/find 執行許可權:所有用戶
作用:查找文件或目錄
語法:find [搜索路徑] [匹配條件]
如果沒有指定搜索路徑,默認從當前目錄查找
find命令選項
-name 按名稱查找 精準查找
eg:find /etc -name 「init」 在目錄/etc中查找文件init
-iname 按名稱查找
find查找中的字元匹配:
*:匹配所有
?:匹配單個字元
eg:find /etc -name 「init???」 在目錄/etc中查找以init開頭的,且後面有三位的文件
模糊匹配的條件,建議使用單引號或雙引號括起來。如果*被轉義,可使用 單雙引號括住查詢條件,或者使用*。
eg: # find . –name *g
-size ****按文件大小查找
以block為單位,一個block是512B, 1K=2block +大於 -小於 不寫是等於
eg:find /etc -size -204800 在etc目錄下找出大於100MB的文件
100MB=102400KB=204800block
**-type ** 按文件類型查找
f 二進制文件l 軟連接文件 d 目錄 c 字元文件
eg: find /dev -type c
find****查找的基本原則 :
佔用最少的系統資源,即查詢范圍最小,查詢條件最精準
eg:
如果明確知道查找的文件在哪一個目錄,就直接對指定目錄查找,不查找根目錄/
命令路徑:/bin/grep 執行許可權:所有用戶
作用:在文件中搜尋字串匹配的行並輸出
語法:grep [-cinv] '搜尋字元串' filename
選項與參數:
-c :輸出匹配行的次數(是以行為單位,不是以出現次數為單位)
-i :忽略大小寫,所以大小寫視為相同
-n :顯示匹配行及行號
-v :反向選擇,顯示不包含匹配文本的所有行。
eg:grep ftp /etc/services
eg:#grep -v ^# /etc/inittab 去掉文件行首的#號
eg:# grep -n 「init」/etc/inittab 顯示在inittab文件中,init匹配行及行號
eg:# grep -c「init」/etc/inittab 顯示在inittab文件中,init匹配了多少次
命令路徑:/usr/bin/which 執行許可權:所有用戶
作用: 顯示系統命令所在目錄(絕對路徑及別名)
which命令的作用是,在PATH變數指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令
alias ls='ls --color=auto'
/bin/ls
/usr/bin/which: no zs in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ch/bin)
命令路徑:/usr/bin/whereis 執行許可權:所有用戶
作用:**搜索命令所在目錄 配置文件所在目錄 及幫助文檔路徑 **
eg: which passwd 和 whereis passwd
eg:查看/etc/passwd配置文件的幫助,就用 man 5 passwd
英文:GNU zip 命令路徑:/bin/gzip 執行許可權:所有用戶
gzip只能壓縮文件,不能壓縮目錄;不保留原文件
語法:gzip 文件
-d將壓縮文件解壓(decompress)
解壓使用gzip –d或者 gunzip
命令路徑:/usr/bin/bzip2 執行許可權:所有用戶
作用: 壓縮(解壓)文件,壓縮文件後綴為.bz2
語法:bzip2 [-k] [文件]
-k:產生壓縮文件後保留原文件(壓縮比高)
-d 解壓縮的參數(decompress)
解壓使用bzip2 –d或者 bunzip2
命令路徑:/usr/bin/zip 執行許可權:所有用戶
作用: 壓縮(解壓)文件,壓縮文件後綴為.zip
語法:zip 選項[-r] [壓縮後文件名稱] [文件或目錄]
-r壓縮目錄
eg:zip services.zip /etc/services 壓縮文件;
zip -r test.zip /test 壓縮目錄
如果不加-r選項,壓縮後的文件沒有數據。
解壓使用unzip
命令路徑:/bin/tar 執行許可權:所有用戶
作用:文件、目錄打(解)包
語法:tar [-zcf] 壓縮後文件名 文件或目錄
-c 建立一個壓縮文件的參數指令(create),後綴是.tar
-x 解開一個壓縮文件的參數指令(extract)
-z 以gzip命令壓縮/解壓縮
-j 以bzip2命令壓縮/解壓縮
-v 壓縮的過程中顯示文件(verbose)
-f file 指定文件名,必選項
1, 單獨的打包 ,解包 tar –cf tar –xf
2, 打包之後,進行壓縮 gzip bzip2
3, 一步到位 tar –zcvf tar -zxvf
tar -cf -xf 單獨 壓縮 解壓縮
tar -z 以gzip打包目錄並壓縮 文件格式.tar.gz(.tgz)
tar -j 以bzip2打包目錄並壓縮 文件格式.tar.bz2
eg:tar -zcvf dir1.tar.gzdir1 使用gzip將目錄dir1壓縮成一個打包並壓縮文件dir1.tar.gz
eg: tar -cvf bak.tar . 將當前目錄的文件打包為bak.tar
eg: tar -xvf bak.tar 解壓
eg: tar -zcvf bak.tar.gz bak.tar 或 gzip bak.tar使用gzip將打包文件bak.tar壓縮為bak.tar.gz
eg: tar -jcvf bak.tar.bz2 bak.tar 或 bzip2 bak.tar 使用bzip2將打包文件bak.tar壓縮為bak.tar.bz2
eg: tar -rvf bak.tar /etc/password 將/etc/password追加文件到bak.tar中(r)
eg:tar -cjvf test.tar.bz2 test 生成test.tar.bz2的壓縮文件
eg:tar -xjf test.tar.bz2 解壓
最常用: tar + gzip
tar –zcvf 壓縮
tar –zxvf 解壓
補充:
1,文件路徑, 壓縮包帶文件路徑
2,源文件是保留的,不會被刪除
**shutdown **[選項] 時間
選項: -c: 取消前一個關機命令
-h:關機
-r:重啟
eg:
shutdown -h now 立即關機 shutdown -h 20:30 定時關機
其他關機命令 halt poweroff init 0
其他重啟命令
**reboot **重啟系統 reboot -h now立即重啟
init 6
注意:生產環境中,關機命令和重啟命令謹慎執行。
善於查看man help等幫助文檔
利用好Tab鍵 自動補全
掌握好一些快捷鍵
ctrl + c(停止當前進程)
ctrl + z 掛起當前進程,放後台
ctrl + r(查看命令歷史) history
ctrl + l(清屏,與clear命令作用相同)
方向箭頭 上 下 可以查看執行過的命令
ctrl + a 行首 ctrl + e 行尾
ctrl + k 清除 ctrl+ w 清除單詞
vim/vi是Unix / Linux上最常用的文本編輯器而且功能非常強大。
只有命令,沒有菜單。
《大碗》編輯器版
周圍的同事不是用VI就是Emacs,你要是用UltraEdit都不好意思跟人家打招呼...什麼插件呀、語法高亮呀、拼寫檢查呀,能給它開的都給它開著,就是一個字:酷!你說這么牛X的一東西,怎麼著學會也得小半年吧。半年!?入門都遠著呢!能學會移動游標就不錯了,你還別說耗不起,就這還是左右移動!!!
:
[圖片上傳失敗...(image-a08366-1624438708894)]
命令模式:又稱一般模式
編輯模式:又稱底行模式,命令行模式
|
命令
|
作用
|
|
a
|
在游標後附加文本
|
|
A(shift + a)
|
在本行行末附加文本 行尾
|
|
i
|
在游標前插入文本
|
|
I(shift+i)
|
在本行開始插入文本 行首
|
|
o
|
在游標下插入新行
|
|
O(shift+o)
|
在游標上插入新行
|
|
命令
|
作用
|
|
:set nu
|
設置行號
|
|
:set nonu
|
取消行號
|
|
gg
G
|
到第一行
到最後一行
|
|
nG
|
到第n行
|
|
:n
|
到第n行
|
|
命令
|
作用
|
|
:w
|
保存修改
|
|
:w new_filename
|
另存為指定文件
|
|
:w >> a.txt
|
內容追加到a.txt文件中 文件需存在
|
|
:wq
|
保存修改並退出
|
|
shift+zz(ZZ)
|
快捷鍵,保存修改並退出
|
|
:q!
|
不保存修改退出
|
|
:wq!
|
保存修改並退出(文件所有者可忽略文件的只讀屬性)
|
不保存並退出:
1, 有修改,但是修改後的內容是不保存的
2, 有突發情況,導致窗口退出。修改文件之後,直接刪除同名的.swp文件
|
命令
|
作用
|
|
x
|
刪除游標所在處字元 nx 刪除游標所在處後n個字元
|
|
dd
|
刪除游標所在行,ndd刪除n行
|
|
:n1,n2d
|
刪除指定范圍的行(eg :1,3d 刪除了123這三行)
|
|
dG
|
刪除游標所在行到末尾的內容
|
|
D
|
刪除從游標所在處到行尾
|
|
命令
|
作用
|
|
yy、Y
|
復制當前行
|
|
nyy、nY
|
復制當前行以下n行
|
|
dd
|
剪切當前行
|
|
ndd
|
剪切當前行以下n行
|
|
p、P
|
粘貼在當前游標所在行下 或行上
|
|
命令
|
作用
|
|
r
|
取代游標所在處字元
|
|
R(shift + r)
|
從游標所在處開始替換字元,按Esc結束
|
|
u
|
undo,取消上一步操作
|
|
ctrl+r
|
redo,返回到undo之前
|
|
命令
|
作用
|
|
/string
|
向後搜索指定字元串 搜索時忽略大小寫 :set ic
|
|
?string
|
向前搜索指定字元串
|
|
n
|
搜索字元串的下一個出現位置,與搜索順序相同
|
|
N(Shift + n)
|
搜索字元串的上一個出現位置,與搜索順序相反
|
|
:%s/old/new/g
|
全文替換指定字元串
|
|
:n1,n2s/old/new/g
|
在一定范圍內替換指定字元串
|
% 指全文,s 指開始,g 指全局替換
eg: :41,44/yang/lee/c 從41行到44行,把yang替換為lee,詢問是否替換
eg: :41,44/yang/lee/g 同上,不詢問,直接替換
使用替換命令來添加刪除注釋
:% s/^/#/g 來在全部內容的行首添加 # 號注釋
:1,10 s/^/#/g 在1~10 行首添加 # 號注釋
vi裡面怎麼查命令??
:!which cp
vi裡面怎麼導入命令的結果?
:r !which cp
v 可視字元模式
V****(shift+v) 可視行模式,選擇多行操作
**ctrl+v **可視塊模式(列模式),操作列
I或者O進入插入模式。
1,圖形化界面
2,setup 命令虛擬界面
3,修改配置文件(以網路方式為NAT示例)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.2.129
NETMASK=255.255.255.0
GATEWAY=192.168.2. 2 #網段2任意,IP地址2固定,網段為vmnet8的設置的IP網段
DNS1=114.114.114.114
DNS2=8.8.8.8
重啟網路生效:
service network restart
命令路徑:/bin/ping 執行許可權:所有用戶
作用:測試網路的連通性
語法:ping 選項 IP地址
-c 指定發送次數
ping 命令使用的是icmp協議,不佔用埠
eg: # ping -c 3 127.0.0.1
英文:interface configure 命令路徑:/sbin/ifconfig 執行許可權:root
作用:查看和設置網卡網路配置
語法:ifconfig [-a] [網卡設備標識]
-a:顯示所有網卡信息
ifconfig [網卡設備標識] IP地址 修改ip地址
英文:network statistics 命令路徑:/bin/netstat 執行許可權:所有用戶
作用:主要用於檢測主機的網路配置和狀況
-a all顯示所有連接和監聽埠
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 使用數字方式顯示地址和埠號
-l (listening) 顯示監控中的伺服器的socket
eg:# netstat -tlnu 查看本機監聽的埠
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
協議 待收數據包 待發送數據包 本地ip地址:埠 遠程IP地址:埠
netstat –antpl
臨時生效:
hostname 主機名
[圖片上傳失敗...(image-ceed36-1624438708893)]
永久生效:修改配置文件
vi /etc/sysconfig/network
[圖片上傳失敗...(image-2b9d9e-1624438708893)]
修改主機名和ip地址之間的映射關系
vi /etc/hosts
192.168.2.120 node-1.e.cn node-1
可配置別名
[圖片上傳失敗...(image-ec86cf-1624438708893)]
進程和程序的區別:
1、程序是靜態概念,本身作為一種軟體資源長期保存;而進程是程序的執行過程,它是動態概念,有一定的生命期,是動態產生和消亡的。
2、程序和進程無一一對應關系。一個程序可以由多個進程共用;另一方面,一個進程在活動中有可順序地執行若干個程序。
進程和線程的區別:
進程: 就是正在執行的程序或命令,每一個進程都是一個運行的實體,都有自己的地址空間,並佔用一定的系統資源。
線程: 輕量級的進程;進程有獨立的地址空間,線程沒有;線程不能獨立存在,它由進程創建;相對講,線程耗費的cpu和內存要小於進程。
進程管理的作用?
判斷伺服器的健康狀態
查看系統所有的進程
殺死進程
作用:查看系統中的進程信息
語法:ps [-auxle]
常用選項
查看系統中所有進程
ps應用實例 # ps -u or ps -l 查看隸屬於自己進程詳細信息
作用: 查看當前進程樹
語法:pstree [選項]
-p 顯示進程PID
-u 顯示進程的所屬用戶
作用:查看系統健康狀態
顯示當前系統中耗費資源最多的進程,以及系統的一些負載情況。
語法:top [選項]
-d 秒數,指定幾秒刷新一次,默認3秒(動態顯示)
作用:關閉進程
語法:kill [-選項] pId
kill -9 進程號(強行關閉) 常用
kill -1 進程號(重啟進程)
添加用戶
語法:useradd [選項] 用戶名
修改密碼命令
語法:passwd [選項] [用戶名]
用戶密碼:生產環境中,用戶密碼長度8位以上,設置大小寫加數字加特殊字元,要定期更換密碼。
ys^h_L9t
刪除用戶
-r 刪除賬號時同時刪除宿主目錄(remove)
作用:用於查看Linux文件系統的狀態信息,顯示各個分區的容量、已使用量、未使用量及掛載點等信息。看剩餘空間
語法:df [-hkam] [掛載點]
-h(human-readable)根據磁碟空間和使用情況 以易讀的方式顯示 KB,MB,GB等 -k 以KB 為單位顯示各分區的信息,默認
-M 以MB為單位顯示信息 -a 顯示所有分區包括大小為0 的分區
作用:用於查看文件或目錄的大小(磁碟使用空間)
語法: [-abhs] [文件名目錄]
-a 顯示子文件的大小
-h以易讀的方式顯示 KB,MB,GB等
-s summarize 統計總佔有量
eg:
-a(all) /home 顯示/home 目錄下每個子文件的大小,默認單位為kb
-b /home 以bytes為單位顯示/home 目錄下各個子目錄的大小
-h /home 以K,M,G為單位顯示/home 文件夾下各個子目錄的大小
-sh /home 以常用單位(K,M,G)為單位顯示/home 目錄的總大小 -s summarize
df命令和命令的區別:
df命令是從文件系統考慮的,不僅考慮文件佔用的空間,還要統計被命令或者程序佔用的空間。
命令面向文件,只計算文件或目錄佔用的空間。
作用:查看內存及交換空間使用狀態
語法: free [-kmg]
選項:
-k: 以KB為單位顯示,默認就是以KB為單位顯示
-m: 以MB為單位顯示
-g: 以GB為單位顯示
清理緩存命令:
echo 1 > /proc/sys/vm/drop_caches
2. Linux篇:從rm -rf 引發的腳本安全閑聊(set 命令)
上周剛經歷了一個「刪庫跑路」的慘重事件,不知哪位無邪的童鞋把Confluence 的數據存儲目錄 /var 清空了,結果群眾的怒火燃燒上了天空
這次結合自己的一些思考來記錄一些有關腳本安全的點
先來看一個簡單的案例
在用戶主目錄下創建safe目錄及相關文件用於測試演示
假如寫一段腳本刪除safe目錄下所有文件:
這段是不是看起來沒有問題,但如果由於有些大心臟的同學粗心,寫成下面這樣
最終,腳本都變成了rm -rf * ,可怕至極
其實在shell腳本當中,為了防止這種現象,我們可以藉助set 命令來實現相關控制
關於set 命令有較多參數,這里介紹最常用的幾個
我們以剛才圖4那段有問題的腳本說事
為保證不錯刪東西 ,我們加一個set -u 選項 ,判斷變數是否存在
我們執行一下,看看效果
看,報錯啦,dir這個變數沒有聲明,ls 查看一下文件,發現都還存在
set -e 與set -u 通常搭配在一起使用
一個是遇到錯誤退出,一個是發現空變數報錯
這兩個搭配在一起放在腳本里可以防止一些變數為空導致文件全被清空的問題
拓展一下:
如果只想應用在腳本的某一段中,那麼
開始段落前加set -e 表示範圍開始
結束段落後加 set +e 表示範圍結束
set -x 與set + x同理。
1、刪文件其實不用rm -rf ,不是受迫性需要,不要使用rm -rf
2、修改、刪除系統文件或其他重要的東西,先備份一份
3、非特殊需要,不建議在root下操作,普通用戶即可
4、腳本加上set -e 與set -u保證安全
3. 請教linux下shell 中 set 的用法
使用set命令可以設置各種shell選項或者列出shell變數.單個選項設置常用的特性. 在某些選項之後-o參數將特殊特性打開.在某些選項之後使用+o參數將關閉某些特性, 不帶任何參數的set命令將顯示shell的全部變數.除非遇到非法的選項,否則set總是返回ture.
當BASH shell被調用時,可以列出全部的選項.當前的選項集列在$-中.在option參數被處理後,其他的參數被賦值到位置參數中(,,...,$n)
格式
set [--abefhkmnptuvxldCHP] [-o option name] [arguments ...]
詳解:
選項 說明
-a 自動向已經修改的變數或為導出後序命令的變數作出標志
-b 不是在原提示符之前,而是立即引發終止後台任務的狀態表
-e 如果命令帶非零值返回,立即退出 -
f 禁止帶擴展名的路徑
-h 定義函數時,定位和存儲函數命令,當函數被執行時,通常查詢 函數命令
-k 所有的關鍵詞參數,而不只是那些命令名前的關鍵詞參數,被放 在環境命令中
-m 監視器模式,啟動任務控制.此選項默認支持系統shell交互.後 台進程以單獨的進程組運行,在每次完成任務時顯示包含退出的 狀態行
-n 讀取命令但不執行命令.通常監查shell腳本的句法錯誤.交互 shell被忽略
-o option-name 選項名可以是下列之一:
選項 說明
allexport 同-a選項
braceexpand shell執行花括弧擴展,在默認情況下起作用
emacs 使用emacs風格命令行編輯介面.除非shell以-noline-editing 選項啟動,否則當shell交互時,通過默認啟動該選項
errexit 同-e選項
histexpand 同-H選項
ignoreeof 其結果是好像shell命令IGNOREEOF=10被執行
interactive 允許單詞前帶#號,以使得在交互shell中忽略命令行的全部字元
-commands
monitor 同-m選項
noclobber 同-C選項
noexec 同-n選項
noglob 同-f選項
nohash 同-d選項
notify 同-b選項
nounset 同-u選項
physical 同-p選項
posix 改變BASH屬性以匹配標准,默認操作不同於POSIX1003.2標准
verbose 同-v選項
vi 使用vi風格的命令行編輯器
XTRACE 同-x選項,如果沒有給出選項名,顯示當前選項值
-p 打開特權模式(在此模式,$ENV文件被處理,不能從環境中繼承 shell函數.如果是有效用戶ID而不是實用戶組則自動啟動.關閉 此選項將使得有效用戶和組IDs設置實用戶和組IDs)
-t 在讀取命令並執行之後退出
-u 當執行參數括展時,把非設置變數作為錯誤處理(如果擴展企圖 出現在非設置變數中,shell顯示錯誤信息.如果不是互動式,則 帶非凌值退出)
-v 輸入行被讀取時,顯示shell輸入行
-x 在每個簡單命令被擴展之後,顯示PS4擴展值,之後是要執行的命令
-l 保存和恢復綁定在命令中的名稱
-d 禁止執行查找散列命令(通常,命令被保存在散列表中,一旦被找到 就不再繼續查找)
-C 效果好像是執行了noclobber=shell命令
-H 使用!風格的歷史替代(當shell交互時,在默認情況下,此選項有效)
-P 如果設置此參數,當執行改變目錄命令cd時,不遵循符號鏈接,而是 使用實際的目錄
-- 如果在選項後沒有參數,不設置位置參數.否則,即使一些參數以a 選項開始,也要把位置參數設置為argument
- 結束選項的信號,將引發其餘的參數被賦值到位置參數中(-x和-v 選項被關閉.如果沒有argument,位置參數將保留未改變的參數)
4. linux命令 set -ex 什麼意思
-e 腳本中的命令一旦運行失敗就終止腳本的執行
-x 用於顯示出命令與其執行結果(默認shell腳本中只顯示執行結果)
5. linux怎麼通過setenv命令修改環境變數
按變數的生存周期來劃分,Linux變數可分為兩類,它們的修改方法如下:
(1)永久的:需要修改配置文件,變數永久生效。
常見的配置文件包括:
(1-1)/etc/profile:對所有用戶生效;此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行;並從/etc/profile.d目錄的配置文件中搜集shell的設置
例如:編輯/etc/profile文件,添加CLASSPATH變數
# vi /etc/profile
添加一行:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改後需要執行重新登錄才能生效,也可以執行命令source /etc/profile來生效
(1-2)/etc/bashrc:對所有用戶生效;為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取
編輯方法如上,不再贅述
(1-3)~/.bash_profile:僅會對當前用戶有效;每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次
例如:編輯guok用戶目錄(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下內容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改後需要執行重新登錄才能生效,也可以執行命令source /etc/profile來生效
(1-4)~/.bashrc:僅會對當前用戶有效;該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取
編輯方法如上,不再贅述
另外,~/.bashrc等中設定的變數(局部)只能繼承/etc/profile中的變數,他們是"父子"關系
綜述,對上述文件修改,添加你需要的變數,在啟動一個shell(終端,terminal)時,你所定義的變數均會生效的。
(2)臨時的:使用export命令聲明即可,變數只在當前的shell(BASH)或其子shell(BASH)下是有效的,在關閉shell後失效,再打開新shell時就沒有這個變數,需要使用的話還需要重新定義
在shell的命令行下直接使用[export 變數名=變數值] 定義變數
環境變數的查看
(1)使用echo命令查看單個環境變數。例如:
echo $PATH
(2)使用env查看所有環境變數。例如:
env
(3)使用set查看所有本地定義的環境變數。例如:
set
另外,unset可以刪除指定的環境變數。
常用的環境變數
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE歷史記錄數
LOGNAME 當前用戶的登錄名
HOSTNAME指主機的名稱
SHELL 當前用戶Shell類型
LANGUGE 語言相關的環境變數,多語言可以修改此環境變數
MAIL當前用戶的郵件存放目錄
PS1基本提示符,對於root用戶是#,對於普通用戶是$
6. Linux中set,env和export這三個命令的區別
env是顯示變數 set和export是設置變數 set用於csh環伍敬境 export用蔽燃於bash環境 格式宏橘虛:set DISPLAY 192.168.1.1:0 export DISPLAY=192.168.1.1:0
7. linux的shell腳本中的set是什麼意思怎麼理解
set命令作用主要是顯示系統中已經存在的shell變數,以及設置shell變數的新變數值。使用set更改shell特性時,符號"+"和"-"的作用分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使用declare命令以變數名=值的格式進行定義即可。使用:set(選項)(參數)
例如:
declare mylove='Visual C++' #定義新環境變數
再使用set命令將新定義的變數輸出為環境變數,輸入如下命令: set -a mylove
標示已修改的變數,以供輸出至環境變數。
-b:使被中止的後台程序立刻回報執行狀態
-C:轉向所產生的文件無法覆蓋已存在的文件
-d:Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。
-e:若指令傳回值不等於0,則立即退出shell。
-f:取消使用通配符。
-h:自動記錄函數的所在位置。
-H Shell:可利用"!"加<指令編號>的方式來執行history中記錄的指令。
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使用監視模式。
-n:只讀取指令,而不實際執行。
-p:啟動優先順序模式。
-P:啟動-P參數後,執行指令時,會以實際的文件或目錄來取代符號連接。
-t:執行完隨後的指令,即退出shell。
-u:當執行時使用到未定義過的變數,則顯示錯誤信息。
-v:顯示shell所讀取的輸入值。
-x:執行指令後,會先顯示該指令及所下的參數。
8. linux中set的用法
linux set 命令
功能說明:設置shell。
語法:set [+-abCdefhHklmnpPtuvx]
補充說明:用set 命令可以設置各種shell選項或者列 出shell變數.單個選項設置常用的特性.在某些選項之後-o參數將特殊特性打開.在某些選項之後使用+o參數將關閉某些特性,不帶任何參數的set命 令將顯示shell的全部變數.除非遇到非法的選項,否則set總是返回ture.
參數:
allexport -a 從設置開始標記所有新的和修改過的用於輸出的變數
braceexpand -B 允許符號擴展,默認選項
emacs 在進行命令編輯的時候,使用內建的emacs編輯器, 默認選項
errexit -e 如果一個命令返回一個非0退出狀態值(失敗),就退出.
histexpand -H 在做臨時替換的時候允許使用!和!! 默認選項
history 允許命令行歷史,默認選項
ignoreeof 禁止coontrol-D的方式退出shell,必須輸入exit。
interactive-comments 在互動式模式下, #用來表示註解
keyword -k 為命令把關鍵字參數放在環境中
monitor -m 允許作業控制
noclobber -C 保護文件在使用重新動向的時候不被覆蓋
noexec -n 在腳本狀態下讀取命令但是不執行,主要為了檢查語法結構。
noglob -d 禁止路徑名擴展,即關閉通配符
notify -b 在後台作業以後通知客戶
nounset -u 在擴展一個沒有的設置的變數的時候, 顯示錯誤的信息
onecmd -t 在讀取並執行一個新的命令後退出
physical -P 如果被設置,則在使用pwd和cd命令時不使用符號連接的路徑 而是物理路徑
posix 改變shell行為以便符合POSIX要求
privileged 一旦被設置,shell不再讀取.profile文件和env文件 shell函數也不繼承任何環境
verbose -v 為調試打開verbose模式
vi 在命令行編輯的時候使用內置的vi編輯器
xtrace -x 打開調試回響模式
設置系統環境變數在本站下面這兩篇文章中有詳細說明:
設置環境變數永久生效 export PS1 :http://www.linuxso.com/a/linuxxitongguanli/1812.html
擴展閱讀:set,env和export這三個命令都可以用來顯示shell變數,其區別?
set 用來顯示本地變數
env 用來顯示環境變數
export 用來顯示和設置環境變數
set 顯示當前shell的變數,包括當前用戶的變數
env 顯示當前用戶的變數
export 顯示當前導出成用戶變數的shell變數
每個shell有自己特有的變數(set)顯示的變數,這個和用戶變數是不同的,當前用戶變數和你用什麼shell無關,不管你用什麼shell都在,比如HOME,SHELL等這些變數,但shell自己的變數不同shell是不同的,比如BASH_ARGC, BASH等,這些變數只有set才會顯示,是bash特有的,export不加參數的時候,顯示哪些變數被導出成了用戶變數,因為一個shell自己的變數可以通過export 「導出」變成一個用戶變數
[root@linux ~]# aaa=bbb
[root@linux ~]# echo $aaa
bbb
[root@linux ~]# set|grep aaa
aaa=bbb
[root@linux ~]# env|grep aaa
[root@linux ~]# export aaa
[root@linux ~]# env|grep aaa
aaa=bbb
(8)linuxset命令擴展閱讀二:set、env、export——Linux中的環境變數命令
Linux是一個多用戶的操作系統。每個用戶登錄系統後,都會有一個專用的運行環境。通常每個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境 變數的定義。用戶可以對自己的運行環境進行定製,其方法就是修改相應的系統環境變數。
什麼是環境變數
環境變數是一個具有 特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。許多用戶(特別是那些剛接觸Linux的新手)發現這些變數有些怪異或者難以控制。其 實,這是個誤會:通過使用環境變數,你可以很容易的修改一個牽涉到一個或多個應用程序的配置信息。
常見的環境變數
對於 PATH和HOME等環境變數大家都不陌生。
PATH能夠指定命令的搜索路徑,那麼動態鏈接庫的路徑用什麼變數指定呢?或者就是在 PATH裡面?
比如有一個程序需要/usr/local/lib下面的一個庫文件,應該怎麼指定其路徑呢?
經常看到有些變數如 LD_LIBRARY_PATH,LIBPATH,CLASSPATH等,他們之間有什麼不同和關系?
除此之外,還有下面一些常見環境變 量。
◆ HISTSIZE是指保存歷史命令記錄的條數。
◆ LOGNAME是指當前用戶的登錄名。
◆ HOSTNAME是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變數中來取得的。
◆ SHELL是指當前用戶用的是哪種Shell。
◆ LANG/LANGUGE是和語言相關的環境變數,使用多種語言的用戶可以修改此環境變數。
◆ MAIL是指當前用戶的郵件存放目錄。
◆ PS1是基本提示符,對於root用戶是#,對於普通用戶是$。PS2是附屬提示符,默認是「>」。可以通過修改此環境變數來修改當前的命令符,比 如下列命令會將提示符修改成字元串「Hello,My NewPrompt 」。
9. linux用set命令顯示當前模式
Linux系統設置:set命令詳解
set命令作⽤主要是顯⽰系統中已經存在的shell變數,以及設置shell變數的新變數值。使⽤set更改shell特性時,符號"+"和"-"的作⽤分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使⽤命令以變數名=值的格式進⾏定義即可。
語法
set(選項)(參數)
選項
-a:標⽰已修改的變數,以供輸出⾄環境變數。
-b:使被中⽌的後台程序⽴刻回報執⾏狀態。
-C:轉向所產⽣的⽂件⽆法覆蓋已存在的⽂件。
-d:Shell預設會⽤雜湊表記憶使⽤過的指令,以加速指令的執⾏。使⽤-d參數可取消。
-e:若指令傳回值不等於0,則⽴即退出shell。
-f:取消使⽤通配符。
-h:⾃動記錄函數的所在位置。
-H Shell:可利⽤"!"加<指令編號>的⽅式來執⾏history中記錄的指令。
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使⽤監視模式。
-n:只讀取指令,⽽不實際執⾏。
-p:啟動優先順序模式。
-P:啟動-P參數後,執⾏指令時,會以實際的⽂件或⽬錄來取代符號連接。
-t:執⾏完隨後的指令,即退出shell。
-u:當執⾏時使⽤到未定義過的變數,則顯⽰錯誤信息。
-v:顯⽰shell所讀取的輸⼊值。
-x:執⾏指令後,會先顯⽰該指令及所下的參數。
參數
取消某個set曾啟動的參數。
實例
使⽤declare命令定義⼀個新的環境變數"mylove",並且將其值設置為"Visual C++",輸⼊如下命令:
declare mylove='Visual C++' #定義新環境變數
再使⽤set命令將新定義的變數輸出為環境變數,輸⼊如下命令:
set -a mylove #設置為環境變數
執⾏該命令後,將會新添加對應的環境變數。⽤戶可以使⽤命令和命令分別顯⽰和搜索環境變數"mylove",輸⼊命令如下:
env | grep mylove #顯⽰環境變數值
此時,該命令執⾏後,將輸出查詢到的環境變數值。
¥
5.9
網路文庫VIP限時優惠現在開通,立享6億+VIP內容
立即獲取
Linux系統設置:set命令詳解
Linux系統設置:set命令詳解
set命令作⽤主要是顯⽰系統中已經存在的shell變數,以及設置shell變數的新變數值。使⽤set更改shell特性時,符號"+"和"-"的作⽤分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使⽤命令以變數名=值的格式進⾏定義即可。
語法
set(選項)(參數)
選項
-a:標⽰已修改的變數,以供輸出⾄環境變數。
第 1 頁
-b:使被中⽌的後台程序⽴刻回報執⾏狀態。
-C:轉向所產⽣的⽂件⽆法覆蓋已存在的⽂件。
-d:Shell預設會⽤雜湊表記憶使⽤過的指令,以加速指令的執⾏。使⽤-d參數可取消。
-e:若指令傳回值不等於0,則⽴即退出shell。
-f:取消使⽤通配符。
-h:⾃動記錄函數的所在位置。
-H Shell:可利⽤"!"加<指令編號>的⽅式來執⾏history中記錄的指令。
第 2 頁
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使⽤監視模式。
-n:只讀取指令,⽽不實際執⾏。
-p:啟動優先順序模式。
-P:啟動-P參數後,執⾏指令時,會以實際的⽂件或⽬錄來取代符號連接。
-t:執⾏完隨後的指令,即退出shell。
-u:當執⾏時使⽤到未定義過的變數,則顯⽰錯誤信息。
第 3 頁
-v:顯⽰shell所讀取的輸⼊值。
-x:執⾏指令後,會先顯⽰該指令及所下的參數。
參數
取消某個set曾啟動的參數。
實例
使⽤declare命令定義⼀個新的環境變數"mylove",並且將其值設置為"Visual C++",輸⼊如下命令:
declare mylove='Visual C++' #定義新環境變數
第 4 頁
再使⽤set命令將新定義的變數輸出為環境變數,輸⼊如下命令:
set -a mylove #設置為環境變數
執⾏該命令後,將會新添加對應的環境變數。⽤戶可以使⽤命令和命令分別顯⽰和搜索環境變數"mylove",輸⼊命令如下:
env | grep mylove #顯⽰環境變數值
此時,該命令執⾏後,將輸出查詢到的環境變數值。