ホームページ >運用・保守 >Linuxの運用と保守 >基本的な bash 機能の使用方法の詳細な説明
シェルプロセスは、ユーザーが実行のために送信したコマンドを記録します
履歴を使用して以下を表示できます
[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
履歴機能をカスタマイズします
HISTSIZE: コマンド履歴の数シェルプロセスは保持できます
[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: 指定されたコマンド履歴を削除します。オフセットは指定された行数です
-r: コマンドを読み取りますファイルから履歴リストへの履歴 中
-w: 履歴リストのコマンドを履歴ファイルに追加
history #: 最新 # 個のコマンドを表示
コマンド履歴リストのコマンドを呼び出す
! #: 履歴リストの # コマンドを再度実行
!!: 前のコマンドを再度実行
! STRING: コマンド履歴リストの STRING で始まる最新のコマンドを再度実行します
前のコマンドの最後のパラメータを呼び出します
ショートカット キー: ESC を押してクリックします
または文字列:!
コマンドの記録方法を制御しますignoredups: 重複したコマンドを無視します。ignorespace: 空白文字で始まるコマンドを無視します。 : 上記の両方が同時に有効です。補完機能
コマンド補完
シェルプログラムがユーザーからコマンドの実行要求を受け取ると、一番左の文字列がコマンドとみなされますコマンド検索メカニズム:最初にPATHに基づいて内部コマンドを検索します環境変数 ディレクトリを設定し、ディレクトリ内のファイル名を左から右に 1 つずつ検索します
[root@localhost /]# echo $HISTCONTROL ignoredupsTab キーを使用して完了します
パスの補完
指定された開始パスの下で、対応するパスの下の先頭の文字列を開始パスの下の各ファイルと一つずつ一致させますディレクトリ管理コマンド
mkdir
make directory ディレクトリの作成mkdir [OPTION]... DIRECTORY...
よく使用されるオプション: -p: オンデマンドで親ディレクトリを自動的に作成します[root@localhost /]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin-v: 詳細なプロセスを表示します、詳細
[root@localhost tmp]# mkdir -p /tmp/x/y/z [root@localhost tmp]# cd /tmp/x/y/z/[root@localhost z]#-m モード: 直接権限を与えます注: パスのベース名はコマンド アクションオブジェクト、ベース名の前のパスが存在する必要があります
rmdir
空のディレクトリを削除します
空のディレクトリを削除します共通オプション:
[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’コマンドライン展開 {}: カンマ区切りのパスを指定して複数の Path に展開できます例: /tmp/{a,b} は /tmp/a /tmp/b と同等です例:/tmp/x/y1、/tmp/x/y2、/tmp/x/ y1/ の作成方法a、/tmp/x/y1/b?
[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 busya_c、a_d、b_c、b_d を作成するにはどうすればよいですか?
[root@localhost tmp]# mkdir -p /tmp/x/{y1/{a,b},y2}次のディレクトリ構造の作成方法:
[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
-L #,指定する表示するディレクトリ レベル
コマンド
bashの実行ステータス結果は、ステータス戻り値を通じてこの結果を出力します: Success: 0Failure: 1-255 コマンド実行後完了すると、ステータスの戻り値が bash に保存されます。特殊変数 $?、mkdir -p /tmp/mysysroot/{bin,etc/sysconfig/networkscripts,sbin,usr/{bin,lib,lib64,local/{bin,etc,lib,sbin},sbin},var/{cache,log,run}}quote コマンドの実行結果を引用します:
$(COMMAND)
または`COMMAND ` 強い引用符、一重引用符:
[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弱い参照、二重引用符:
[root@localhost ~]# echo '$PATH'$PATH
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
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目录下创建一个与源文件同名的文件,并复制其数据
多源复制:
如果DIRECTORY不存在,则报错
如果DIRECTORY存在:
如果DIRECTORY是非目录文件,则报错
如果DIRECTORY是目录文件,分别复制每个文件至目标目录中,并保持原名
常用选项:
-i:交互式复制
-f:强制覆盖目标文件
-r,-R:递归复制目录
-d:复制符号链接文件本身,而非指向的源文件
-a:-dR --preserve=all, archive,用于实现归档;
--preserv=
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
mv
move
移动文件,可用来重命名文件
常用选项:
-i:交互式
-f:强制覆盖文件
rm
remove
移除文件
rm [OPTION]... FILE...
常用选项:
-i:交互式移除文件
-f:强制删除文件
-r:递归删除
注意:所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)
文件名通配:是对整体文件名匹配,不是部分匹配
匹配字符:
*:匹配任意长度的任意字符
?:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符‘
[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即输入和输出设备,可用于输入的设备一般有键盘、文件系统上的常规文件、网卡等,可用于输出的设备有显示器、文件系统上的常规文件、网卡等;
程序的三种数据流:
输入的数据流:标准输入(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
显示程序的输出并将其复制到一个或多个文件中
[root@localhost tmp]# echo 'abcd' | tee /etc/fstab | tr 'ab' 'AB' ABcd [root@localhost tmp]# cat /etc/fstab abcd
上記の例と同様に、teeコマンドを使用して/etc/fstabに出力し、後続のtrの入力として標準入力を使用します。
以上が基本的な bash 機能の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。