网站统计功能设计,家具设计,wordpress压缩包,如果一个网站没有备案1. 输入输出重定向
在linux工作必须掌握的命令一文中#xff0c;我们已经掌握了几乎所有基础常用的Linux命令#xff0c;那么接下来的任务就是把多个命令适当的组合到一起#xff0c;使其协同工作#xff0c;会更高效的处理数据#xff0c;做到这一点就必须搞清楚命令的输…1. 输入输出重定向
在linux工作必须掌握的命令一文中我们已经掌握了几乎所有基础常用的Linux命令那么接下来的任务就是把多个命令适当的组合到一起使其协同工作会更高效的处理数据做到这一点就必须搞清楚命令的输入重定向和输出重定向的原理。
简而言之输入重定向就是把文件导入到命令中而输出重定向则是指把原本输出到屏幕的数据信息写入到指定文件中。在日常工作中相较于输入重定向输出重定向的频率更高所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术以及清空写入与追加写入两种模式。
标准输入重定向STDIN,文件描述符为0默认从键盘输入也可以从其他文件或命令输入。标准输出重定向STDOUT,文件描述符为1默认输出到屏幕。错误输出重定向STDERR,文件描述符为2默认输出到屏幕。
比如我们分别查看两个文件的属性信息其中第二个文件时不存在的虽然针对这两个文件的操作都分别会在屏幕上输出一些数据信息但这两个操作的差异其实很大
[rootroot test]# ls -l test1.txt
-rw-r--r--. 1 root root 8 1月 22 17:10 test1.txt
[rootroot test]# ls -l test2.txt
ls: 无法访问test2.txt: 没有那个文件或目录在上述命令中名为test1.txt文件是存在的输出的是该文件的一些权限、所有者、所属组、文件大小以及修改时间等信息这也是该命令的标准输出信息而名为test2.txt文件是不存在的因此在执行ls 命令后显示的报错提示信息也是该命令的错误输出信息。那么要想把原本输出到屏幕上的数据转而写入到文件当中就要区别对待这两种输出信息。
对于输入重定向来讲用到的符号及其作用如表
符号输入重定向符号作用命令 文件将文件作为命令的标准输入命令 文件从标准输入中读入直到遇见分解符才停止命令 文件1 文件2将文件1作为命令的标准输入并将标准输出到文件2
对于输出重定向来讲用到的符号以及作用如下表
符号输出重定向符号以及作用命令 文件将标准输出重定向到一个文件中清空原有文件的数据命令 2 文件将错误输出重定向到一个文件中清空原有文件的数据命令 文件将标准输出重定向到一个文件中 追加到原有内容的后面命令 2 文件将错误输出重定向到一个文件中 追加到原有内容的后面命令 文件 2 1 或 命令 文件将标准输出与错误输出共同写入到文件中追加到原有内容的后面
对于重定向中的标准输出模式可以省略文件描述符1 不写而错误输出模式的文件描述 2是必须要写的。我们先来小试牛刀。通过标准输出重定向将man bash 命令原本要输出到屏幕的信息写入到readme.txt中然后显示readme.txt文件中的内容。具体命令如下 有没有感觉很方便呢我们接下来尝试输出重定向技术中的覆盖写入与追加写入这2种不同模式带来的变化。首先通过覆盖写入模式向readme.txt文件写入一行数据然后再通过追加写入模式向文件再写入一次数据其命令如下
[rootroot test]# echo welcome to china! readme.txt
[rootroot test]# echo china is very beautiful! readme.txt在执行cat命令之后可以看到如下所示的文件内容
[rootroot test]# cat readme.txt
welcome to china!
china is very beautiful!虽然都是输出重定向技术但是不同命令的标准输出和错误输出还是有区别的。例如查看当前目录中某个文件的信息这里以readme.txt为例因为这个文件是真实存在的因此使用标准输出即可将原本要输出到屏幕的信息写入到文件中而错误的输出重定向则依然把信息输出到了屏幕上。 如果想把命令的报错信息输出写入到文件该怎么操作呢当用户在执行一个自动化的Shell脚本时这个操作会特别有用因为它把整个脚本执行过程中的报错信息都记录到了文件中便于安装后的排错工作接下来我们以一个不存在的文件进行演示 [rootroot test]# ls -l xxx
ls: 无法访问xxx: 没有那个文件或目录
[rootroot test]# ls -l xxx test4.txt
ls: 无法访问xxx: 没有那个文件或目录
[rootroot test]# ls -l xxx 2 test4.txt
[rootroot test]# cat test4.txt
ls: 无法访问xxx: 没有那个文件或目录输入重定向相对来说有些冷门在工作中遇到的概率会小一点输入重定向的作用是把文件直接导入到命令中接下来使用输入重定向把readme.txt文件导入给wc -l命令统计一下文件中的内容行数。
[rootroot test]# wc -l readme.txt
3109 readme.txt上述命令实际上等同于cat readme.txt | wc -l 管道符命令的组合 2. 管道命令符
管道命令符的作用可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是最后一个命令的标准输入”我们通过匹配关键词/sbin/nologin找出了所有被限制登录的用户。
找出被限制登录用户的命令时 grep “/sbin/nologin” /etc/passwd;统计文本行数的命令则是 wc-l
把这两条命令合并为一条就是
[rootroot test]# grep /sbin/nologin /etc/passwd | wc -l
33这个管道符就像一个法宝我们可以将它套用到其他不同的命令上比如用翻页的形式查看 /etc 目录中文件列表及属性信息。
[rootroot test]# ls -l /etc | more
总用量 1036
-rw-r--r--. 1 root root 16 8月 23 2022 adjtime
-rw-r--r--. 1 root root 1529 4月 1 2020 aliases
-rw-r--r--. 1 root root 12288 8月 23 2022 aliases.db
drwxr-xr-x. 2 root root 236 8月 23 2022 alternatives
-rw-------. 1 root root 541 8月 9 2019 anacrontab
-rw-r--r--. 1 root root 55 8月 8 2019 asound.conf
drwxr-x---. 3 root root 43 8月 23 2022 audisp
drwxr-x---. 3 root root 83 8月 23 2022 audit
drwxr-xr-x. 2 root root 68 1月 9 2023 bash_completion.d
-rw-r--r--. 1 root root 2853 4月 1 2020 bashrc
drwxr-xr-x. 2 root root 6 10月 2 2020 binfmt.d
-rw-r--r--. 1 root root 37 10月 23 2020 centos-release
-rw-r--r--. 1 root root 51 10月 23 2020 centos-release-upstream
drwxr-xr-x. 2 root root 6 10月 13 2020 chkconfig.d
-rw-r--r--. 1 root root 1108 8月 8 2019 chrony.conf
-rw-r-----. 1 root chrony 481 8月 8 2019 chrony.keys
drwxr-xr-x. 2 root root 25 1月 9 2023 containerd
--More--3. 命令行通配符
大家都有遇到提笔忘记的尴尬有时候明明 一个文件名称就在嘴边但就是想不起来如果记得一个文件的开头几个字母想遍历找出所有以这个关键词开头的文件该怎么操作呢又比如假设想要批量批量查看所有硬盘文件的相关权限属性一种方式是这样的 [rootroot test]# ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 1月 21 08:42 /dev/sda
[rootroot test]# ls -l /dev/sda1
brw-rw----. 1 root disk 8, 1 1月 21 08:42 /dev/sda1
[rootroot test]# ls -l /dev/sda2
brw-rw----. 1 root disk 8, 2 1月 21 08:42 /dev/sda2
[rootroot test]# ls -l /dev/sda3
brw-rw----. 1 root disk 8, 3 1月 21 08:42 /dev/sda3
[rootroot test]# ls -l /dev/sda4
ls: 无法访问/dev/sda4: 没有那个文件或目录幸亏我的硬盘文件和分区只有4个要是有几百个估计要花一天时间来忙这个事情了由此可见这种方式的效率确实。比如这些硬盘设备文件都是以sda开头并且存放到了/dev目录中这样一来即使我们不知道硬盘的分区编号和具体分区的个数也可以使用通配符来搞定。顾名思义通配符就是通用的匹配信息的符号比如星号*代表匹配零个或多个字符问号代表匹配单个字符中括号内加上数字[0-9]代表匹配0~9之间的的单个数字字符而中括号内加上字母[abc] 则是代表匹配a、b、c三个字符中任意一个字符其实就是编程中正则表达式。
[rootroot test]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 1月 21 08:42 /dev/sda
brw-rw----. 1 root disk 8, 1 1月 21 08:42 /dev/sda1
brw-rw----. 1 root disk 8, 2 1月 21 08:42 /dev/sda2
brw-rw----. 1 root disk 8, 3 1月 21 08:42 /dev/sda3
4. 常用转义字符
为了能够更好的理解用户的表达Shell解释器还提供了特别丰富的转义字符来处理输入的特殊数据。 4个最常用的转义字符如下所示 反斜杠\是反斜杠后面的一个变量变为单纯的字符串。 单引号‘’转义其中所有的变量为单纯的字符串。 双引号“”保留其中的变量属性不进行转义处理。 反引号把其中的命令执行后返回结果。
我们先定义一个名为PRICE的变量并赋值为5然后输出以双引号括起来的字符串与变量信息
[rootroot test]# PRICE5
[rootroot test]# echo Price is $PRICE
price is 5接下来我们希望能够输出“Price is $5” ,即价格是5美元的字符串内容但碰巧美元符号与变量提取符号合并后的$$作用是显示当前程序的进程ID号码于是命令执行后输出的内容并不是我们所预期的
[rootroot test]# [rootroot test]# echo price is $$PRICE
price is 7142PRICE要想让第一个“$” 乖乖的作为美元符号那么就需要反斜杠\来进行转义将这个命令提取符转义称单纯的文本去除其特殊功能。
[rootroot test]# [rootroot test]# echo price is \$$PRICE
price is $5而如果只需要某个命令的输出值时可以像“命令”这样将命令用反引号括起来达到预期效果。例如将反引号与uname -a命令结合然后使用echo命令来查看本机的Linux版本和内核信息
[rootroot test]# echo uname -a
Linux root 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux5. 重要的环境变量
变量是计算机系统用于保存可变值的数据类型。在Linux系统中变量名称一般都是大写的这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。Linux系统中环境变量是用来定义系统运行环境的一些参数比如每个用户不同的家目录、邮件存放位置等。 在Linux系统中一切都是文件Linux命令也不例外那么在用户执行了一条命令之后Linux系统中到底发生了什么事情呢简单来说命令在Linux中的执行分为4个步骤。 第一步 判断用户是否以绝对路径或相对路径的方式输入命令如/bin/ls,如果是的话则直接执行。 第二步 Linux系统检查用户输入的命令是否为“别名命令”即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名格式为 “alias 别名命令” 。若要取消一个命令别名则是用unalias命令格式为“unalias 别名”。我们之前使用rm 命令删除文件时Linux系统都会要求我们再确认是否执行删除操作其实这就是Linux系统为了防止用户误删文件而特意设置的rm别名命令。 [rootroot test]# alias rm
alias rmrm -i
第三步 Bash解释器判断用户输入的是内部命令还是外部命令。内部命令时解释器内部的命令会被直接执行而用户在绝大部分时间输入的是外部命令这些命令交由步骤4处理。可以使用“type 命令名称” 来判断用户输入的命令时内部命令还是外部命令。
第四步 系统在多个路径中查找用户输入的命令文件而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”作用是告诉Bash解释器待执行的命令可能存放的位置然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量每个路径值之间用冒号隔开对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
[rootroot test]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/data/jdk1.8.0_341/bin:/home/data/redis/bin:/home/data/kafka_2.12-3.0.0/bin:/root/bin
Linux系统中最重要的环境变量
变量名称作用HOME用户的主目录SHELL用户在使用的Shell解释器名称HISTSIZE输出的历史命令记录条数HISTFILESIZE保存的历史命令记录条数MAIL邮件保存路径LANG系统语言、语系名称RANDOM生成一个随机数字PSIBash解释器的提示符PATH定义解释器搜索用户执行命令的路径EDITOR用户默认的文本编辑器