bash基礎特性的使用詳解

命令歷史

shell進程會記錄用戶提交執行過的命令

可以是用history查看:

[root@localhost dev]# history 1  ss -tnl2  ifconfig3  vi /etc/sysconfig/network-scripts/ifcfg-ens33 4  reboot 5  systemctl stop firewalld6  systemctl disable firewalld7  ifconfig8  ifconfig9  startx   10  ping 114.114.114.114     11  top  ......  140  who -b  141  who -r  142  date    143  w    144  history

?

定制history的功能

HISTSIZE:shell進程可以保留的命令歷史的條數

[root@localhost dev]# echo $HISTSIZE1000

HISTFILE:持久保存命令歷史的文件,當退出登錄的時候,此次的命令歷史才會被寫入到HISTFILE中

[root@localhost dev]# echo $HISTFILE/root/.bash_history
[root@localhost dev]# cat /root/.bash_history  ss -tnlifconfigvi /etc/sysconfig/network-scripts/ifcfg-ens33   reboot   systemctl stop firewalld  systemctl disable firewalldifconfigifconfigstartxping 114.114.114.114topifconfigifconfig --help  type lstype ifconfig......  bash  export nameecho $name  bash

HISTFILESIZE:命令歷史文件的大小

[root@localhost dev]# echo $HISTFILESIZE1000

?

history常用命令用法

-c:清空命令歷史

-d offset:刪除指定命令歷史,offset為指定的行數

-r:從文件讀取命令歷史至歷史列表中

-w:把歷史列表中的命令追加至歷史文件中

history #:顯示最近的#條命令

?

調用命令歷史列表中的命令

!#:再次執行歷史列表中第#條命令

!!:再一次執行上一條命令

!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令

?

調用上一條命令的最后一個參數

快捷鍵:按一下ESC再按點.

或者使用字符串:!$

?

控制命令的記錄方式

[root@localhost /]# echo $HISTCONTROL  ignoredups

ignoredups:忽略重復的命令;

ignorespace:忽略以空白字符開頭的命令;

ignoreboth:以上兩者同時生效;

?

補全功能

命令補全

shell程序在接受到用戶執行命令的請求時,最左側的字符串會被當做命令

命令查找機制:首先查找內部命令,根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名

[root@localhost /]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

?使用Tab鍵補全

?

路徑補全

?在給定的起始路徑下,以對應路徑下的打頭字符串來逐一匹配起始路徑下每個文件

?

目錄管理類命令

mkdir

make directories 創建目錄

mkdir [OPTION]… DIRECTORY…

常用選項:

-p:自動按需創建父目錄

[root@localhost tmp]# mkdir -p /tmp/x/y/z  [root@localhost tmp]# cd /tmp/x/y/z/[root@localhost z]#

?-v:顯示詳細過程,verbose

[root@localhost z]# mkdir -pv /tmp/a/b/cmkdir: created directory ‘/tmp/a’mkdir: created directory ‘/tmp/a/b’mkdir: created directory ‘/tmp/a/b/c’

-m MODE:直接給定權限

注意:路徑基名方為命令的作用對象,基名之前的路徑必須得存在

?

rmdir

remove empty direcories

移除空目錄

常用選項:

-p:刪除某目錄后,如果其父目錄為空,則一并刪除之

-v:顯示過程

[root@localhost b]# rmdir -pv /tmp/a/b/c/rmdir: removing directory, ‘/tmp/a/b/c/’rmdir: removing directory, ‘/tmp/a/b’rmdir: removing directory, ‘/tmp/a’rmdir: removing directory, ‘/tmp’rmdir: failed to remove directory ‘/tmp’: Device or resource busy

?

命令行展開

{}:可承載一個以逗號分隔的路徑,并能夠將其展開為多個路徑

例如:/tmp/{a,b}相當于 /tmp/a ?/tmp/b

例子:

如何創建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?

[root@localhost tmp]# mkdir -p /tmp/x/{y1/{a,b},y2}

如何創建a_c, a_d, b_c, b_d?

[root@localhost tmp]# mkdir -p /tmp/{a,b}_{c,d}

?如何創建如下目錄結構:

            /tmp/mysysroot/                  |-- bin|-- etc|   `-- sysconfig|       `-- network-scripts|-- sbin|-- usr|   |-- bin|   |-- lib|   |-- lib64|   |-- local|   |   |-- bin|   |   |-- etc|   |   |-- lib|   |   `-- sbin|   `-- sbin                  `-- var|-- cache|-- log                      `-- run
mkdir -p /tmp/mysysroot/{bin,etc/sysconfig/networkscripts,sbin,usr/{bin,lib,lib64,local/{bin,etc,lib,sbin},sbin},var/{cache,log,run}}

?

?tree

?可使用tree來查看目錄的層級結構

?bash基礎特性的使用詳解

-L #,指定要顯示的層級

bash基礎特性的使用詳解

?

?命令的執行狀態結果

bash通過狀態返回值來輸出此結果:

成功:0

失?。?-255

命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中

[root@localhost tmp]# ls /tmp/x/y1  y2  [root@localhost tmp]# echo $?0[root@localhost tmp]# ls /tmp/yls: cannot access /tmp/y: No such file or directory  [root@localhost tmp]# echo $?2

?

引用

?引用命令的執行結果:

?$(COMMAND)或者`COMMAND`

?bash基礎特性的使用詳解

?強引用,單引號:

[root@localhost ~]# echo '$PATH'$PATH

?弱引用,雙引號:

[root@localhost ~]# echo "$PATH"/usr/local/sbin:/usr/loca

?

快捷鍵

ctrl+a:跳轉至命令行行首

ctrl+e:跳轉至命令行行尾

ctrl+u:刪除行首至光標所在處之間的所有字符

ctrl+k:刪除光標所在處至行尾的所有字符

ctrl+l:清屏,相當于clear

?

文件查看類命令

?cat

cat [OPTION]… [FILE]…

查看文件內容,直接顯示到文件底部

常用選項:

-n:可以顯示行數

[root@localhost tmp]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  adm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  ......  gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin  tcpdump:x:72:72::/:/sbin/nologin

?

tac

tac [OPTION]… [FILE]…

反向查看文件內容

[root@localhost tmp]# tac /etc/passwdtcpdump:x:72:72::/:/sbin/nologin  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin  gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin  ......  adm:x:3:4:adm:/var/adm:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  bin:x:1:1:bin:/bin:/sbin/nologin  root:x:0:0:root:/root:/bin/bash

?

more

?分屏查看文件內容

?

head

head ?[OPTION]… [FILE]…

查看文件的前n行,默認為前10行

[root@localhost tmp]# head /etc/passwdroot:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  adm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown  halt:x:7:0:halt:/sbin:/sbin/halt  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin  operator:x:11:0:operator:/root:/sbin/nologin
常用選項:
head -n ?#:顯示前#行或者是head -#

?

tail

查看文件的后n行

tail ?[OPTION]… [FILE]…

[root@localhost tmp]# tail /etc/passwdcolord:x:992:987:User for colord:/var/lib/colord:/sbin/nologin  qemu:x:107:107:qemu user:/:/sbin/nologin  setroubleshoot:x:991:986::/var/lib/setroubleshoot:/sbin/nologin  rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin  nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin  gdm:x:42:42::/var/lib/gdm:/sbin/nologin  sssd:x:990:985:User for sssd:/:/sbin/nologin  gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin  tcpdump:x:72:72::/:/sbin/nologin

常用選項:

tail -n #:顯示最后#行或者是tail -#

-f:查看文件尾部內容,結束后不退出,跟隨顯示新增的行

?

stat

display file or file system status

文件:兩類數據

元數據:metadata,文件的狀態,創建時間,修改時間,大小,權限等

數據:文件里面的內容

[root@localhost tmp]# stat /etc/passwd    File: ‘/etc/passwd’    Size: 2235          Blocks: 8          IO Block: 4096   regular fileDevice: fd00h/64768d    Inode: 19840519    Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  Context: system_u:object_r:passwd_file_t:s0  Access: 2017-07-06 09:25:43.555083116 -0400Modify: 2017-07-01 08:00:52.140151303 -0400Change: 2017-07-01 08:00:52.141154779 -0400   Birth: -

stat顯示的就是文件的元數據,包含文件路徑,大小,blocks數目,IO block,文件類型,inode號,權限,uid,gid和三個時間戳等

三個時間戳:

access:最近一次訪問的時間

modify:最近一次修改文件的時間

change:文件最近一次改變的時間,即改變元數據的時間

?

touch

change file timestamps ?修改時間戳

touch [OPTION]… FILE…

文件不存在則創建文件,當直接使用命令去touch一個文件的時候,修改的是所有的時間戳

常用選項:

-c:指定的文件路徑不存在時不予以創建

-a:僅修改access time

-m:僅修改modify time

-t ? STAMP

? ? ? ?[[CC]YY]MMDDhhmm[.ss]

(不能修改change time,只當元數據發生變化時,才會改變)

[root@localhost tmp]# touch -t 201212121200.30  test.txt -m  [root@localhost tmp]# stat test.txt     File: ‘test.txt’    Size: 0             Blocks: 0          IO Block: 4096   regular empty fileDevice: fd00h/64768d    Inode: 17251556    Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  Context: unconfined_u:object_r:user_tmp_t:s0  Access: 2017-07-07 03:17:12.640883844 -0400Modify: 2012-12-12 12:00:30.000000000 -0500Change: 2017-07-07 03:19:17.667997201 -0400   Birth: -[root@localhost tmp]#

?

文件管理工具

cp

復制文件或者目錄

單源復制:

cp [OPTION]… [-T] SOURCE DEST

如果DEST不存在,則先創建此文件,并復制源文件的數據流至DEST文件中

如果DEST存在:

? ? 如果DEST是非目錄文件,則覆蓋DEST文件

? ? 如果DEST是目錄文件,則在DEST目錄下創建一個與源文件同名的文件,并復制其數據

多源復制:

cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…

如果DIRECTORY不存在,則報錯

如果DIRECTORY存在:

? ? ?如果DIRECTORY是非目錄文件,則報錯

? ? ?如果DIRECTORY是目錄文件,分別復制每個文件至目標目錄中,并保持原名

常用選項:

-i:交互式復制

-f:強制覆蓋目標文件

-r,-R:遞歸復制目錄

-d:復制符號鏈接文件本身,而非指向的源文件

-a:-dR –preserve=all, archive,用于實現歸檔;

–preserv=

?? ? ? mode:權限

?? ? ?? ownership:屬主和屬組

?? ? ?? timestamps: 時間戳

?? ? ?? context:安全標簽

?? ? ?? xattr:擴展屬性

?? ? ?? links:符號鏈接

?? ? ?? all:上述所有屬性

?

mv

move

移動文件,可用來重命名文件

SYNOPSIS
? ? ? ?mv [OPTION]… [-T] SOURCE DEST
? ? ? ?mv [OPTION]… SOURCE… DIRECTORY
? ? ? ?mv [OPTION]… -t DIRECTORY SOURCE…

常用選項:
-i:交互式

-f:強制覆蓋文件

?

rm

remove

移除文件

rm [OPTION]… FILE…

常用選項:

-i:交互式移除文件

-f:強制刪除文件

-r:遞歸刪除

注意:所有不用的文件建議不要直接刪除,可以移動至某個專用的目錄(用來做回收站的目錄)

?

Globbing

文件名通配:是對整體文件名匹配,不是部分匹配

匹配字符:

*:匹配任意長度的任意字符

?:匹配任意單個字符

[ ]:匹配指定范圍內的任意單個字符‘

? ? ? [a-z],[A-Z],[0-9],[a-z0-9] ? 不區分大小寫

? ? ? 特殊格式:

? ? ?[[:upper:]]:所有大寫字母

? ? ?[[:lower:]]:所有小寫字母

? ? ?[[:alpha:]]:所有字母

? ? ?[[:digit:]]:所有數字

? ? ?[[:alnum:]]:所有的字母和數字

? ? ?[[:space:]]:所有空白字符

? ? ?[[:punct:]]:所有標點符號

[^]:中括號加托字符,匹配指定范圍外的任意單個字符

? ? ?[^0-9]:匹配數字之外的任意單個字符 ?

? ? ?[^[:upper:]]:匹配大寫字母以外的任意單個字符

練習:顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現一位任意字符的文件或目錄;

ls -d /var/l?[[:lower:]]

?練習:復制/etc目錄下,所有以.conf結尾,且以m,n,r,p開頭的文件或目錄至/tmp/conf.d/目錄下;

cp -r /etc/[mnrp]*.conf /tmp/conf.d/

?

IO重定向及管道

IO即輸入和輸出設備,可用于輸入的設備一般有鍵盤、文件系統上的常規文件、網卡等,可用于輸出的設備有顯示器、文件系統上的常規文件、網卡等;

程序的三種數據流:

輸入的數據流:標準輸入(stdin),鍵盤;

輸出的數據流:標準輸出(stdout),顯示器;

錯誤的輸出流:錯誤輸出(stderr),顯示器;

文件描述符:fd,file descriptor

標準輸入:0

標準輸出:1

錯誤輸出:2

?

?IO重定向

輸出重定向:

> ? ?覆蓋輸出

>> ? ?追加輸出

小特性:

set -C:禁止覆蓋輸出重定向至已存在的文件

set +C:開啟覆蓋輸出重定向至已存在的文件(默認)

錯誤輸出重定向:

2> ? ?覆蓋輸出

2>> ? ?追加輸出

合并正常輸出流和錯誤輸出流

1.

&> ? ?覆蓋輸出

&>> ? ?追加輸出

2.

COMMADN > /PATH/TO/somefile ?2>&1 :如果命令執行成功則覆蓋輸出至somefile,執行不成功也覆蓋輸出至somefile

COMMAND >> /PATH/TO/somefile 2>&1:如果命令執行成功則追加覆蓋至somefile,執行不成功也追加輸出至somefile

注意:特殊設備:/dev/null ?當不需要命令的執行結果,只需要知道命令的執行狀態,則可以重定向至/dev/null,/dev/null相當于一個垃圾桶。

輸入重定向:

Here Document:

[root@localhost tmp]# cat <<EOF> how are you> my name is Frank> EOF  how are you  my name is Frank

?

?tr

tr [OPTION]… SET1 [SET2]

把輸入的數據當中的字符,凡是在SET1定義范圍內出現的,通通對位轉換為SET2出現的字符,不修改原文件

用法1: tr SET SET2

?bash基礎特性的使用詳解

用法2:tr -d SET1 ?

?bash基礎特性的使用詳解

管道

連接程序,實現將前面一個命令的輸出直接定向后一個程序當做輸出數據流

COMMAND1 | COMMAND2 | COMMAND3 …

[root@localhost tmp]# echo 'abcd' | tr 'a-z' 'A-Z' | tr -d 'AD' BC
tee

?顯示程序的輸出并將其復制到一個或多個文件中

[root@localhost tmp]# echo 'abcd' | tee /etc/fstab | tr 'ab' 'AB' ABcd  [root@localhost tmp]# cat /etc/fstab   abcd

?如上例子,使用tee命令輸出到/etc/fstab,又將標準輸入作為了后面tr的輸入。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享