命令歷史

shell進(jìn)程會記錄用戶提交執(zhí)行過的命令

可以是用history查看:

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[root@localhost dev]# history 
    1  ss -tnl    2  ifconfig
    3  vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    4  reboot 
    5  systemctl stop firewalld    6  systemctl disable firewalld    7  ifconfig
    8  ifconfig
    9  startx   10  ping 114.114.114.114
   11  top
......  140  who -b  141  who -r  142  date
  143  w
  144  history

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

定制history的功能

HISTSIZE:shell進(jìn)程可以保留的命令歷史的條數(shù)

[root@localhost dev]# echo $HISTSIZE1000

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

[root@localhost dev]# echo $HISTFILE/root/.bash_history

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

HISTFILESIZE:命令歷史文件的大小

[root@localhost dev]# echo $HISTFILESIZE1000

 

history常用命令用法

-c:清空命令歷史

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

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

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

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

 

調(diào)用命令歷史列表中的命令

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

!!:再一次執(zhí)行上一條命令

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

 

調(diào)用上一條命令的最后一個參數(shù)

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

或者使用字符串:!$

 

控制命令的記錄方式

[root@localhost /]# echo $HISTCONTROL
ignoredups

ignoredups:忽略重復(fù)的命令;

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

ignoreboth:以上兩者同時生效;

 

補全功能

命令補全

shell程序在接受到用戶執(zhí)行命令的請求時,最左側(cè)的字符串會被當(dāng)做命令

命令查找機制:首先查找內(nèi)部命令,根據(jù)PATH環(huán)境變量中設(shè)定的目錄,自左而右逐個搜索目錄下的文件名

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

 使用Tab鍵補全

 

路徑補全

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

 

目錄管理類命令

mkdir

make directories 創(chuàng)建目錄

mkdir [OPTION]... DIRECTORY...

常用選項:

-p:自動按需創(chuàng)建父目錄

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

 -v:顯示詳細(xì)過程,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:直接給定權(quán)限

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

 

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

 

命令行展開

{}:可承載一個以逗號分隔的路徑,并能夠?qū)⑵湔归_為多個路徑

例如:/tmp/{a,b}相當(dāng)于 /tmp/a  /tmp/b

例子:

如何創(chuàng)建/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}

如何創(chuàng)建a_c, a_d, b_c, b_d?

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

 如何創(chuàng)建如下目錄結(jié)構(gòu):

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

            /tmp/mysysroot/
                |-- bin                |-- etc                |   `-- sysconfig                |       `-- network-scripts                |-- sbin                |-- usr                |   |-- bin                |   |-- lib                |   |-- lib64                |   |-- local                |   |   |-- bin                |   |   |-- etc                |   |   |-- lib                |   |   `-- sbin                |   `-- sbin
                `-- var                    |-- cache                    |-- log
                    `-- run

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

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來查看目錄的層級結(jié)構(gòu)

 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

 命令的執(zhí)行狀態(tài)結(jié)果

bash通過狀態(tài)返回值來輸出此結(jié)果:

成功:0

失?。?-255

命令執(zhí)行完成之后,其狀態(tài)返回值保存于bash的特殊變量$?中

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

引用

 引用命令的執(zhí)行結(jié)果:

 $(COMMAND)或者`COMMAND`

 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 強引用,單引號:

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

 弱引用,雙引號:

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

 

快捷鍵

ctrl+a:跳轉(zhuǎn)至命令行行首

ctrl+e:跳轉(zhuǎn)至命令行行尾

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

ctrl+k:刪除光標(biāo)所在處至行尾的所有字符

ctrl+l:清屏,相當(dāng)于clear

 

文件查看類命令

 cat

cat [OPTION]... [FILE]...

查看文件內(nèi)容,直接顯示到文件底部

常用選項:

-n:可以顯示行數(shù)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xù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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

tac

tac [OPTION]... [FILE]...

反向查看文件內(nèi)容

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

more

 分屏查看文件內(nèi)容

 

head

head  [OPTION]... [FILE]...

查看文件的前n行,默認(rèn)為前10行

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

常用選項:

head -n  #:顯示前#行或者是head -#

 

tail

查看文件的后n行

tail  [OPTION]... [FILE]...

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

常用選項:

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

-f:查看文件尾部內(nèi)容,結(jié)束后不退出,跟隨顯示新增的行

 

stat

display file or file system status

文件:兩類數(shù)據(jù)

元數(shù)據(jù):metadata,文件的狀態(tài),創(chuàng)建時間,修改時間,大小,權(quán)限等

數(shù)據(jù):文件里面的內(nèi)容

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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: -

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

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

三個時間戳:

access:最近一次訪問的時間

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

change:文件最近一次改變的時間,即改變元數(shù)據(jù)的時間

 

touch

change file timestamps  修改時間戳

touch [OPTION]... FILE...

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

常用選項:

-c:指定的文件路徑不存在時不予以創(chuàng)建

-a:僅修改access time

-m:僅修改modify time

-t   STAMP

       [[CC]YY]MMDDhhmm[.ss]

(不能修改change time,只當(dāng)元數(shù)據(jù)發(fā)生變化時,才會改變)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

[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]#

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

文件管理工具

cp

復(fù)制文件或者目錄

單源復(fù)制:

cp [OPTION]... [-T] SOURCE DEST

如果DEST不存在,則先創(chuàng)建此文件,并復(fù)制源文件的數(shù)據(jù)流至DEST文件中

如果DEST存在:

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

    如果DEST是目錄文件,則在DEST目錄下創(chuàng)建一個與源文件同名的文件,并復(fù)制其數(shù)據(jù)

多源復(fù)制:

cp [OPTION]... SOURCE... DIRECTORY

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

如果DIRECTORY不存在,則報錯

如果DIRECTORY存在:

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

     如果DIRECTORY是目錄文件,分別復(fù)制每個文件至目標(biāo)目錄中,并保持原名

常用選項:

-i:交互式復(fù)制

-f:強制覆蓋目標(biāo)文件

-r,-R:遞歸復(fù)制目錄

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

-a:-dR --preserve=all, archive,用于實現(xiàn)歸檔;

--preserv=

       mode:權(quán)限

        ownership:屬主和屬組

        timestamps: 時間戳

        context:安全標(biāo)簽

        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

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

匹配字符:

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

?:匹配任意單個字符

[ ]:匹配指定范圍內(nèi)的任意單個字符‘

      [a-z],[A-Z],[0-9],[a-z0-9]   不區(qū)分大小寫

      特殊格式:

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

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

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

     [[:digit:]]:所有數(shù)字

     [[:alnum:]]:所有的字母和數(shù)字

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

     [[:punct:]]:所有標(biāo)點符號

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

     [^0-9]:匹配數(shù)字之外的任意單個字符  

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

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

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

 練習(xí):復(fù)制/etc目錄下,所有以.conf結(jié)尾,且以m,n,r,p開頭的文件或目錄至/tmp/conf.d/目錄下;

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

 

IO重定向及管道

IO即輸入和輸出設(shè)備,可用于輸入的設(shè)備一般有鍵盤、文件系統(tǒng)上的常規(guī)文件、網(wǎng)卡等,可用于輸出的設(shè)備有顯示器、文件系統(tǒng)上的常規(guī)文件、網(wǎng)卡等;

程序的三種數(shù)據(jù)流:

輸入的數(shù)據(jù)流:標(biāo)準(zhǔn)輸入(stdin),鍵盤;

輸出的數(shù)據(jù)流:標(biāo)準(zhǔn)輸出(stdout),顯示器;

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

文件描述符:fd,file descriptor

標(biāo)準(zhǔn)輸入:0

標(biāo)準(zhǔn)輸出:1

錯誤輸出:2

 

 IO重定向

輸出重定向:

>    覆蓋輸出

>>    追加輸出

小特性:

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

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

錯誤輸出重定向:

2>    覆蓋輸出

2>>    追加輸出

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

1.

&>    覆蓋輸出

&>>    追加輸出

2.

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

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

注意:特殊設(shè)備:/dev/null  當(dāng)不需要命令的執(zhí)行結(jié)果,只需要知道命令的執(zhí)行狀態(tài),則可以重定向至/dev/null,/dev/null相當(dāng)于一個垃圾桶。

輸入重定向:<

Here Document:<<,可以作為指定文件的結(jié)束符,常用于shell編程

[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]

把輸入的數(shù)據(jù)當(dāng)中的字符,凡是在SET1定義范圍內(nèi)出現(xiàn)的,通通對位轉(zhuǎn)換為SET2出現(xiàn)的字符,不修改原文件

用法1: tr SET SET2 < /PATH/FROM/SOMEFILE  

 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

用法2:tr -d SET1  <  /PATH/FROM/SOMEFILE     刪除SET1中的字符,區(qū)分大小寫

 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

 

管道

連接程序,實現(xiàn)將前面一個命令的輸出直接定向后一個程序當(dāng)做輸出數(shù)據(jù)流

COMMAND1 | COMMAND2 | COMMAND3 ...

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

 

tee

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

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

 如上例子,使用tee命令輸出到/etc/fstab,又將標(biāo)準(zhǔn)輸入作為了后面tr的輸入。

http://www.cnblogs.com/liubinsh/p/7141437.html