重定向

Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为:

  • stdin(标准输入,对应于你在终端的输入)
  • stdout(标准输出,对应于终端的输出)
  • stderr(标准错误输出,对应于终端的输出)
    图片说明

文件描述符:

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

区别:
管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接

错误重定向

标准输出和标准错误都被指向伪终端的屏幕显示,但实际它们并不一样,所以我们经常看到的一个命令的输出通常是同时包含了标准输出和标准错误的结果的。
解决:

# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面
$ cat Documents/test.c hello.c >somefile  2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
$ cat Documents/test.c hello.c &>somefilehell

tee命令同时重定向多个文件

除了需要将输出重定向到文件,也需要将信息打印在终端,可使用tee

永久重定向

可以使用exec命令实现“永久”重定向。exec命令的作用是使用指定的命令替换当前的 Shell,即使用一个进程替换当前进程,或者指定新的重定向:

# 先开启一个子 Shell
$ zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$ exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么做)
$ ls
$ exit
$ cat somefile

创建输出文件描述符

shell 中有9个文件描述符

#查看当前Shell进程中打开的文件描述符
$ cd /dev/fd/;ls -Al

使用exec命令可以创建新的文件描述符:

$ zsh
$ exec 3>somefile
# 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不应该有空格,如果有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit

关闭文件描述符

如上面所打开的3号文件描述符,可以使用如下操作将它关闭:

$ exec 3>&-
$ cd /dev/fd;ls -Al;cd -

图片说明

使用 xargs 分割参数列表

作用: 将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

Linux下软件安装

apt包管理工具

APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。

  • 首先apt-get 工具会在本地的一个数据库中搜索关于 w3m 软件的相关信息,并根据这些信息在相关的服务器上下载软件安装
    # 保持本地的软件包列表是最新的
    sudo apt-get update 
    # 更新软件源
    $ sudo apt-get update
    # 升级没有依赖问题的软件包
    $ sudo apt-get upgrade
    # 升级并解决依赖关系
    $ sudo apt-get dist-upgrade
    # 不保留配置文件的移除
    $ sudo apt-get purge w3m
    # 或者 sudo apt-get --purge remove
    # 移除不再需要的被依赖的软件包
    $ sudo apt-get autoremove

apt-get 是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等

apt-get常用工具:
图片说明

apt-get常用参数:
图片说明

当自己刚知道了一个软件,想下载使用,需要确认软件仓库里面有没有,就需要用到搜索功能了,命令如下:

sudo apt-cache search softname1 softname2 softname3……

dpkg

dpkg 本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写
图片说明