Linux終端和shell
Linux終端
虛擬終端 mingetty程序產生
切換終端 ctrl+alt+fn n=1-6
輸入tty 顯示當前是那個終端
模擬終端 使用ssh通過網絡連接到Linux
/dev/pts/0
Secure shell SSH TCP 22端口連接到Linux
Linux的shell
GUI
Gnome C語言開發
KDE C++開發
Xface 輕量級圖形界面
CLI
bsh Unix提供的shell 功能弱
sh 安全穩定
csh Bill joy研發Csh 語法接近C語言 功能比sh強
ksh 商業版的ksh改進了csh GNU組織開發了免費的ksh 比商業版的ksh功能少
bash GNU組織融合和ksh csh和sh特性重新開發 能夠操作Linux和unix
zsh
tcsh
查看當前使用的shell
[root@WebServer ~]# echo $SHELL
/bin/bash
查看Linux可用的shell
[root@WebServer ~]# cat /etc/shells
bash功能
- 命令行編輯
- 內部命令和外部命令
- 命令補全 路徑補全
- 命令歷史
- 文件名通配符
- 命令別名
- 命令替換
- 路徑展開{}
- 重定向和管道
命令行編輯
光標快速移動
Ctrl+a 快速跳轉到行首
Ctrl+e 快速跳轉到行尾
刪除命令行中內容
Ctrl+w 刪除光標前一個單詞
Ctrl+u 刪除光標到行首的字符
Ctrl+k 刪除光標到行尾的字符
清屏幕
Ctrl+l Windows命令提示符 cls
取消不執行的命令
Ctrl+c
內部命令和外部命令
內部命令 shell程序自帶的命令
外部命令 在系統的某個路徑下的可執行程序
外部命令查找 依賴於 PATH變量
查看外部命令搜索路徑 查看PATH變量
echo $PATH
type pwd查看pwd是內部命令還是外部命令
which命令查看命令所在的目錄
[root@WebServer home]# which ping
/bin/ping
[root@WebServer home]# which ifconfig
/sbin/ifconfig
[root@WebServer home]#
安裝外部命令
命令補全和路徑補全
命令補全 連按tab鍵 列出所有可能的命令
hash表緩存命令所在位置
hash –d wc 刪除wc命令的緩存
hash –r 清空緩存表
路徑補全
命令歷史
[root@WebServer ~]# echo $HISTSIZE 緩存多少條命令
1000
[root@WebServer ~]# echo $HISTFILESIZE 命令歷史文件能夠保存多少條命令
1000
[root@WebServer ~]# echo $HISTFILE 查看命令歷史文件
/root/.bash_history
[root@WebServer ~]#
[root@WebServer ~]#cat /root/.bash_history 查看保存命令歷史
[root@WebServer ~]# history –a 將緩存的新命令 追加到歷史文件
查看$HISTCONTROL變量的值
[root@WebServer ~]# echo $HISTCONTROL
Ignoredups 不記錄後面重復的命令 只記錄第一個
Ignorespace 不記錄以空格開始的命令
Ignoreboth 不記錄以空格開始命令 也不記錄後面重復的命令
執行以前的命令
!!執行上一條命令
history查看命令歷史
!6 可以執行命令歷史中第6行命令
!-1 可以執行命令歷史中的倒數第一個命令
上下鍵可以翻命令歷史
Ctrl+P 向上翻
Ctrl+N 向下翻
當前命令 調用上一條命令的最後一個參數
第一種方法
ESC松開 再按 .
第二種方法 輸入!$
[root@WebServer ~]# tail -1 !$
tail -1 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@WebServer ~]#
History命令參數
-c 清空命令歷史
-w 保存命令歷史到歷史文件
-a 附加命令歷史 到歷史文件
-d 4 刪除命令歷史的第4條命
文件名通配符
通配符 特殊的字符 不表示字符的表面意義 而是能夠匹配符合指定特征的字符
* 代表任意長度的字符
? 代表任意單個字符
[] 代表指定範圍的單個字符
[root@WebServer tmp]# touch a ab aab cab adb ayb a91xueitb
[root@WebServer tmp]# ls a*
a a91xueitb aab ab adb ayb
[root@WebServer tmp]# ls a*b
a91xueitb aab ab adb ayb
[root@WebServer tmp]# ls a?b
aab adb ayb
[root@WebServer tmp]# ls a[abcd]b
aab adb
[root@WebServer tmp]# ls a[a-z]b
aab adb ayb
[root@WebServer tmp]# touch a2b a3b a4b a9b
[root@WebServer tmp]# ls a[0-9]b
a2b a3b a4b a9b
[root@WebServer tmp]# ls a[0-5]b
a2b a3b a4b
[root@WebServer tmp]# ls a[^0-5]b
a9b aab adb ayb
查找文件名中間有空格的文件
[root@WebServer tmp]# touch ‘a b‘
[root@WebServer tmp]# ls a[‘ ‘]b
a b
使用專門的方法標識特定字符
[[:space:]] 空格
[[:digit:]] [0-9]
[[:lower:]] [a-z]
[[:upper:]] [A-Z]
[[:alpha:]] [a-Z]
[root@WebServer tmp]# ls a[[:space:]]b
a b
[root@WebServer tmp]# ls a[[:digit:]]b
a2b a3b a4b a9b
[root@WebServer tmp]# ls a[[:space:]]b
a b
[root@WebServer tmp]# ls a[[:digit:]]b
a2b a3b a4b a9b
[root@WebServer tmp]# ls a[[:lower:]]b
aab adb ayb
[root@WebServer tmp]# ls a[^[:lower:]]b
a2b a3b a4b a9b a b
命令別名
alias cmdalias=’command [option] [argument]’
[root@WebServer ~]# type alias
查看定義的別名
[root@WebServer ~]# alias
定義命令別名
[root@WebServer ~]# alias if1=‘ifconfig eth0‘
[root@WebServer ~]# alias ifconfig=‘ifconfig eth0‘
調用命令本身
[root@WebServer ~]# \ifconfig
將命令別名添加到用戶環境配置文件
[root@WebServer ~]# ls -a
[root@WebServer ~]# vi .bashrc
編輯/etc/bashrc 添加命令別名 對所有用戶生效
[root@WebServer ~]# vi /etc/bashrc
刪除別名
[root@WebServer ~]# unalias cdnet
命令替換
使用命令執行的結果替換該命令
$(命令)
[root@WebServer tmp]# echo "The current directory is $(pwd)"
[root@WebServer ~]# date --help
[root@WebServer tmp]# touch file-$(date +%Y-%m-%d-%H-%M-%S)
使用反引號實現命令替換
bash 中 “ ” 弱引用 能夠實現命令替換
‘ ’ 強引用 不能夠實現命令替換
路徑展開
mkdir /tmp/zz/a/b /tmp/yy/a/b
mkdir /tmp/{zz,yy}/a/b
[root@WebServer ~]# mkdir /tmp/{a,b}{c,d} -v
mkdir: 已創建目錄 "/tmp/ac"
mkdir: 已創建目錄 "/tmp/ad"
mkdir: 已創建目錄 "/tmp/bc"
mkdir: 已創建目錄 "/tmp/bd"
[root@WebServer ~]# mkdir /tmp/{zz,yy}/a/b -pv
mkdir: 已創建目錄 "/tmp/zz"
mkdir: 已創建目錄 "/tmp/zz/a"
mkdir: 已創建目錄 "/tmp/zz/a/b"
mkdir: 已創建目錄 "/tmp/yy"
mkdir: 已創建目錄 "/tmp/yy/a"
mkdir: 已創建目錄 "/tmp/yy/a/b"
思考:
在/tmp路徑下創建以下目錄
etc/init.d
etc/sysconfig
usr/lib
usr/bin
usr/include
var/spool
var/run
proc
sys
bin
lib
media
mnt
[root@WebServer ~]# mkdir
/tmp/{etc/{init.d,sysconfig},usr/{lib,bin,include},var/{spool,run},proc,sys,bin,lib,media,mnt} -pv
重定向和管道
查看標準輸入輸出設備
ls –l /dev/std*
查看文件內容
tail –f /etc/passwd
ctrl+z將進程轉到後臺
ps 查看運行的進程
ls –l /proc/1788/fd 查看1788進程下的文件描述符
重定向 標準輸出
Ifconfig eth0 1>abc
重定向 標準錯誤輸出
Ifconfig eth1 2>123
[root@WebServer ~]# useradd hanlihui
[root@WebServer ~]# su hanlihui
[hanlihui@WebServer root]$ cd
[hanlihui@WebServer ~]$ find /etc -name "*.conf"
將標準輸出和標準錯誤輸出重定向到不同文件
[hanlihui@WebServer ~]$ find /etc -name "*.conf" 1>a 2>b
將標準輸出和標準錯誤輸出重定向到同一個文件
[hanlihui@WebServer ~]$ find /etc -name "*.conf" &>ab
重定向的用途
可以將命令輸出保存到文件
可以向配置文件增加內容
可以合並文件內容
管道技術
1.在管道後面的命令 都不應該再跟文件名
2.在管道中只有標準輸出才傳遞給下一個命令 標準錯誤輸出直接輸出到終端
可以把標準錯誤輸出給重定向
[hanlihui@WebServer ~]$ find /etc -name "*.conf" 2> /dev/null | grep rc
3.有些命令不支持管道技術
xargs讓ls支持管道技術
[hanlihui@WebServer ~]$ which cat | xargs ls -l
Linux終端和shell