第三章 使用協助,使用協助
內部命令和外部命令
內部命令:系統整合的命令,整合到bash程式中的命令,可以用enable和help查看內部命令,直接和系統一樣運行在記憶體中,執行速度快。內部命令中的:相當於TRUE,即什麼都不幹。
enable cmd啟用內部命令
enable –n cmd 禁用內部命令
enable –n 查看所有禁用的內部命令
enable –n enable 自殺,重新登出即可恢複
外部命令:在檔案系統路徑下有對應的可執行程式檔案
查看路徑:which -a |--skip-alias; whereis
區別指定的命令是內部或外部命令
type COMMAND
如果執行過一個外部命令,它會把這個命令的路徑記錄到記憶體中,這個就是hash緩衝表
hash常見用法:
hash 顯示hash緩衝
hash -l 顯示hash緩衝,可作為輸入使用,更詳細。
hash –p path name 將命令全路徑path起別名為name
hash –p /usr/bin/free f
hash –t name 列印緩衝中name的路徑
hash –t f
hash –d name 清除name緩衝
hash –r 清除所有緩衝
which –a free 顯示所有路徑下的free
命令執行優先順序:別名>內部命令>外部命令
問:為什麼有的命令既有內部又有外部?
有可能有的shell中沒有這個內部命令,外部有還可以執行。
[root@centos7 ~]#aliasalias cp='cp -i'......
顯示當前shell進程所有可用的命令別名
[root@centos7 ~]#alias date='date +%F'
定義別名date,其相當於執行命令date +%F
在命令列中定義的別名,僅對當前shell進程有效
如果想永久有效,要定義在設定檔中
僅對目前使用者:~/.bashrc
對所有使用者有效:/etc/bashrc 添加到最後即可
編輯配置給出的新配置不會立即生效,需要bash進程重新讀取設定檔
source /path/to/config_file
. /path/to/config_file
撤銷別名:unalias
unalias [-a] name [name …]
-a 取消所有別名
如果別名同原命令同名,要執行原命令,可使用
\COMMAND
‘COMMAND’
/PATH/COMMAND
退出某個執行的命令:
Ctrl+c:強制退出,有可能資料丟失。
Ctrl+d:正常退出。
tab鍵
[root@centos7 ~]#rpm -qa bash*bash-completion-2.1-6.el7.noarch
需要安裝了上面這個包才能啟用Tab功能
命令補全
內部命令:直接補全
外部命令:bash根據PATH環境變數定義的路徑,自左而右在每個路徑搜尋以給定命令名命名的檔案,第一次找到的命令即為要執行的命令
路徑補全
把使用者給出的字串當做路徑開頭,並在其指定上級目錄下搜尋以指定的字串開頭的檔案名稱
如果唯一:則直接補全
否則:再次Tab給出列表
雙擊Tab
command 2Tab 所有子命令或檔案補全
string2Tab 以string開頭命令
[root@centos7 ~]#/app/ etc/ lost+found/ proc/ srv/ usr/bin/ home/ media/ root/ sys/ var/boot/ lib/ mnt/ run/ testdir/ dev/ lib64/ opt/ sbin/ tmp/
/2Tab 顯示所有根目錄下一級目錄,包括隱藏目錄
[root@centos7 ~]#./.cache/ .dbus/ Documents/ .local/ Music/ Public/ Videos/.config/ Desktop/ Downloads/ .mozilla/ Pictures/ Templates/
./2Tab 目前的目錄下子目錄,包括隱藏目錄
[root@centos7 ~]#*Desktop Downloads Pictures Templates Documents Music Public Videos
*2Tab 目前的目錄下子目錄,不包括隱藏目錄
[root@centos7 ~]#~~dbus/ ~polkitd/ ~sunan/~ftp ~postfix/ ~sync/~gnome-initial-setup ~root/ ~usbmuxd/......
~2Tab 所有使用者列表
[root@centos7 ~]#$$_ $LINENO$BASH $LOGNAME......
$2Tab 所有變數
[root@centos6 ~]#@@::1 @localhost4.localdomain4 @localhost.localdomain@localhost @localhost6 @localhost4 @localhost6.localdomain6
@2Tab /etc/hosts記錄 (centos7不支援)
[root@centos6 /]#=app/ dev/ lost+found/ opt/ srv/ .autofsck etc/ media/ proc/ sys/ bin/ home/ misc/ root/ tmp/ boot/ lib/ mnt/ sbin/ usr/ .dbus/ lib64/ net/ selinux/ var/
=2Tab 相當於ls –A (centos7不支援)
命令列曆史
- 儲存你輸入的命令曆史。可以用它來重複執行命令
- 登入shell時,會讀取命令曆史檔案中記錄下的命令~/.bash_history
- 登入進shell後新執行的命令只會記錄在緩衝中;這些命令會使用者退出時“追加”至命令曆史檔案中
重複前一個命令,有4種方法
!:0 執行前一條命令(去除參數)
Ctrl + n 顯示當前曆史中的下一條命令,但不執行
Ctrl + j 執行當前命令
!n 執行history命令輸出對應序號n的命令
!-n 執行history曆史中倒數第n個命令
!string 重複前一個以“string”開頭的命令
!?string 重複前一個包含string的命令
!string:p僅列印命令曆史,而不執行
!$:p 列印輸出!$(上一條命令的最後一個參數)的內容
!*:p列印輸出!*(上一條命令的所有參數)的內容
^string刪除上一條命令中的第一個string
^string1^string2將上一條命令中的第一個string1替換為string2
!:gs/string1/string2將上一條命令中所有的string1都替換為string2
使用up(向上)和down(向下)鍵來上下瀏覽從前輸入的命令
ctrl-r來在命令曆史中搜尋命令
(reverse-i-search)
Ctrl+g:從曆史搜尋模式退出
要重新調用前一個命令中最後一個參數:
!$ 表示
Esc, .(點擊Esc鍵後鬆開,然後點擊.鍵)
Alt+ .(按住Alt鍵的同時點擊.鍵)
調用曆史參數:
command !^ : 利用上一個命令的第一個參數做cmd的參數
command !$ : 利用上一個命令的最後一個參數做cmd的參數
command !* : 利用上一個命令的全部參數做cmd的參數
command !:n : 利用上一個命令的第n個參數做cmd的參數
command !n:^ 調用第n條命令的第一個參數
command !n:$ 調用第n條命令的最後一個參數
command !n:m 調用第n條命令的第m個參數
command !n:* 調用第n條命令的所有參數
command !string:^ 從命令曆史中搜尋以string 開頭的命令,並擷取它的第一個參數
command !string:$ 從命令曆史中搜尋以string 開頭的命令,並擷取它的最後一個參數
command !string:n 從命令曆史中搜尋以string 開頭的命令,並擷取它的第n個參數
command !string:* 從命令曆史中搜尋以string 開頭的命令,並擷取它的所有參數
命令history:
history [-c] [-d offset] [n]
history -anrw[filename]
history -psarg[arg...]
-c: 清空命令曆史
-d offset: 刪除曆史中指定的第offset個命令
n: 顯示最近的n條曆史
-a: 追加本次會話新執行的命令曆史列表至曆史檔案
-r: 讀曆史檔案附加到曆史列表
-w: 儲存曆史列表到指定的曆史檔案
-n: 讀曆史檔案中未讀過的行到曆史列表
-p: 展開曆史參數成多行,但不存在曆史列表中
-s: 展開曆史參數成一行,附加在曆史列表後
[root@centos6 ~]#history -p `ls` `pwd` ------------命令中調用命令使用反向單引號,就是鍵盤tab鍵上方的鍵DesktopDocuments
...... ------------ls執行結果/root ------------pwd執行結果
ls和pwd全執行了,但曆史中沒有記錄,-p選項作用。
[root@centos6 ~]#history -s reboot
曆史命令顯示的是reboot,但系統沒有重啟,可以偽造曆史
命令曆史相關環境變數:
HISTSIZE:命令記錄的條數,命令的記錄的記憶體中曆史的長度,修改/etc/profile檔案即可。
HISTFILE:指定曆史檔案,預設為~/.bash_history,磁碟上曆史檔案
HISTFILESIZE:命令曆史檔案記錄曆史的條數
記憶體中記錄的曆史命令和磁碟檔案記錄的曆史命令數可以不一樣,但一般相同。
HISTTIMEFORMAT=“%F %T “ 顯示時間
HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2開頭的曆史
控制命令曆史的記錄方式:
環境變數:HISTCONTROL
=ignoredups 預設,忽略重複的命令,連續且相同為“重複”
=ignorespace 忽略所有以空白開頭的命令
=ignoreboth 相當於ignoredups, ignorespace的組合
=erasedups 重複資料刪除命令
export 變數名="值“
存放在/etc/profile 或~/.bash_profile
bash快速鍵:
Ctrl + l 清屏,相當於clear命令
Ctrl + o 執行當前命令,並重新顯示本命令
Ctrl + s 阻止螢幕輸出,鎖定
Ctrl + q 允許螢幕輸出
Ctrl + c 終止命令
Ctrl + z 掛起命令
Ctrl + a 游標移到命令列首,相當於Home
Ctrl + e 游標移到命令列尾,相當於End
Ctrl + f 游標向右移動一個字元
Ctrl + b 游標向左移動一個字元
Alt + f 游標向右移動一個單詞尾
Alt + b 游標向左移動一個單詞首
Ctrl + xx 游標在命令列首和游標之間移動
Ctrl + u 從游標處刪除至命令列首
Ctrl + k 從游標處刪除至命令列尾
Alt + r 刪除當前整行
Ctrl + w 從游標處向左刪除至單詞首
Alt + d 從游標處向右刪除至單詞尾
Ctrl + d 刪除游標處的一個字元
Ctrl + h 刪除游標前的一個字元
Ctrl + y 將刪除的字元粘貼至游標後
Alt + c 從游標處開始向右更改為首字母大寫的單詞
Alt + u 從游標處開始,將右邊一個單詞更改為大寫
Alt + l 從游標處開始,將右邊一個單詞更改為小寫
Ctrl + t 交換游標處和之前的字元位置
Alt + t 交換游標處和之前的單詞位置
Alt + N 提示輸入指定字元後,重複顯示該字元N次
注意:Alt 組合快速鍵經常和其它軟體衝突
在SecureCRT有時候Alt鍵會有衝突:
解決辦法:右擊會話選擇會話選項,選擇Emacs,選中使用ALT作為元鍵,然後選中第三項。
使用協助:
whatis command
依賴於後台資料庫,剛剛裝上的系統,執行makewhatis(centos6)或mandb(centos7)
command –-help
直接敲help或者enable顯示所有的內部命令
man and info
本地協助文檔/usr/share/doc/
官網線上文檔
其他網站和搜尋
命令協助:
內部命令:help COMMAND
man bash
注意:不要用man內部命令,man內部命令其實是開啟的man bash
外部命令:
(1)COMMAND –-help(有些命令不支援,使用較少)
COMMAND -h
樣本:
date --help
Usage:date[OPTION]...[+FORMAT]or: date[-u|--utc|--universal][MMDDhhmm[[CC]YY][.ss]]
[]表示可選項
CAPS或<>表示變化的資料
...表示一個列表
x |y| z的意思是“x或y或z“,即這三個意思一樣,選一個即可
-abc的意思是-a -b –c
{ } 表示分組
(2)使用手冊(manual)
man COMMAND(使用較多,比較通用)
提供命令協助的檔案
手冊頁存放在/usr/share/man
幾乎每個命令都有man的”章節”
man頁面分組為不同的“章節”
統稱為Linux手冊
man命令的設定檔:/etc/man.config(centos6)|man_db.conf(centos7)
MANPATH /PATH/TO/SOMEWHERE:指明man檔案搜尋位置
自己手工安裝第三方軟體,需要按上面的格式,放置協助文檔路徑,不然man這個命令搜不到文檔
man –M /PATH/TO/SOMEWHERE COMMAND:到指定位置下搜尋
COMMAND命令的手冊並顯示
中文man需要安裝包man-page-zh-CN
man 章節
1:使用者命令
2:系統調用
3:C庫調用
4:裝置檔案及特殊檔案
5:設定檔格式
6:遊戲
7:雜項
8:管理類的命令
9:Linux核心API
[root@centos6 /]#whatis datedate (1) - print or set the system date and timedate (1p) - write the date and time[root@centos6 /]#whatis passwdpasswd (1) - update user's authentication tokenspasswd (5) - password filepasswd [sslpasswd] (1ssl) - compute password hashes
通過whatis命令可以查看命令有那些章節,帶p的適合開發相關的。
[root@centos6 /]#man 5 passwdFormatting page, please wait...PASSWD(5) Linux Programmer's Manual PASSWD(5) NAME passwd - password file
需要添加第幾章節,才是查看的是第幾章節的命令,否則按1來看
[root@centos6 /]#whereis lsls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
前面是命令的路徑,後面是文檔的man協助路徑
man協助段落說明
協助手冊中的段落說明:
NAME 名稱及簡要說明
SYNOPSIS 用法格式說明
[] 可選內容
<> 必選內容
a|b 二選一
{ } 分組
… 同一內容出現多次
DESCRIPTION 詳細說明
OPTIONS 選項說明
EXAMPLES 樣本
FILES 相關檔案
AUTHOR 作者
COPYRIGHT 版本資訊
REPORTING BUGS bug資訊
SEE ALSO 其它協助參考
man協助:
查看man手冊頁
man [章節] keyword
列出所有協助
[root@centos6 /]#man -a passwdCannot open the message catalog "man" for locale "zh.CN"(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")Formatting page, please wait...PASSWD(1) User utilities PASSWD(1)
man –a keyword列出所有章節的passwd協助,按q切換到下一個
搜尋man手冊
[root@centos6 /]#man -k hostnamednsdomainname [hostname] (1) - show the system's DNS domain namedomainname [hostname] (1) - show or set the system's NIS/YP domain namegethostname (2) - get/set hostnamegethostname (3p) - get name of current hosthostname (1) - show or set the system's host namehostname (7) - hostname resolution descriptionhosts (5) - The static table lookup for hostnameslogresolve (1) - Resolve IP-addresses to hostnames in Apache log filesnisdomainname [hostname] (1) - show or set system's NIS/YP domain name
man –k keyword 列出所有匹配的頁面,使用whatis資料庫
[root@centos6 /]#man -f passwdpasswd (1) - update user's authentication tokenspasswd (5) - password filepasswd [sslpasswd] (1ssl) - compute password hashes[root@centos6 /]#whatis passwdpasswd (1) - update user's authentication tokenspasswd (5) - password filepasswd [sslpasswd] (1ssl) - compute password hashes
man –f keyword,相當於whatis
[root@centos6 /]#man -w 5 passwd/var/cache/man/cat5/passwd.5.lzma (<-- /usr/share/man/man5/passwd.5.gz)
列印man協助檔案的路徑,man –w [章節] keyword
man命令的操作方法:使用less命令實現
space,^v,^f,^F:向檔案尾翻屏
b, ^b: 向檔案首部翻屏
d, ^d: 向檔案尾部翻半屏
u, ^u: 向檔案首部翻半屏
RETURN, ^N, e, ^E or j or ^J: 向檔案尾部翻一行y or ^Y or ^P or k or ^K:向檔案首部翻一行
q: 退出
#:跳轉至第#行
1G: 回到檔案首部
G:翻至檔案尾部
man搜尋:
/KEYWORD:
以KEYWORD指定的字串為關鍵字,從當前位置向檔案尾部搜尋;不區分字元大小寫;
n: 下一個
N:上一個
?KEYWORD:
以KEYWORD指定的字串為關鍵字,從當前位置向檔案首部搜尋;不區分字元大小寫;
n: 跟搜尋命令同方向,下一個
N:跟搜尋命令反方向,上一個
(3)資訊頁
info COMMAND
方向鍵,PgUp,PgDn 導航
Tab鍵移動到下一個連結
d 顯示主題目錄
Home 顯示主題首部
Enter進入選定連結
n/p/u/l進入下/前/上一層/最後一個連結
s文字文本搜尋
q退出info
(4)程式自身的協助文檔
README
INSTALL
ChangeLog
(5)程式官方文檔
[root@centos7 /]#sosreportsosreport (version 3.4)This command will collect diagnostic and configuration information fromthis CentOS Linux system and installed applications.
向redhat官方發送系統分析包
官方網站:Documentation
(6)發行版的官方文檔
(7)Google