shell脚本学习指南[四](Arnold Robbins & Nelson H.F. Beebe著)

2019-09-23 09:42:05丽君

接下来的9个字符,每三个是一组,报告所有组的权限,r表示可读,w表示可写,x表示可执行。前三个是拥有者选前,中间三个是用户所在组的权限,最后三个是其他人的权限。
第二栏包含连接计数。第三四栏表示所有者和所属组。第五栏是字节单位大小。最后是时间和文件(夹)名。

书中给了一个命令od 说显示真是的文件名,ls | od -a -b ,尝试了一下,完全看不懂输出内容。貌似是以nl(八进制012)做分隔符,然后罗列处来文件名的样子。如果文件名有汉字,显示会是一些符号。各种不懂。

书中用一节说使用touch更新修改时间,并说有时时间戳是有意义的,但内容则否。常见例子是用于锁定文件,以指出程序已在执行中,不应该启动第二个实例。另一用途则为记录文件的时间戳,供日后与其他文件对照用。touch默认(-m) 操作会改变文件的最后修改时间,也可以使用-a选项改变文件的最后访问时间。也可以搭配-t选项修改时间,方式是加上[[CC]YY]MMDDHHMM[.SS]形式的参数,世纪、公元年和秒数是可选项,例如:
$ touch -t 201201010000.00 date #建立一个文件设定时间戳
touch还提供-r选项,复制参照文件的时间戳。

以日期来看,unix时间戳是从零开始,由1970/1/1/ 00:00:00 UTC算起。

然后又用一节介绍了一下临时文件/tmp 。一般要解决自己程序生成的临时文件,共享的目录或同一程序的多个执行实例可能造成临时文件命名冲突,一般使用的都是进程ID,可以在shell变量


umask   077  #???????????????
TMPFILE=${TMPDIR-/tmp}/myprog." />You can't use 'macro parameter character #' in math mode  #产生临时性文件名
trap 'rm -f $TMPFILE' EXIT #完成时删除临时文件

但是像/tmp/myprog.

$ cat $HOME/html2xhtml.sed
s/<H1>/<h1>/g
...
s:H2>:h2>:g
...
cd top level web site directory
find . -name '*.html' -o -name '*.htm' -type f |
    while read file   
    do
        echo $file  
        mv $file $file.save  
        sed -f $HOME/html2xhtml.sed < $file.save > $file 
    done


书中说了一小节寻找问题文件,意思是文件名里有特殊字符,可以实用find -print0 来解析,但是没搞明白说这些是干嘛用的。

然后介绍了一个执行命令xargs,是为了处理给脚本传参过长的问题,不如有时候我们会写寻找字符串的命令如下:
$ grep POSIX_OPEN_MAX /dev/null $(find /usr/include -type f | sort )
我们在后边一堆文件中寻找 POSIX_OPEN_MAX这样的一个字符串。如果后边find出来的文件很少,那很好,这条命令就会顺利执行,但是如果过长会给出提示:****:Argument list too long. 这样子。我们可以通过getconf ARG_MAX来查看你的系统允许的最大值是多少。上边这条命令有一个文件是空文件/dev/null,这是为了防止find没找到任何文件使grep进入从标准输入获取信息的空等状态,也为了使grep命令有多个文件参数而使结果可以显示文件名和出现的行数。