首页 > 系统相关 >就这么学Linux 管道符、重定向、环境变量

就这么学Linux 管道符、重定向、环境变量

时间:2024-09-09 16:57:43浏览次数:12  
标签:输出 重定向 echo 命令 ls Linux readme txt 环境变量


输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及覆盖写入与追加写入两种模式

➢ 标准输入重定向0:默认从键盘输入,也可从其他文件或命令中输入
➢ 标准输出重定向1:默认输出到屏幕
➢ 错误输出重定向2:默认输出到屏幕

touch linuxprobe
ls -l linuxprobe
ls -l xxxx

就这么学Linux 管道符、重定向、环境变量_运维


就这么学Linux 管道符、重定向、环境变量_运维_02


通过标准输出重定向将 man bash 命令原本要输出到屏幕的信息写入到文件 readme.txt 中,然后显示 readme.txt 文件中的内容。具体命令如下:

man bash > readme.txt
cat readme.txt

首先通过覆盖写入模式向 readme.txt 文件写入多行数据(该文件中已包含上一个实验的 man 命令信息)。需要注意的是,在通过覆盖写入模式向文件中写入数据时,每一次都会覆盖掉上一次写入的内容,所以最终文件中只有最后一次的写入结果:

echo "welcome to LinuxProbe1.Com" > readme.txt
echo "welcome to LinuxProbe2.Com" > readme.txt
echo "welcome to LinuxProbe3.Com" > readme.txt
echo "welcome to LinuxProbe4.Com" > readme.txt
cat readme.txt

再通过追加写入模式向 readme.txt 文件写入一次数据,然后在执行 cat 命令之后,可以看到如下所示的文件内容:

echo "Quality linux learning materials" >> readme.txt
cat readme.txt

虽然都是输出重定向技术,但是命令的标准输出和错误输出还是有区别的。例如查看当前目录中某个文件的信息,这里以 linuxprobe 文件为例。由于这个文件是真实存在的,因此使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把信息输出到了屏幕上。

ls -l linuxprobe > /root/stderr.txt
ls -l linuxprobe 2> /root/stderr.txt

如果想把命令的报错信息写入到文件,该怎么操作呢?当用户在执行一个自动化的 Shell脚本时,这个操作会特别有用,而且特别实用,因为它可以把整个脚本执行过程中的报错信息都记录到文件中,便于安装后的排错工作。接下来以一个不存在的文件进行实验演示:

ls -l xxxxx > /root/stderr.txt
ls -l xxxx 2> /root/stdeerr.txt
cat /root/stderr.txt

还有一种常见情况,就是我们想不区分标准输出和错误输出,只要命令有输出信息则全部追加写入到文件中。这就要用到&>>操作符了:

ls -l linuxprobe &>> readme.txt
ls -l xxxxx &>> readme.txt

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把 readme.txt 文件导入给 wc -l 命令,统计一下文件中的内容行数:

wc -l < readme.txt
wc -l /etc/passwd

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

管道命令符

➢ 找出被限制登录用户的命令是 grep /sbin/nologin /etc/passwd;
➢ 统计文本行数的命令则是 wc–l。
现在要做的就是把 grep 搜索命令的输出值传递给 wc 统计命令,即把原本要输出到屏幕的用户信息列表再交给 wc 命令作进一步的加工,因此只需要把管道符放到两条命令之间即可,具体如下:

grep /sbin/nologin/etc/passwd | wc -l

比如用翻页的形式查看/etc 目录中的文件列表及属性信息(这些内容默认会一股脑儿显示到屏幕上,根本看不清楚):

ls -l /etc/ | more

在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的–stdin 参数相结合,可以用一条命令来完成密码重置操作:

echo "linuxprobe" | passwd --stdin root

在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的–stdin 参数相结合,可以用一条命令来完成密码重置操作:

ps aux | grep bash

如果需要将管道符处理后的结果既输出到屏幕,又同时写入到文件中,则可以与 tee 命令结合使用。

ps aux | grep bash | tee result.txt

命令行的通配符

批量查看所有硬盘文件的相关权限属性,有一种实现方式是下面这样的:

ls -l /dev/sda
ls -l /dev/sdal
ls -l /dev/sad2
ls -l /dev/sda3

顾名思义,通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。Linux 系统中的通配符及含义如表所示(类似于python中的正则表达式)

就这么学Linux 管道符、重定向、环境变量_linux_03

来匹配所有在/dev 目录中且以 sda开头的文件:

ls -l /dev/sda*

如果只想查看文件名以 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息,这时就需要用到问号来进行通配了:

ls -l /dev/sda?

除了使用[0-9]来匹配 0~9 之间的单个数字,也可以用[135]这样的方式仅匹配这 3 个指定数字中的一个;若没有匹配到数字 1 或 2 或 3,则不会显示出来:

ls -l /dev/sda[0-9]
ls -l /dev/sda[135]

搜索/etc/目录中所有以.conf 结尾的配置文件有哪些:

ls -l /etc/*.conf

通配符不仅可用于搜索文件或代替被通配的字符,还可以与创建文件的命令相结合,一口气创建出好多个文件。不过在创建多个文件时,需要使用大括号,并且字段之间用逗号间隔:

touch {AA, BB, CC}.conf
ls -l *.conf

使用通配符还可以输出一些指定的信息:

echo file{1,2 3,4,5}

常用的转义字符

4 个最常用的转义字符如下所示。
➢ 反斜杠(\ ):使反斜杠后面的一个变量变为单纯的字符。
➢ 单引号(‘’) :转义其中所有的变量为单纯的字符串。
➢ 双引号(" "):保留其中的变量属性,不进行转义处理。
➢ 反引号(` `):把其中的命令执行后返回结果。

先定义一个名为 PRICE 的变量并赋值为 5,然后输出以双引号括起来的字符串与变量信息:

PRICE=5
echo "Price is $PRICE"

echo "Price is $$PRICE"

echo "Price is \$$PRICE"

而如果只需要某个命令的输出值,可以像`命令`这样,将命令用反引号括起来,达到预期的效果。例如,将反引号与 uname -a 命令结合,然后使用 echo 命令来查看本机的 Linux 版本和内核信息:

echo `uname -a`

反斜杠和反引号的功能比较有特点,同学们一般不会犯错,但对于什么时候使用双引号却容易混淆,因为在大多数情况下好像加不加双引号,效果都一样:

echo AA B CC
echo "AA BB CC"

两者的区别在于用户无法得知第一种执行方式中到底有几个参数。是的,不能确定!因为有可能把“AA BB CC”当作一个参数整体直接输出到屏幕,也有可能分别将 AA、BB 和CC 输出到屏幕。而且,就算摸清了 echo 命令处理参数的机制,在使用其他命令时依然存在这种情况。

这里给大家总结一个简单小技巧,虽然可能不够严谨,但绝对简单:如果参数中出现了空格,就加双引号;如果参数中没有空格,那就不用加双引号。

重要的环境变量

在 Linux 系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。

ls
rm anaconda-ks.cfg

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

将当前 rm 命令所被设置的别名取消掉,再删除文件试试:

unalias rm
rm initial -setup-ks.cfg

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

type echo
type uptime

PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。

echo $PATH
PATH = $PATH:/root/bin
echo $PATH

就这么学Linux 管道符、重定向、环境变量_输出重定向_04


因此,一个相同的变量会因为用户身份的不同而具有不同的值。例如,使用下述命令来查看 HOME 变量在不同的用户身份下都有哪些值

echo $HOME
su - linuxprobe

其实变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量来满足工作需求。例如,设置一个名称为 WORKDIR 的变量,方便用户更轻松地进入一个层次较深的目录:

mkdir /home/workdir
WORKDIR=/home/workdir
cd $WORKDIR
pwd

但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用:

su linuxprobe

如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了:

export WORKDIR
su linuxprobe

后续要是不使用这个变量了,则可执行 unset 命令把它取消掉:

unset WORKDIR

使用什么命令可以把名为 LINUX 的一般变量转换成全局变量?

答:export LINUX。


标签:输出,重定向,echo,命令,ls,Linux,readme,txt,环境变量
From: https://blog.51cto.com/guog/11961731

相关文章

  • 3、Linux概述
    为什么要学习Linux网络基础:在使用网络的程序中,几乎都会存在一个服务器。操作系统选择:大多数服务器使用的是Linux操作系统。历史背景1940年代ENIAC:世界上公认的第一台计算机,无操作系统,依靠穿孔卡片进行操作。1950年代计算机技术发展迅速,涵盖内存读取、编程语言引......
  • 4、Linux的安装
    VMware安装KaliLinux详细教程参考链接:CSDN教程什么是虚拟机?虚拟机是一种软件模拟的计算机环境,允许在单一物理设备上运行多个操作系统。如何在一台电脑上安装多个操作系统?通过使用虚拟化技术,可以在一台电脑上安装多个操作系统。这通常借助虚拟机软件实现。虚拟机与物理机......
  • Linux top 命令详解
    Linuxtop命令详解主要功能和用途实时监控:提供一个实时的、动态的视图,展示系统当前的状态。进程管理:允许用户查看系统中各个进程的运行状态。资源监控:CPU使用情况:监控CPU的总体使用率、用户空间占用率、系统空间占用率等。内存使用情况:展示物理内存和交换空间(swap)的使用......
  • linux 清空文件内容的方式
    一、通过重定向来清空文件内容 ->通过shell重定向null到指定文件即可>access.log->重定向:或true到指定文件:>access.logtrue>access.log二、使用cat/cp/dd使用工具和/dev/null设备来清空文件内容->可以使用cat命令查看/dev/null文件的内容,然后重定向输出到......
  • 就这么学Linux 编写Shell脚本
    编写Shell脚本Shell脚本命令的工作方式有下面两种➢交互式:用户每输入一条命令就立即执行➢批处理:由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令.编写简单脚本当前系统已经默认使用Bash作为命令行终端解释器了echo$SHELL如果想查看当前所在工作......
  • Linux 基础命令
    Linux基础命令优秀教程1、史上最全的Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了2、10分钟让你掌握Linux常用命令(+3万+++收藏)3、Linux常用命令大全4、着重推荐⭐⭐⭐Linux命令大全(手册)文件和目录操作ls:列出目录内容cd:切换目录pwd:显示当前工作目录mkdir:创建新目录cp......
  • 就这么学Linux 常用系统工作命令
    常用系统工作命令快捷键1、man2、echo3、date4、timedatectl5、reboot6、poweroff7、wget8、ps9、pstree10、top11、nice12、pidof13、kill14、killall快捷键tab:自动补全ctrl+C:终止进程ctrl+D:键盘输入结束CTRL+L:清屏1、manman命令中得信息结构2、echoecho命令用于在终端......
  • 【Linux】vim关闭终端的时候,忘记退出vim怎么办
    有些时候经常是关闭终端,但是忘记退出vim编辑的文本,每次登陆的时候会提示这个错误 其实很简单,在该文本的路径下,有一个隐藏文件叫.xxx.txt.swp文件(xxx就是你退出忘记关闭的文件名)、如果没找到的话,用ls-a查看就能看到这个文件就是罪魁祸首,删掉他就可以了rm-f.666.txt.swp......
  • 常用的linux命令以及详解
    Linux系统中包含了大量的命令,这些命令是用户与系统交互的主要方式。以下是一些常用的Linux命令及其详细解释:1.文件和目录操作ls:列出目录内容。ls:列出当前目录的文件和子目录。ls-l:以长格式列出文件和目录,包括权限、所有者、大小和修改时间。ls-a:显示所有文件,包括隐藏文......
  • linux系统usb设备的自动挂载、自动卸载(udev-media-automount)
    不推荐通过编辑/etc/fstab文件挂载方式,因为一旦拔掉硬盘或者更换硬盘后,系统就启动不起来了。这里推荐使用udev-media-automount开源网址: https://github.com/Ferk/udev-media-automount1、下载软件包:cd/目录,进入某个目录下,然后通过一下命令下载或者直接下载解压拷贝进去......