0%

Linux 中每个进程维护了一个文件描述符表,如 shell 终端,默认有三个文件已打开,他们的文件描述符和文件对应关系为:

1
2
3
fd 0: /dev/stdin -> /proc/self/fd/0(前者是指向后者的软链接,下同)
fd 1: /dev/stdout -> /proc/self/fd/1
fd 2: /dev/stderr -> /proc/self/fd/2

所以在该 shell 中创建新的的文件的描述符就从3开始。

用于输入输出重定向使用的文件描述符大于9,所以安全可用的自定义文件描述符范围就是:3-9

因为 Bash 文档 里有这样一句话:

Redirections using file descriptors greater than 9 should be used with care, as they may conflict with file descriptors the shell uses internally.

下面的几个例子会分别演示

1)输入输出重定向
2)复制输入输出文件描述符
3)移动输入输出文件描述符
4)关闭文件描述符和同时读写文件
5)将已重定向的输入/输出恢复到标准输入/标准输出

阅读全文 »

原文:https://www.cnblogs.com/mahocon/p/5691348.html
本文翻译自:https://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/

术语

首先,我们了解一些术语。BIOS 和 UEFI 都是计算机的 固件 类型。BIOS 固件(主要)用于 IBM PC 兼容计算机。UEFI 的通用性更强,可用在非“IBM PC 兼容”系列的计算机上。

不存在“UEFI BIOS”。没有任何一台计算机会有“UEFI BIOS”。BIOS 不是所有 PC 固件的通用术语,它只是 PC 固件的一种特定类型。计算机中包含固件。如果你有一台 IBM PC 兼容计算机,那么固件几乎肯定就是 BIOS 或 UEFI。如果你运行的是 Coreboot,那么恭喜,你是个例外,引以为傲吧。

安全启动 (Secure Boot) 与 UEFI 不是同一个概念。请不要将这些术语混淆使用。安全启动 (Secure Boot) 实际上是 UEFI 规范的一项可选功能,于 UEFI 规范版本 2.2 引入。我们稍后会详细讨论安全启动 (Secure Boot) 到底是什么,但是目前而言,只需要记住它和 UEFI 不同即可。

UEFI 不是由微软开发的,也从来不受微软控制。它的前身和基础——EFI,是由 Intel 开发和发布的。UEFI 由 UEFI 论坛 进行管理。微软是 UEFI 论坛的成员之一。

阅读全文 »

问题

一般情况下,sh 是指向 bash 的链接。查看 bash 的手册页可知,bash 作为 sh 运行时,相当于 bash --posix,即 sh 以符合 POSIX 标准的方式来运行。

在一次使用脚本的过程中,发现脚本中 alias 命令设置的别名始终无效。后来查资料发现,bashsh 运行脚本的结果是不同的。

默认情况下,bash 运行非交互式 shell 时,是关闭 alias 别名扩展功能的,而脚本就是非交互式 shell。但是,sh 同样的情况下是开启别名扩展功能的。

解决

① 使用 sh 运行脚本。

② 在脚本文件中显式地指出开启别名扩展功能,方法:

1
2
3
4
# 在脚本的 alias 命令之前添加如下命令
# 最好是在脚本的开头位置添加
shopt -s expand_aliases
...
阅读全文 »

Git 使用指定的密钥

默认情况,Git 会使用 ~/.ssh/id_ecdsa 来登录远程仓库,比如登录 github.com。我这里使用的是 ecdsa 算法,所以是 id_ecdsa

怎么样使用指定的密钥呢?比如使用 id_ecdsa_123。创建 ssh 配置文件 config 即可:

1
2
3
4
5
6
7
8
vim ~/.ssh/config

# 配置文件内容
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ecdsa_github
IdentitiesOnly yes

配置文件的含义:

  • Host github.com:指定一个主机
  • HostName github.com:上面指定的主机的主机名
  • User git:登录该主机的用户名,如果是登录 github.com,就必须是 git
  • IdentityFile ~/.ssh/id_ecdsa_github:关键配置,这里指定了使用哪个私钥文件
  • IdentitiesOnly yes:它指示 ssh 仅使用在命令行上指定的私钥文件或在 config 文件中配置的私钥文件
阅读全文 »

Git 的三种状态

下文的所有命令都在普通用户下执行,因此有些命令前会有 $ 号,系统是 Debian 9.6,Git 版本是 git version 2.11.0。本文参考:Pro Git v2 CHS 的第1章,第2章。

三种状态

已提交(committed)、已修改(modified)、已暂存(staged)

工作区的三个概念

有三种状态,相应的就有三个概念:Git 仓库、工作目录、暂存区域

已提交对应 Git 仓库,已修改对应工作目录,已暂存对应暂存区域。

Git 的基本工作流程

① 修改文件:在工作目录中修改文件。
② 暂存文件:将文件的快照放入暂存区域。
③ 提交更新:找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git 不像其他版本管理系统,比较文件的差异并记录下来,Git 是直接记录文件的快照。因此 Git 更像是一个小型的文件系统,它把数据看作是对小型文件系统的一组快照。文件系统快照可以理解成是,对文件或目录的修改(不论是增,删,改)记录快照,下次就能恢复到原样。它恢复的信息是很全面的,不仅有文件的数据,还可以有文件或目录的元数据,比如创建时间,修改时间等等。

阅读全文 »