內部命令和外部命令 內部命令:系統集成的命令,集成到bash程式中的命令,可以用enable和help查看內部命令,直接和系統一樣運行在記憶體中,執行速度快。內部命令中的:相當於TRUE,即什麼都不幹。 enable cmd啟用內部命令 enable –n cmd 禁用內部命令 enable –n 查 ...
內部命令和外部命令
內部命令:系統集成的命令,集成到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 ~]#alias alias 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種方法
- 重覆前一個命令使用上方向鍵,並回車執行
- 按!! 並回車執行
- 輸入!-1並回車執行
- 按Ctrl+p並回車執行
!: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鍵上方的鍵
Desktop
Documents
...... ------------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 date date (1) - print or set the system date and time date (1p) - write the date and time [root@centos6 /]#whatis passwd passwd (1) - update user's authentication tokens passwd (5) - password file passwd [sslpasswd] (1ssl) - compute password hashes
通過whatis命令可以查看命令有那些章節,帶p的適合開發相關的。
[root@centos6 /]#man 5 passwd Formatting page, please wait... PASSWD(5) Linux Programmer's Manual PASSWD(5) NAME passwd - password file
需要添加第幾章節,才是查看的是第幾章節的命令,否則按1來看
[root@centos6 /]#whereis ls ls: /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 passwd Cannot 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 hostname dnsdomainname [hostname] (1) - show the system's DNS domain name domainname [hostname] (1) - show or set the system's NIS/YP domain name gethostname (2) - get/set hostname gethostname (3p) - get name of current host hostname (1) - show or set the system's host name hostname (7) - hostname resolution description hosts (5) - The static table lookup for hostnames logresolve (1) - Resolve IP-addresses to hostnames in Apache log files nisdomainname [hostname] (1) - show or set system's NIS/YP domain name
man –k keyword 列出所有匹配的頁面,使用whatis資料庫
[root@centos6 /]#man -f passwd passwd (1) - update user's authentication tokens passwd (5) - password file passwd [sslpasswd] (1ssl) - compute password hashes [root@centos6 /]#whatis passwd passwd (1) - update user's authentication tokens passwd (5) - password file passwd [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 /]#sosreport sosreport (version 3.4) This command will collect diagnostic and configuration information from this CentOS Linux system and installed applications.
向redhat官方發送系統分析包
官方站點:Documentation
(6)發行版的官方文檔
(7)Google