Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Detaillierte Erläuterung der Verwendung grundlegender Bash-Funktionen

Detaillierte Erläuterung der Verwendung grundlegender Bash-Funktionen

零下一度
零下一度Original
2017-07-24 17:28:141620Durchsuche

Befehlsverlauf

Der Shell-Prozess zeichnet die vom Benutzer übermittelten und ausgeführten Befehle auf

Mit dem Verlauf können Sie Folgendes anzeigen:

[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

Die Funktion zum Anpassen des Verlaufs

HISTSIZE: Die Anzahl der Befehlsverläufe, die der Shell-Prozess behalten kann

[root@localhost dev]# echo $HISTSIZE1000

HISTFILE: persistent Eine Datei, die den Befehlsverlauf speichert. Wenn Sie sich abmelden, wird der Befehlsverlauf in HISTFILE geschrieben

[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: Die Größe der Befehlsverlaufsdatei

[root@localhost dev]# echo $HISTFILESIZE1000

history Allgemeine Befehlsverwendung

-c: Befehlsverlauf löschen

-d Offset: Löscht den angegebenen Befehlsverlauf, Offset ist die angegebene Anzahl von Zeilen

-r: Liest den Befehlsverlauf aus der Datei in die Verlaufsliste

-w: Verlauf speichern. Die Befehle in der Liste werden an die Verlaufsdatei angehängt.

Verlauf #: Die neuesten # Befehle anzeigen.

Aufrufen Befehl in der Befehlsverlaufsliste

! #: Führen Sie den #-Befehl in der Verlaufsliste erneut aus

!!: Führen Sie den vorherigen Befehl

erneut aus! STRING: Führen Sie den letzten Befehl, der mit STRING in der Befehlsverlaufsliste beginnt, erneut aus

Rufen Sie den letzten Parameter des vorherigen Befehls auf

Tastenkombination: Drücken Sie ESC und klicken Sie dann auf .

oder verwenden Sie die Zeichenfolge: !$

Steuern Sie die Aufzeichnungsmethode von Befehlen

[root@localhost /]# echo $HISTCONTROL
ignoredups

ignoredups: ignoriert doppelte Befehle;

ignorespace: ignoriert Befehle, die mit Leerzeichen beginnen;

ignoreboth: beide oben genannten werden gleichzeitig wirksam

Vervollständigungsfunktion

Befehlsvervollständigung

Wenn das Shell-Programm die Anforderung des Benutzers zur Ausführung eines Befehls empfängt, wird die Zeichenfolge ganz links angezeigt Wird als Befehl behandelt

Befehlssuchmechanismus: Suchen Sie zuerst nach internen Befehlen und durchsuchen Sie die Dateinamen im Verzeichnis nacheinander von links nach rechts entsprechend dem in der PATH-Umgebungsvariablen

[root@localhost /]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Vervollständigen Sie mit der Tabulatortaste

Pfadvervollständigung

am gegebener Startpfad Als nächstes verwenden Sie die führende Zeichenfolge im entsprechenden Pfad, um jede Datei im Startpfad einzeln zuzuordnen

Verzeichnisverwaltungsbefehle

mkdir

Verzeichnisse erstellen Verzeichnisse erstellen

mkdir [OPTION]... VERZEICHNIS...

Allgemeine Optionen:

-p: Übergeordnetes Verzeichnis automatisch erstellen Verzeichnisse auf Anfrage

[root@localhost tmp]# mkdir -p /tmp/x/y/z
[root@localhost tmp]# cd /tmp/x/y/z/[root@localhost z]#
-v: Detaillierten Prozess anzeigen, ausführlich

[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 MODUS: Berechtigungen direkt erteilen

Hinweis: Der Pfadbasisname ist das Ziel des Befehls. Der Pfad vor dem Basisnamen muss vorhanden sein

rmdir

Leere Verzeichnisse entfernen

Leere Verzeichnisse entfernen

Allgemeine Optionen:

-p: Nach dem Löschen eines Verzeichnisses, wenn es übergeordnet ist Verzeichnis ist Wenn leer, löschen Sie sie zusammen

-v: Anzeigeprozess

[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

Befehlszeilenerweiterung

{ } : Kann einen durch Kommas getrennten Pfad enthalten und ihn in mehrere Pfade erweitern

Zum Beispiel: /tmp/{a,b} entspricht /tmp/a /tmp/b

Beispiel:

Wie erstelle ich /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}
Wie erstelle ich a_c, a_d, b_c, b_d?

[root@localhost tmp]# mkdir -p /tmp/{a,b}_{c,d}
So erstellen Sie die folgende Verzeichnisstruktur:

            /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}}

Baum

Mit dem Baum können Sie die hierarchische Struktur des Verzeichnisses anzeigen

-L #, geben Sie die Ebene an anzuzeigen

Das Ausführungsstatusergebnis des Befehls

bash gibt dieses Ergebnis über den Statusrückgabewert aus:

Erfolg: 0

Fehler: 1-255

Nachdem die Befehlsausführung abgeschlossen ist, wird der Statusrückgabewert in der Bash-Spezialvariablen $?

[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

Zitat

Zitieren Sie das Ausführungsergebnis des Befehls:

$(COMMAND) oder `COMMAND`

Starkes Zitat, einfaches Anführungszeichen:

[root@localhost ~]# echo '$PATH'$PATH
Schwaches Zitat , doppeltes Anführungszeichen:

 

快捷键

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:<<,可以作为指定文件的结束符,常用于shell编程

[root@localhost tmp]# cat <<EOF> how are you> my name is Frank> EOF
how are you
my name is Frank</p>
</div>
<p> </p>
<p><span style="color: #ff0000"> tr</span></p>
<p>tr [OPTION]... SET1 [SET2]</p>
<p>把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,不修改原文件</p>
<p>用法1: tr SET SET2 < /PATH/FROM/SOMEFILE  </p>
<p> <img src="https://img.php.cn/upload/article/000/000/001/481c5a3f155df91e35d62ca3dc88307c-3.png" alt=""    style="max-width:90%"  style="max-width:90%"></p>
<p>用法2:tr -d SET1  <  /PATH/FROM/SOMEFILE     删除SET1中的字符,区分大小写</p>
<p> <img src="https://img.php.cn/upload/article/000/000/001/481c5a3f155df91e35d62ca3dc88307c-4.png" alt=""    style="max-width:90%"  style="max-width:90%"></p>
<p><span style="color: #ff0000">管道</span></p>
<p>连接程序,实现将前面一个命令的输出直接定向后一个程序当做输出数据流</p>
<p>COMMAND1 | COMMAND2 | COMMAND3 ...</p>
<div class="cnblogs_code"><pre class="brush:php;toolbar:false">[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

Verwenden Sie wie im obigen Beispiel den Befehl tee für die Ausgabe nach /etc/fstab und verwenden Sie die Standardeingabe als Eingabe für das nachfolgende tr.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung grundlegender Bash-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Linux: CurlNächster Artikel:Linux: Curl