1.输出重定向
命令-->文件
>标准信息输出 将标准输出重定向到一个文件中(清空原有文件的数据)
将ls-l的内容输入到 haha文件中,如果haha里面有内容会清空
[root@localhost ~]# ls -l > haha
[root@localhost ~]# cat haha
total 2097176
drwxr-xr-x. 2 root root 6 Jan 19 11:41 123
drwxr-xr-x. 2 root root 6 Jan 19 11:24 2
-rw-r--r--. 1 root root 20 Jan 19 18:18 20Z_file
drwxr-xr-x. 2 root root 6 Jan 19 11:24 3
drwxr-xr-x. 2 root root 6 Jan 19 11:24 4
drwxr-xr-x. 2 root root 6 Jan 19 11:19 456
drwxr-xr-x. 2 root root 6 Jan 19 11:24 5
-rw-------. 1 root root 1376 Jan 15 23:29 anaconda-ks.cfg
-rw-r--r--. 1 root root 512 Jan 19 18:25 backup
-rw-r--r--. 1 root root 15 Jan 19 10:56 b.txt
-rw-r--r--. 1 root root 2147479552 Jan 19 18:31 ceshi
-rw-r--r--. 1 root root 21 Jan 19 11:01 c.txt
drwxr-xr-x. 2 root root 6 Jan 15 23:49 Desktop
2> 错误信息输出 将错误输出重定向到一个文件中(清空原有文件的数据)
因为xixi文件存在会报错,使用2>重定向输出到111
[root@localhost ~]# ls -l xixi 2> 111
[root@localhost ~]# cat 111
ls: cannot access 'xixi': No such file or directory
使用场景:安装脚本时,如果出现安装依赖等报错,可以输出出来,不看安装过程
>>标准信息输出 将标准输出重定向到(追加)一个文件中(不清空原有文件的数据)
[root@localhost ~]# ls -l >> haha
[root@localhost ~]# ls -l >> haha
[root@localhost ~]# ls -l >> haha
[root@localhost ~]# wc -l haha
161 haha
2>> 错误信息输出 将错误输出重定向到(追加)一个文件中(不清空原有文件的数据)
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# wc -l 111
6 111
命令 >> 文件2>&1 或者 &>> 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
[root@localhost ~]# ls -1 &>hoho
[root@localhost ~]# ls -l anaconda-ks.cfg &>>hoho
[root@localhost ~]#
2.输入重定向
命令 <--文件
< 将文件作为命令的标准输入
[root@localhost ~]# wc -l anaconda-ks.cfg
44 anaconda-ks.cfg
[root@localhost ~]# wc -l < anaconda-ks.cfg
44
则是将anaconda-ks.cfg 文件中的内容通过操作符导入到命令 中,没有被当作命令对象进行执行,因此wc命令只能读到信息流数据,而没有文件名称的信 息。
<< 分界 符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
3.tee
tee 命令可以将标准输入重定向到一个或多个文件,并将其复制到标准输出。这个命令通常用于同时在屏幕上显示输出并将其保存到一个或多个文件。
-a
:追加到文件而不是覆盖;-i
:忽略中断信号;-p
:使用原始输出。
例如,以下命令会将 ls
命令的输出同时显示在屏幕上并保存到 file.txt
文件中:
ls | tee file.txt
如果需要将输出追加到文件末尾,可以使用 -a
选项:
ls | tee -a file.txt
4.管道命令符(任意门)
把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入
管道命令符能在一个命令组合中使用多次。我们完全可以 这样使用:“命令A | 命令B | 命令C”
查看几个用户可以登录服务器
[root@localhost ~]# grep /bin/bash /etc/passwd | wc -l
2
bin/bash 正常登录服务器
sbin/nologin 登录服务器不能
用翻页的形式查看/etc目录中的文件列表及属性信息
[root@localhost ~]# ll /etc | more
drwxr-xr-x. 2 root root 36 Jan 15 23:25 cron.daily
-rw-r--r--. 1 root root 0 Oct 2 2018 cron.deny
drwxr-xr-x. 2 root root 22 Jan 15 23:23 cron.hourly
drwxr-xr-x. 2 root root 6 Aug 12 2018 cron.monthly
-rw-r--r--. 1 root root 451 Aug 12 2018 crontab
drwxr-xr-x. 2 root root 6 Aug 12 2018 cron.weekly
drwxr-xr-x. 5 root root 65 Jan 15 23:23 crypto-policies
-rw-------. 1 root root 0 Jan 15 23:21 crypttab
-rw-r--r--. 1 root root 1602 Sep 10 2018 csh.cshrc
-rw-r--r--. 1 root root 841 Sep 10 2018 csh.login
drwxr-xr-x. 4 root lp 4096 Jan 20 10:59 cups
drwxr-xr-x. 2 root root 34 Jan 15 23:25 cupshelpers
drwxr-xr-x. 4 root root 78 Jan 15 23:23 dbus-1
--More--
通过把管道符和passwd命令的--stdin参数相结合,可以用一条命令 来完成密码重置操作:
[root@localhost ~]# useradd xiaoming
[root@localhost ~]# echo "xiaoming" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
搜索与bash有关的进程信息:
[root@localhost ~]# ps -aux | grep bash
root 1073 0.0 0.1 25384 2400 ? S 10:58 0:00 /bin/bash /usr/sbin/ksmtuned
root 2423 0.0 0.2 26432 5060 pts/0 Ss 11:09 0:00 -bash
root 2446 0.1 0.1 12832 3252 ? Ss 11:09 0:00 bash -c while true; do sleep
将显示系统中所有与bash相关的进程信息,并同时将输出到屏幕和文件中:
[root@localhost ~]# ps -aux | grep bash | tee A.txt
5.通配符
* 任意字符
? 单个任意字符
[a-z] 单个小写字母
[A-Z] 单个大写字母
[a-Z] 单个字母
[0-9] 单个数字
[[:alpha:]] 任意字母
[[:upper:]] 任意大写字母
[[:lower:]] 任意小写字母
[[:digit:]] 所有数字
[[:alnum:]] 任意字母加数字
[[:punct:]] 标点符号
来匹配所有在/dev目录中且以sda 开头的文件:
[root@localhost ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Jan 20 10:57 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2
查看文件名以 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息,
[root@localhost ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2
使用[0-9]来匹配 0~9 之间的单个数字
[root@localhost ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2
可以用[135]这样的方式仅匹配这 3 个指 定数字中的一个;
[root@localhost ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
通配符不一定非要放到最后面,也可以放到前面
搜索/etc/ 目录中所有以.conf结尾的配置文件
[root@localhost ~]# ls -l /etc/*.conf
-rw-r--r--. 1 root root 55 Feb 1 2019 /etc/asound.conf
-rw-r--r--. 1 root root 25696 Dec 12 2018 /etc/brltty.conf
-rw-r--r--. 1 root root 1083 Apr 4 2018 /etc/chrony.conf
-rw-r--r--. 1 root root 1174 Aug 12 2018 /etc/dleyna-server-service.conf
-rw-r--r--. 1 root dnsmasq 26843 Aug 12 2018 /etc/dnsmasq.conf
-rw-r--r--. 1 root root 117 Jan 16 2019 /etc/dracut.conf
-rw-r--r--. 1 root root 20 Aug 12 2018 /etc/fprintd.conf
单次创建多个文件时,需要使用大括号,并且字段之间用逗 号间隔:
[root@localhost ~]# touch {AA,BB,CC}.conf
[root@localhost ~]# ls -l *.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 AA.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 BB.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 CC.conf
也可以输出一些指定的信息:
[root@localhost ~]# echo txt{1,2,3}
txt1 txt2 txt3
6.转义字符
Shell解释器还提供了特别丰富的转义字符来处理输入 的特殊数据。
\ :使反斜杠后面的一个变量变为单纯的字符。
' ':转义其中所有的变量为单纯的字符串。
" " :保留其中的变量属性,不进行转义处理。
` ` :把其中的命令执行后返回结果。
规范:变量大写,命令小写
输出以双引号括起来的字符串与变 量信息:
[root@localhost ~]# PRICE=5
[root@localhost ~]# echo "price is $PRICE"
price is 5
使用反斜杠(\)来进行转义,将 这个命令提取符转义成单纯的文本,去除其特殊功能
第一个$符经过\转义,变成了单纯的字符,第二个$符和后面的PRICE构成变量名
[root@localhost ~]# echo "price is \$$PRICE"
price is $5
[root@localhost ~]#
如果只需要某个命令的输出值,可以像`命令`这样,将命令用反引号括起来,达到预期的效果
将反引号与uname -a命令结合,然后使用echo命令来查看本机的Linux版 本和内核信息:
[root@localhost ~]# echo `uname -a`
Linux localhost.Trick 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
如果参数中出现了 空格,就加双引号;如果参数中没有空格,那就不用加双引号。