Linux值得学习的原因绝不仅仅是因为开源,而是因为Linux系统是一款非常优秀的产品
输入输出重定向
输入重定向:将文件输入到命令中 例: wc -l < readme.txt
输出重定向:将原本输出到屏幕上的信息输出到文件中 例: echo "linuxprobe.com" > linuxprobe.txt
我们绝大部分将会使用到输出重定向
输出重定向分类: 标准输出重定向(将正确的信息输出到屏幕上)
错误输出重定向(将错误的信息输出到屏幕上)
[root@linuxprobe ~]# touch linuxprobe [root@linuxprobe ~]# ls -l linuxprobe -rw-r--r--. 1 root root 0 Aug 5 05:35 linuxprobe (该文件存在,所以会出现正确的信息) [root@linuxprobe ~]# ls -l xxxxxx (该文件不存在,所以会出现错误的信息) ls: cannot access xxxxxx: No such file or directory
输出重定向中使用到的符号及作用
符号 作用 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据) 命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据) 命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面) 命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面) 命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
这里看到输出重定向中存在两种截然不同的行为:
清空 > :表示这一次的操作会清空之前文件中的操作 (只保留当前这一次的操作)
[root@localhost ~]# echo "welcome to linux" > linux.txt [root@localhost ~]# cat linux.txt welcome to linux [root@localhost ~]# echo "hello world" > linux.txt [root@localhost ~]# cat linux.txt hello world [root@localhost ~]#
追加 >>:表示这一次的操作会追加在原有文件内容后面
[root@localhost ~]# cat linux.txt hello world [root@localhost ~]# echo "welcome to linux" >> linux.txt [root@localhost ~]# cat linux.txt hello world welcome to linux [root@localhost ~]#
以上是标准(清空/追加)的案例,错误(清空/追加)案例基本相同
管道命令符
管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入
执行格式:“命令A | 命令B”
该命令用于在/etc/passwd文件中找到含有关键字root的位置 参数:-n 显示行号
[root@localhost ~]# cat /etc/passwd | grep -n root 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin
在设置用户密码时往往需要输入两边密码才可以重置成功,而使用管道符则一次即可 该命令表示将root用户的密码设置为linuxprobe
[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root Changing password for user root. passwd: all authentication tokens updated successfully.
命令行通配符
通配符就是通用的匹配信息的符号
比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符
中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符
[root@localhost ~]# ls /dev/sda[0-9] /dev/sda1 /dev/sda2 [root@localhost ~]#
而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。
[root@localhost ~]# ls /dev/sd[a-c] /dev/sda /dev/sdb /dev/sdc
常用转义字符
4个最常用的转义字符如下所示
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(''):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。
首先定义一个变量PRICE(默认情况写大写字母)
[root@localhost ~]# PRICE=100
通过echo输出$PRICE变量的值
[root@localhost ~]# echo "Price is $PRICE" Price is 100 [root@localhost ~]#
此时我希望输出结果时$100元,当我输入$$时,会出现当前程序的进程ID
[root@localhost ~]# echo "Price is $$PRICE" Price is 2631PRICE
这时就需要利用到转义字符 \
[root@localhost ~]# echo "Price is \$$PRICE" Price is $100 [root@localhost ~]#
重要的环境变量
变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。
新建/home/linux目录,将该目录赋值给WORKDIR,最后通过set命令查看结果
[root@localhost linux]# mkdir -p /home/linux [root@localhost linux]# WORKDIR=/home/linux [root@localhost linux]# set | grep -n WORKDIR 79:WORKDIR=/home/linux [root@localhost linux]#
这样的变量不具备全局性,只可以在本地使用,接下来使用export命令使该命令全局化并切换用户测试
[root@localhost ~]# WORKDIR=/home/linux [root@localhost ~]# echo $WORKDIR /home/linux [root@localhost ~]# export WORKDIR [root@localhost ~]# su linuxprobe [linuxprobe@localhost root]$ [linuxprobe@localhost root]$ echo $WORKDIR /home/linux [linuxprobe@localhost root]$