Linux就该这么学 笔记(二)管道符、重定向与环境变量

第三章 管道符、重定向与环境变量

1 输入输出重定向

描述
  • 标准输入重定向(STDIN, 文件描述符为0):默认从键盘输入,也可从其他文件或 命令中输入
  • 标准输出重定向(STDOUT, 文件描述符为1):默认输出到屏幕
  • 错误输出重定向(STDERR, 文件描述符为2):默认输出到屏幕。
image-20230508102730939 image-20230508102823025
  • 对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描 述符 2 是必须要写的
  • 通过覆盖写入模式向文件中写入数据时,每 一次都会覆盖掉上一次写入的内容
输出重定向 例子
#覆盖
[root@linuxprobe~]# ls -l linuxprobe > /root/stderr.txt
[root@linuxprobe~]# ls -l linuxprobe 2> /root/stderr.txt
-rw-r--r--. 1 root root 0 Mar 1 13:30 linuxprobe

[root@linuxprobe~]# ls -l xxxxxx > /root/stderr.txt
cannot access xxxxxx: No such file or directory
[root@linuxprobe~]# ls -l xxxxxx 2> /root/stderr.txt
[root@linuxprobe~]# cat /root/stderr.txt
ls: cannot access xxxxxx: No such file or directory

#追加
[root@linuxprobe~]# ls -l linuxprobe &>> readme.txt
[root@linuxprobe~]# ls -l xxxxxx &>> readme.txt
-rw-r--r--. 1 root root 0 Mar 1 13:30 linuxprobe
cannot access xxxxxx: No such file or directory
输入重定向 例子
#把 readme.txt 文件导入给 wc -l 命令
[root@linuxprobe~]# wc -l < readme.txt
2

[root@linuxprobe~]# wc -l /etc/passwd
38 /etc/passwd
  • 这里没有了文件名称。这是因为此前使用的“wc -l /etc/passwd”是一种非常标准的“命令+参数+对象”的执行 格式,而这次的“wc -l < readme.txt”则是将 readme.txt 文件中的内容通过操作符导入到命令 中,没有被当作命令对象进行执行,因此 wc 命令只能读到信息流数据,而没有文件名称的信息。

2 管道命令符

把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

使用
  • 计算被限制登陆的用户个数
[root@linuxprobe~]# grep /sbin/nologin /etc/passwd | wc -l
40
  • 用户密码修改
[root@rhel7 ~]# passwd --stdin rusky   为rusky用户设置密码。
 
Changing password for user rusky.
 
zxcvbnm
 
passwd: all authentication tokens updated successfully.
 
[root@rhel7 ~]# echo "qwert"
 
qwert
 
[root@rhel7 ~]# echo "qwert" | passwd --stdin rusky  把echo返回的字符qwert设置为用户rusky的密码
 
Changing password for user rusky.
 
passwd: all authentication tokens updated successfully.
  • 命令 A | 命令 B | 命令 C
[root@linuxprobe~]# ps aux | grep bash | tee result.txt
root 1070 0.0 0.1 25384 2324 ? S Sep21 0:00 /bin/bash /usr/sbin/ksmtuned
root 3899 0.0 0.2 26540 5136 pts/0 Ss 00:27 0:00 bash
root 4320 0.0 0.0 12112 1112 pts/0 S+ 00:51 0:00 grep --color=auto bash
[root@linuxprobe~]# cat result.txt
root 1070 0.0 0.1 25384 2324 ? S Sep21 0:00 /bin/bash /usr/sbin/ksmtuned
root 3899 0.0 0.2 26540 5136 pts/0 Ss 00:27 0:00 bash
root 4320 0.0 0.0 12112 1112 pts/0 S+ 00:51 0:00 grep --color=auto bash

#tee命令:同时输出到屏幕和文件中

3 命令行通配符

描述

星号(*)代表匹配零个或多个字符, 问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符, 而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。

image-20230508104126800
使用
  • 匹配:硬盘文件和分区只有 3 个,sda, sda1, sda2
[root@linuxprobe~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/sda
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

[root@linuxprobe~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

[root@linuxprobe~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
[root@linuxprobe~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
  • 批量创建文件:通配符不仅可用于搜索文件或代替被通配的字符,还可以与创建文件的命令相结合, 一口气创建出好多个文件。不过在创建多个文件时,需要使用大括号,并且字段之间用逗号间隔
[root@linuxprobe~]# touch {AA,BB,CC}.conf
[root@linuxprobe~]# ls -l *.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 AA.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 BB.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 CC.conf
  • 输出指定信息
[root@linuxprobe~]# echo file{1,2,3,4,5}
file1 file2 file3 file4 file5

4 常用转义字符

4个常用转义字符
  • 反斜杠(\): 使反斜杠后面的一个变量变为单纯的字符。
  • 单引号(’ '): 转义其中所有的变量为单纯的字符串。
  • 双引号(" "): 保留其中的变量属性,不进行转义处理。
  • 反引号(``): 把其中的命令执行后返回结果。
tips
  • 是否加双引号:如果参数中出现了 空格,就加双引号;如果参数中没有空格,那就不用加双引号

5 重要的环境变量

命令在linux中执行的四个步骤
  • 第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对 路径则直接执行,否则进入第 2 步继续判断。

  • 第2步: Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名 称来替换原本的命令名称。

  • 第3步:Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部 的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继 续处理。

    • 可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令

      [root@linuxprobe~]# type echo
      echo is a shell builtin
      [root@linuxprobe~]# type uptime
      uptime is /usr/bin/uptime
      
  • 第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存 放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找

    • 对这些路径的增加和删除操作将影响到 Bash 解释器对 Linux 命令的查找
    [root@linuxprobe~]# echo $PATH
    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
    [root@linuxprobe~]# PATH=$PATH:/root/bin
    [root@linuxprobe~]# echo $PATH
    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin		
    
创建命令别名

可以用 alias 命令来创建一个属于自己的命令别名,语法格式为“alias 别名=命令”。若要 取消一个命令别名,则是用 unalias 命令,语法格式为“unalias 别名”

[root@linuxprobe~]# unalias rm
[root@linuxprobe~]# rm initial-setup-ks.cfg
环境变量
  • 在接手一台 Linux 系统后一定会在执行 命令前先检查 PATH 变量中是否有可疑的目录
  • 可以使用 env 命令来查看 Linux 系统中所有的环境变量
  • 重要环境变量
image-20230508105412306
  • 一个相同的变量会因为用户身份的不同而具有不同的值。
[root@linuxprobe~]# echo $HOME
/root
[root@linuxprobe~]# su - linuxprobe
[linuxprobe@linuxprobe~]$ echo $HOME
/home/linuxprobe
  • 自行创建变量
[root@linuxprobe~]# mkdir /home/workdir
[root@linuxprobe~]# WORKDIR=/home/workdir
[root@linuxprobe~]# cd $WORKDIR
[root@linuxprobe workdir]# pwd
/home/workdir

#这样创建变量不具备全局性,作用范围也有限,默认情况下不能被其他用户使用
[root@linuxprobe workdir]# su linuxprobe
[linuxprobe@linuxprobe~]$ cd $WORKDIR
[linuxprobe@linuxprobe~]$ echo $WORKDIR
[linuxprobe@linuxprobe~]$ exit

  • 全局变量:可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用 它
[root@linuxprobe~]# export WORKDIR
[root@linuxprobe~]# su linuxprobe
[linuxprobe@linuxprobe~]$ cd $WORKDIR
[linuxprobe@linuxprobe workdir]$ pwd
/home/workdir

#后续不使用,可用unset命令取消
[root@linuxprobe~]# unset WORKDIR
  • 变量永久生效:直接在终端设置的变量能够立即生效,但在重启服务器后就会失效,因此我们需要将变量和变量值写入到**.bashrc 或者.bash_profile 文件**中,以确保永久能使用它们。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值