《Linux命令、編輯器與Shell編程》讀書筆記1-linux系統入門命令http://blog.csdn.net/victory_xing126/article/details/46287633
一、關閉、重啓系統
1. 1小時後關機
shutdown -h 1
2. 立即關機
shutdown -h now
poweroff
3. 在指定時間點關機
shutdown -h 15:30
4. 2分鐘後重啓
shutdown -r 2
或者立即重啓
reboot
shutdown -r now
5. 掛起(需要硬件支持,否則可能無法恢復)
halt
6. init命令
- 0:立即關機
- 1:單用戶模式(相當於win裏面的安全模式),可以通過該模式修改root密碼
- 2:維護模式,網絡相關的服務會停止
- 3:完全多用戶模式,正常工作下用到的模式
- 4:未分配使用,開發模式
- 5:圖形模式
- 6:重啓
二、幫助命令
1. 同時執行多個命令,用;分開
2. 分割長命令:\
3. 查看某個命令的詳細功能:
help command
或者 command --help
4. man手冊:是一個文檔形式,操作同vi編輯器
(1)man command
(2)man number conmmand
- number代表的含義:
- 1:用戶命令,所有用戶都可以查閱其中的內容
- 2:系統調用,開發人員使用
- 3:庫函數
- 4:設備文件
- 5:文件格式描述,通常指配置文件的文檔
- 6:遊戲
- 7:其他雜項
- 8:只能給root用戶使用的管理命令和工具等
- 9:其他
(3)查找包含某個關鍵字的命令:
man -k keyword
5. info信息頁
info command|filename
文檔中的*號表示超鏈接,選中按回車可以跳轉
三、Linux的人機交互程序——Shell
1. Shell的種類:
可以通過cat /etc/shells查看目前OS上安裝了哪些Shell;通過shell_name --version查看該Shell的版本號
查看Shell程序相關的信息:(注意下面的命令裏是反單引號)
ls -l `cat /etc/shells`
2. 更改用戶的默認shell
(1)臨時修改:
顯示當前用戶使用的Shell:echo $SHELL
直接輸入要使用的Shell名來臨時更改當前Shell,如:ksh,bash,csh
此時,再查看當前正在使用 的shell名,仍然是之前的名字,但實際上變更後的shell是運行在原shell下的一個子shell,現在已經是更改後的shell了
(2)永久修改:
方法一:用su - username切換到要被更改shell的用戶下,然後鍵入chsh命令,系統提示輸入新Shell的路徑,可以用上面說過的cat /etc/shells命令查看;
方法二:usermod -s shell_path user_name
當此用戶重新登錄後,就可以使用新的shell了
方法三:創建用戶時指定默認shell:
useradd -s shell_path user_name
關於useradd命令更詳細的使用後面會講,或者自己通過man手冊學習
*除非特殊說明,本書後面都默認使用bash shell講解
四、Bash命令基本操作:
1. 指定默認編輯器:set -o vi|emacs
2. bind命令
(1)查看默認綁定的快捷鍵:bind -P
(2)命令格式:
- bind [option] [ [function name] [keyseq:shell-command] [file name] [ keyseq:readline-function or readline-command ] ]
- keyseq:readline-function:指一組快捷鍵,如\C表示ctrl鍵,\C-x表示同時按ctrl+x;readline-function表示要綁定的函數名稱
- option:
- l:列出所有可用的Read裏呢函數名
- P:列出所有快捷鍵
- p:列出當前Readline庫中的函數名稱及綁定
- f filename:從文件filename中讀取綁定
- r keyseq:取消由keyseq快捷鍵指定的所有綁定
- x keyseq:shell-command:爲keyseq指定的快捷鍵綁定由shell-command指定的shell命令;還可以使用x參數綁定一個程序
- m keymap:使用參數keymap指定的鍵盤映射
(3)修改或定義新的快捷操作,比如將回刪功能重新定義成ctrl+x:
bind "\C-x":backward-delete-char
綁定應用程序,比如把vi綁定給ctrl+alt+v:
bind -x '"\C-\M-v":vi'
綁定一個shell命令,如ctrl+a=ls -l:
bind -x '"\C-a":ls -l'
(4)保存修改的快捷鍵,否則重登陸或系統重啓,這些設置會丟失
按鍵映射默認保存在兩個文件中:/etc/inputrc和~/.inputrc,前者對所有登錄的用戶都生效,後者則只對家目錄對應的用戶生效
方法一:bind -P >~/.inputrc
方法二:echo 'export $INPUTRC=/etc/inputrc' >>~/.bash_profile
方法三:向.bash_profile或.bashrc文件中追加以下內容:
if [ -f ~/.inputrc ] then
bind -f ~/.inputrc
fi
方法四:上面三種方法只能保存readline庫的快捷鍵,自定義的程序和shell命令不會被保存
在用戶家目錄下新建.custom_bind文件,內容爲綁定命令 :
bind -x '"\C-\M-x":ls -l'
bind -x '"\C-\M-v":vi'
然後編輯用戶家目錄下的shell腳本文件(文件名根據用戶shell種類不同而不同),bash的爲.bash_profile(或.bashrc),在文件末尾 追加:
if [ -f ~/.custom_bind ] ; then
. ~/.custom_bind &>/dev/null
fi
*注:linux在新建用戶的時候,會將/etc/skel目錄裏的東西整體拷貝一份到新用戶的家目錄下(前提是建用戶時使用了-d參數、指定了用戶的家目錄);因此,如果想讓今後新建的用戶都綁定指定的快捷鍵,只需要通過root用戶在這個目錄下重做一次上面的操作即可。
3. 歷史命令
某用戶的操作命令會被記錄在家目錄的.bash_history文件中
(1)修改環境變量中關於記錄歷史命令的設置
set | grep HIST
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
可以通過修改這三個值:
·臨時修改:export 變量名=變量值
·永久修改(對所有用戶生效):在/etc/profile文件中添加(或者修改)
export HISTFILESIZE=900
·永久修改(針對某個用戶):在對應用戶家目錄下的.bash_profilez中添加(或修改)上述命令記錄
*注:後兩種修改若想立即生效,需要對相應的profile文件運行source命令
(2)清空歷史命令:history -c
4. 命令別名功能:可以把常用的命令定義成某個縮寫,提高工作效率
直接打開用戶家目錄下的.bash_profile文件(如.bashrc)追加如下格式的命令:
alias 自定義命令 = ’命令行‘
比如:alias zidingyi = 'tdx tailf /home/users/logs/debug.log > user.log'
保存退出後使用source命令。
也可以:
echo "alias vi = 'vim' ">>~/.bash_profile
*注:>表示將前面命令的執行結果覆蓋到後面的文件中;>>表示追加到後面的文件中。在操作系統文件時、注意儘量用>>,以免覆蓋系統配置。關於這兩種符號下面會詳細講
取消某個別名:unalias 自定義別名
五、管道線和輸入/輸出
1. 常用的管道線組合命令:
(1)搜索文件名相似的文本中的指定字符串:
find ./ -name "file_name" | xargs grep -i "strings"
-i 表示不區分大小寫
(2)搜索包含指定字符串的進程:
ps -ef | grep strings
(3)自定義本地網卡使用情況輸出:
netstat -i | sed '1d' | awk '{OFS="\t" } {print $1,$4,$8}'
sed ‘1d' 會屏蔽前面命令輸出的第一行;awd...表示先按照空格或製表符來分割每一行,然後輸出第1,4,8個字段、並用製表符(OFS="\t")對其進行分割
*注:使用管道符的命令,只能包含一條對文件進行讀寫的子命令
2. 重定向(< << > >>)
(1)將命令結果輸入到某個文件中:
netstat -tunlp >netstat.log
(2)將某個文件中的內容讀入到命令中(<):
mail -s 'Network status' user1 < netstat.txt
(3)錯誤重定向:比如要刪除一個不存在的文件
rm -rf asdf.fdsa > error
錯誤提示會存在error文件中,而不是顯示在屏幕上;這個功能可以避免使你編寫的腳本在工作時產生的輸出、錯誤信息干擾用戶正在進行的操作。
*注:對於不需要顯示、也不需要保存的輸出,可以直接輸出到linux垃圾池中:/dev/null
具體用法請參考:http://blog.csdn.net/kaiwii/article/details/7308729