打开主菜单

FAQs

">> /dev/null 2>&1" 这个代码在 shell 脚本中经常见到,是什么意思?

现在我们详细解读一下这行代码的意思:

>> /dev/null 2>&1 
  • >>

表示输出重定向

  • /dev/null

一个特殊的文件,它其实是一个特殊的伪设备文件(pseudo-devices)。

通过 ls -l /dev/null 命令,可以看到该文件的细节:

crw-rw-rw- 1 root root 1, 3 7月  16 08:51 /dev/null 

其中 crw 就表示这是一个伪设备文件,根据 wiki 文档,/dev/null 接收输入并删除输入,且不产生任何输出。它会把写入到它的所有内容都删除掉,把程序输出重定向到这个文件,就表示隐藏了输出。

所以说前面这部分表示程序产生的输出重定向到这个文件之后,都被删除了,不会有任何输出。

  • 2>&1

文件描述符

执行一个程序时,操作系统总会打开三个文件 STDIN,STDOUT 和 STDERR,无论何时打开一个文件时,操作系统返回一个非负的的文件描述符,而刚才所说的三种文件对应的文件描述符是 0,1,2。

所以,2>&1 意思就是 STDERR 重定向到 STDOUT。这里的 & 表示它后面跟的是文件描述符,而不是一个文件名(默认重定向符号 > 后面跟一个文件名)。

所以说,加上这部分以后,程序的输出包括产生的错误也都重定向到这个文件,然后都被删除,不会有任何输出。

这其实是隐藏程序输出的一种方法。

参考:https://stackoverflow.com/questions/10508843/what-is-dev-null-21

linux 中 ">" 和 ">>" 区别

> 直接把内容生成到指定文件,会覆盖源文件中的内容,还有一种用途是直接生成一个空白文件,相当于 touch 命令

>> 尾部追加,不会覆盖掉文件中原有的内容

清空文件的四种方式

> FILENAME

> FILENAME

echo > FILENAME

echo ""> FILENAME

解压windows下压缩的zip文件

unzip -O GB18030 FILENAME

查看内核版本

$ uname -r

4.13.0-37-generic

查看ubuntu版本

$ cat /etc/issue

Ubuntu 16.04.4 LTS \n \l

修改密码

passwd

搜索当前目录下包含 "hello, world" 字符串内容的文件,并且显示结果所在行

grep "hello, world" *

退出root用户

exit

查看当前登录的用户

who

如何赋予普通用户sudo权限?

1. 运行 visudo 命令编辑 /etc/sudoers,添加下面这行,给 wheel 用户组添加 sudo 权限。

Allows people in group wheel to run all commands 

%wheel ALL=(ALL) ALL

2. 然后在 wheel 组中的用户就具有 sudo 权限了,如果用户不在该用户组,就把该用户添加到该组中:

usermod -aG wheel USERNAME 

3. 检查,使用 su 命令切换到 该用户

su <username>

运行 groups 查看是否属于 wheel 组:

groups

USERNAME wheel

运行 whoami 如果输出 root,则表明有 sudo 权限:

sudo whoami

root