1. 程式人生 > >Linux終端和shell

Linux終端和shell

調用 %d c++ 命令替換 命令別名 上下 sco cdn 環境

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功能

  1. 命令行編輯
  2. 內部命令和外部命令
  3. 命令補全 路徑補全
  4. 命令歷史
  5. 文件名通配符
  6. 命令別名
  7. 命令替換
  8. 路徑展開{}
  9. 重定向和管道

命令行編輯

光標快速移動

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