screen用法总结

screen 进入screen模式
C-a c 在当前screen下建立新的窗口
exit 退出当前窗口,如果它是此screen的唯一窗口时,此screen也将完全退出。
C-a d 暂时断开screen会话
screen -ls 查看有哪些screen。
screen -r id 打开编号为id的screen窗口。
C-a w 显示所有窗口列表
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口(与C-a n相对)

最近在学习TCP/IP,从网上下载了《TCP/IP详解》的电子书。电子书是分章节的若干个PDF文件,每章一个文件,文件名是如下面的文件1所示。

文件1:name.txt

01.pdf
02.pdf
03.pdf
04.pdf
05.pdf
……
……
……

从这些文件名中看不出每个文件的内容是什么。还好下载文件里里面有个目录文件,含有本书的详细目录,如下所示:
……
……
第3章 IP:网际协议
3.1 引言
3.2 IP首部
3.3 IP路由选择
第4章 ARP:地址解析协议
4.1 引言
4.2 一个例子
4.3 ARP高速缓存
……
……

我想通过这个目录文件把文件名转换成如下所示的结构:

想转换成的文件2:result.txt
01概述.pdf
02链路层.pdf
03IP网际协议.pdf
04ARP地址解析协议.pdf
05RARP逆地址解析协议.pdf

为了达成这个目的,第一步是把目录文件精简成如下所示的chapter.txt
可以利用命令grep -oP ‘(?<=(章)) .*' 目录.txt > chapter.txt

-o是指只显示匹配的部分。
-P是利用PERL的正则表达式形式。
(?<=)是后向匹配符号。 生成的文件如下所示: 文件3:chapter.txt 概述 链路层 IP网际协议 ARP地址解析协议 RARP逆地址解析协议 …… …… 再用awk命令处理这两个文件,以形成最后的结果(最重要的一个步骤): 命令如下: awk 'BEGIN{OFS=FS="."} NR==FNR{a[NR]=$0}NR>FNR{$1=$1 a[FNR];print}' chapter.txt name.txt > result.txt

首先设定域分隔符OFS=FS="."
NR:当前记录数。
FNR:同NR,但相对于当前文件。
首先单独扫描第一个文件chapter.txt,利用条件NR==FNR,是if条件语句的简写形式。也可写成{if(NR==$0) a[NR]=$0}.
之后单独扫描第二个文件name.txt,利用条件NR>FNR。
字符串连接直接用空格即可,即$1=$1 a[FNR]。如果用加号的话,系统会把字符串转换成数值后再进行数值的加减。
生成的文件是unix格式,要想在windows下正常显示,可以使用命令unix2dos result.txt.

最后利用TotalCommander软件的文件批量重命名中的“从文本文件中导入文件名”功能,将result.txt文件加载成电子书目录下的文件名,至此,大功告成。

我们按几下命令操作顺序新建4个文件:

touch a:新建一个空文件a
ln a ha: 建立a的一个硬链接文件ha
ln -s a sa:建立a的一个符号链接文件sa
ln -s sa ssa:建立sa的一个符号链接文件ssa

ll -i后显示如下:
9389954 -rw-rw-r-- 2 wqm wqm 0 04-09 20:28 a
9389954 -rw-rw-r-- 2 wqm wqm 0 04-09 20:28 ha
9389973 lrwxrwxrwx 1 wqm wqm 1 04-09 20:29 sa -> a
9389974 lrwxrwxrwx 1 wqm wqm 2 04-09 20:29 ssa -> sa

从上图可以得知以下信息:
a,ha的i-节点号相同,为9389954,表明是同一个文件,文件大小也相同,都是0.
sa,ssa,a的i-结点编号都不同,表明他们是不同的文件。它们都过文件名建立联系。sa的文件大小就是文件a的文件名的长度,为1.ssa的情况类似。
修改a文件,ha也随之变化。sa本身不变,只是它们指向的文件发生了变化。
删除文件a,只是将链接数减1,并未实际上删除此文件。ha不发生变化。而删除a后,sa与ssa的文件名在终端中会闪烁显示,表明它们所指向的文件不见了,此时cat ha命令会正常显示ha的内容。而cat sa或cat ssa则显示:没有那个文件和目录。而实际上,文件a的克隆体ha还是存在的,但是硬链接却发现不了这一点,直接说找不到文件。可见硬链接的智商程度还是较低的,它只认文件名而已。

Linux重定向到文件小结

将标准输出重定向到文件要注意以下三个概念:

标准输入、标准输出以及错误输出分别对应于文件描述符0、1、2.

内核总是使用最低可用文件描述符。

文件描述符集合通过exec调用传递,且不会改变。

较新的博文 较旧的博文 主页