2012-08-17 14:33:55 su1216 阅读数 2528

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制





第十四章:使用shell:初始化文件

初始化文件(initialization file)

登录文件(login file):存放着所有希望在每次登录时自动执行的命令。

环境文件(environment file):存放着所有希望在新shell启动时自动执行的命令。

注销文件(logout file):存放注销时自动运行的命令。


shell 登录文件 环境文件 注销文件
C-Shell .login .cshrc .logout
Tcsh .login .tcshrc、.cshrc .logout
Bourne Shell .profile -- --
Korn Shell .profile $ENV --
Bash(默认) .bash_profile、.bash_login .bashrc .bash_logout
Bash(POSIX) .profile $ENV .bash_logout

注:

1.Korn Shell和Bash(POSIX)不使用标准的环境文件名称。可以将ENV变量设置为希望使用的任意文件的名称。

2.如果shell不支持注销文件,可以通过捕获EXIT信号使用注销文件。


POSIX标准要求shell应该支持登录文件和环境文件,没有要求注销文件。

如果默认不执行注销文件,则可以在登录文件中捕获EXIT信号来执行注销文件。

trap '. ${HOME}/.logout; exit' EXIT

登录文件名应为.profile,为了保持灵活性,环境文件名称没有固定而是保存到环境变量ENV中。

Bash可以以两种模式运行,默认模式(追求灵活性)和POSIX模式(追求兼容性)。

Bash支持POSIX标准的增强版,在POSIX模式中,Bash严格遵循1003.2标准。


POSIX模式中运行Bash

1.通用方法

bash --posix

2.部分适用(大多数Linux)

bash命令以默认方式启动,sh命令以POSIX模式启动



隐藏文件:点文件,文件名以点开头。

rc(run commands,运行命令)文件:文件名以点开头,以rc结尾。通常用于存放初始化命令。

ls -a:列举出所有文件,包括隐藏文件


登录shell:登录时启动的shell

非登录shell:其他的交互式shell

1.打开一个终端窗口,只是启动一个非登录shell,ctrl+alt+f1进行登录,则启动一个登录shell

2.任何时候都可以通过输入shell的名称启动一个新shell,新shell是一个非登录shell

3.使用ssh远程连接主机,必须登录,所以启动的是登录shell


登录shell执行登录文件和环境文件

非登录shell只执行环境文件


上面的规则也有特殊的情况,比如Bash默认模式

Bash(默认模式)

1.登录shell:.bash_profile

2.非登录shell:.bashrc


Bash(POSIX模式)

1.登录shell:.profile,然后$ENV

2.非登录shell:$ENV



Korn Shell

1.登录shell:.profile,然后$ENV

2.非登录shell:$ENV


(C-Shell部分在297页)


登录文件应该包含下述命令

1.创建或者修改环境变量的命令

2.执行所有一次性操作的命令

由于环境自动被所有子进程继承,所以环境变量只需要在登录文件中设置一次。在环境文件中设置环境变量是没有意义的,环境文件中设置的变量在新的shell启动时将被复位。

环境变量设置不能在环境中保存的自定义项,特别是shell选项、别名和函数。因为这些没有存储在环境中,所以每次启动新shell时必须重新创建他们。



名词解释:

CTSS(Compatible Time Sharing System):兼容分时系统。





第十五章:标准I/O:重定向和管道


标准输入:stdin

标准输出:stdout

标准错误:stderr

标准I/O:上述三者总称


重定向标准输出、标准输入

>>:可以将输出重定向到文件,但是是追加到文件末尾

>:可以将输出重定向到文件,文件不存在则建立,如果存在,则删除之前内容。

<:可以将输入从键盘重定向到文件等。

sort < 1.txt > report

上面例子中, sort先从1.txt中读取数据,排序之后输出到report文件中。


shell选项:noclobber

开启此选项可以防止文件被重定向替换或创建。

$ ls > 1.txt
$ ls > 1.txt
bash: 1.txt: cannot overwrite existing file

我连续两次将ls输出重定向到1.txt,原始状态是没有1.txt这个文件的,第一个命令创建了这个文件,再此执行的时候,由于设置了noclobber=on(set -o noclobber),所以会提示错误。

如果依然想执行这条命令,将1.txt的内容替换掉,那么可以使用:

ls >| 1.txt

这样就能强制输出到1.txt文件中。(C-Shell使用ls >! 1.txt)

Bourne shell中,noclobber不会影响“>>”(C-Shell会影响,如果指定的文件不存在,则会出现错误提示,可以通过“ls >>! 1.txt”临时执行)。


文件描述符(file descriptor)

Unix进程中,每个输入源和每个输出目标都有一个唯一的数字标识,这个数字称为文件描述符。

在编写程序时,使用文件描述符控制I/O,每个文件使用一个文件描述符。


Bourne Shell家族中,重定向输入或输出的正式语法是:在文件描述符数字之后使用小于号或大于号。

calculate 8> results

表示calculate将输出写入到文件描述符为8的results中。


Unix为每个进程提供3个预定义的文件描述符。

标准输入:0

标准输出:1

标准错误:2

只能省略标准输入和标准输入的文件描述符,标准错误不能省略。

calculate 0< results同calculate < results

calculate 1> results同calculate > results

calculate 2> results不能省略


进程就是加载到内存中并且准备运行的程序,以及程序的数据和跟踪程序所需的信息。当进程需要启动另一个进程时,这个进程就创建一个副本进程。原始进程称为父进程,副本进程称为子进程。

子进程开始运行后,父进程等待子进程死亡(结束)。一旦子进程死亡,父进程就会被唤醒,重新获得控制权并再次开始运行,此时子进程消失。


当创建子shell时,它继承父shell的环境。但是子shell对环境的修改不会传递到父shell。

两种方式创建子shell

1.输入shell名启动shell,^D后退出。

2.将命令用圆括号括起来,临时使用子shell执行。位于圆括号中的这些命令被称为一个编组(grouping)

使用编组和子shell的最常见的原因是防止cd命令影响当前的shell,其通常格式为:

(cd directorycommand)


组合标准输出和标准错误

下面将标准输出和标准错误输出到同一个文件中,语法如下

command x> outputfile y>&(这里x和y是文件描述符)

例如,ls filename,如果存在此file,那么终端则显示,如果没有,终端则输出错误提示。

ls: cannot access a: No such file or directory

现在在我的工作目录下,有一个文件为1.txt,但是没有2.txt

执行:ls 1.txt 2.txt

则输出

ls: cannot access 2.txt: No such file or directory
1.txt

如果执行:ls 1.txt 2.txt > 1.txt

则在终端只显示

ls: cannot access 2.txt: No such file or directory

打开1.txt则只有一行为:

1.txt

改用下面的命令即可将标准输出和标准错误都重定向写入到1.txt中

ls 1.txt 2.txt > 1.txt 2>&1

当然也可以使用:ls 1.txt 2.txt 1> 1.txt 2>&1

当然,也可以先考虑标准错误,使用:ls 1.txt 2.txt 2> 1.txt 1>&2


对于Bash来说,可以使用下面命达到同样效果:

ls 1.txt 2.txt &> 1.txt

ls 1.txt 2.txt >& 1.txt

但是如果想把输出追加到文件末尾,那么还得使用之前的方法:

ls 1.txt 2.txt >> 1.txt 2>&1


*注意区分:ls 1.txt 2.txt 2>&1 > 1.txt

上面的命令意思为:先将标准错误重定向到与标准输出同一个位置,但是此时标准输出还没有被重定向,标准输出发送给了shell,所以导致标准错误也发送给了shell。之后的事情大家就都知道了,重定向了标准输出。最后结果,终端会显示标准错误,标准输出被重定向到了1.txt中。


如果一条命令中,向同一个文件重定向两次的话,一个重定向就会覆盖另一个。所以下面的命令不能正常工作。

ls 1.txt 2.txt > 1.txt 2> 1.txt


抛弃输出与错误

位桶(bit bucket):/dev/null

发给/dev/null的任何东西都会消失。

所以我们如果不想看到标准输出,可以这样:

ls 1.txt 2.txt > /dev/null

如果不想看到标准错误:

ls 1.txt 2.txt 2> /dev/null

如果都不想看到:

ls 1.txt 2.txt > /dev/null 2>&1


Bourne shell重定向元字符总结

元字符 动作
< 重定向标准输入(同0<)
> 重定向标准输出(同1>)
>| 重定向标准输出:强制重写
>> 追加标准输出(同1>>)
2> 重定向标准错误
2>> 追加标准错误
2&>1 将标准错误重定向到标准输出
>&或者&> 重定向标准输出+标准错误(只适用于Bash)
| 将标准输出通过管道传送给令一条命令
2>&1| 将标准输出+标准错误通过管道传送给令一条命令

管道线

shell允许创建一序列命令,在这一序列命令中,一个程序的标准输出可以自动的发送给下一个程序的标准输入。两个程序之间的连接就是管道(pipe),而命令序列本身称为管道线(pipeline)

Bourne shell可以将标准输出和标准错误组合在一起发送给另一个程序:

command1 2>&1 | command2

C-Shell版为:

command1 |& command2


当创建管道线时,必须使用能够从标准输入读取文本,并向标准输出写入文本的程序。这样的程序称为过滤器


管道线分流

tee [-afile...

tee从标准输入读取数据,并向文件和标准输出各发送一份数据。

ls | tee 1.txt

这样就能将ls的输出显示到屏幕上面并且同时保存到1.txt中一份。

如果tee后面的文件参数不存在,则自动创建一份,如果存在,则覆盖旧文件,可以使用-a(append)改为追加。


条件执行

伪代码:

if(action1()){
    action2();
}

if(!action1()){
    action2();
}

上面两段代码在shell中分辨对应

command1 && command2

command1 || command2

如果grep成功,则在标准输出显示结果,如果grep失败,则不显示任何内容。

现在我有一个名text.txt的文本文件,里面只有一行字符串:this is a test

现在查找this单词,如果存在,则显示success

grep this text.txt && echo "success"

现在查找these单词,如果不存在,则显示fail

grep these text.txt || echo "fail"

我们发现,当grep成功的时候,会把满足条件行显示在屏幕上,如果不想显示,我们可以考虑将标准输出重定向到/dev/null中。

grep this text.txt > /dev/null && echo "success"


如果想实现下面的功能,应该如何做呢

if(action1()){
    action2();
}else{
    action3();
}

书中没有给出答案,下面是我的想法


grep word text.txt && echo "success" || echo "fail"

如果grep word text.txt成功了,那么应该执行echo "success",所以echo "success"也成功了,那么后面的||就不会执行了。

如果grep word text.txt失败了,那么echo "success"不会执行,所以echo "success"失败了,那么后面的||应该执行。

不要想着使用括号提高运算级别,使用括号会启动子shell。





转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

2012-10-23 13:28:28 su1216 阅读数 3381

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制





第二十三章:Unix文件系统

文件类型

普通文件(ordinary file)(常规文件,regular file)

目录(文件夹)

伪文件:不用来存储数据,所以不占用空间

3种最重要的伪文件

特殊文件(设备文件):是物理设备的内部表示,Unix所有特殊文件存放在/dev(device,设备)目录中

命名管道:将一个程序的输出连接到另一个程序上

proc文件:允许访问内核信息。特定情况下,可以通过它修改内核数据




硬件
/dev/fd0 软盘
/dev/hda 硬盘
/dev/hda1 硬盘:第一分区
dev/sda SCSI硬盘
/dev/sda1 SCSI硬盘:第一分区
/dev/sda1 USB闪存卡
/dev/lp0 打印机
/dev/usb/lp0 USB打印机
终端
/dev/tty 当前终端
/dev/tty1 控制台/虚拟控制台
/dev/pts/0 伪终端
/dev/ttyp0 伪终端
伪设备
/dev/null 放弃输出,输入不返回内容(eof)
/dev/zero 放弃输出,输入返回null(0)
/dev/random 随机数生成器
/dev/urandom 随机数生成器

软盘与打印机是用数字编号,从0开始。比如/dev/fd0,/dev/fd1……

硬盘用字母编号,从a开始。不如/dev/hda,/dev/hdb……对于一块硬盘多个分区的情况,则会使用类似二级角标形式/dev/hda1,/dev/hda2(这里的数字从1开始!)

SCSI和SATA硬盘名称为/dev/sda,其他规则同上




位桶(bit bucket)

写到下面两个设备中的任何输出都会被抛弃

null文件(/dev/null)

zero文件(/dev/zero)

处理输出时,null和zero相同

处理输入时,程序从/dev/null读取数据,不管请求输入多少字节,总是返回eof信号。

从/dev/zero读取数据时,文件生成和请求一样多的字符,但是值都是0,在Unix中,认为这个值是null字符。清除数据的时候可以用null字符覆盖已有的数据




命名管道

语法:

mkfifo [-m modepipe

mode是chmod程序使用的一种文件模式类型(25章),现在暂时忽略-m选项

pipe是管道名称


使用

mkfifo fifotest(创建一个名为fifotest的管道)

grep bash /etc/passwd > fifotest(把输出写入到fifotest管道中)

wc -l < fifotest(从fifotest读取数据)

rm fifotest(删除此管道)

结果与下面相同

cat /etc/passwd | wc -l

主要用于进程间通信




proc文件

所有的proc文件都在/proc目录下,系统每一个进程对应一个子目录,名称为进程ID

proc文件 相关信息
/proc/xxx/ 进程#xxx
/proc/cmdline 内核选项
/proc/cpuinfo 处理器
/proc/devices 设备
/proc/diskstats 逻辑磁盘设备
/proc/filesystems 文件系统
/proc/meminfo 内存管理
/proc/modules 内核模块
/proc/mounts 已挂载设备,挂载点
/proc/partitions 磁盘分区
/proc/scsi SCSI和RAID设备
/proc/swaps 交换分区
/proc/uptime 内核运行时间(秒),内核空闲时间(秒)
/proc/version 内核版本、分发、gcc
/proc/kcore 计算机实际物理内存

ls -l /proc/kcore 

-r-------- 1 root root 140737486266368 2012-10-22 16:07 /proc/kcore(伪文件,不占用空间)



挂载文件系统:mount、umount

文件系统层次结构标准要求使用特定的目录挂载文件系统

对于没有挂载在其他位置的固定介质(例如额外的硬盘)来说,指定目录是/mnt

对于可移动介质来说,目录是/media



根目录(顶级目录,toplevel directory)目录结构

目录 内容
/ 根目录
/bin 基本程序
/boot 启动系统时所需的文件
/dev 设备文件
/etc 配置文件
/home 用户的home目录
/lib 基本共享库,内核模块
/lost+found 由fsck恢复的受损文件
/media 可移动介质的挂载点
/mnt 不能挂载在其他位置上的固定介质的挂载点
/opt 第三方应用程序
/proc proc文件
/root 超级用户的home目录
/sbin 由超级用户运行的基本系统管理程序
/srv 本地系统所提供服务的数据
/tmp 临时文件
/usr 静态数据使用的辅助文件系统
/var 可变数据使用的辅助文件系统

目录存放的内容

/bin:系统管理员在单用户模式下管理系统所需的基本工具。都是可执行文件

/boot:系统存放引导过程中所需全部文件的位置,内核必须位于这个目录或根目录中。如果升级过系统,则目录下有多个内核文件

/dev:所有特殊文件。此目录下的makedev程序用来创建新的特殊文件

/etc:配置文件

/home:存放个人文件和目录,与用用户标识相同,比如我的home为/home/su1216

/lib:包含运行/bin和/sbin目录中的程序所需的基本库和内核模块

/lost+found:如果Unix没有正常关机,那些仅完成部分写入的文件将收到损坏,Unix下次启动时,fsck将自动运行,检查文件系统并修复问题。如果发现损坏的文件,那么fsck将挽救这些文件,并将他们移动到/lost+found中

/media:可移动介质的挂载点

/mnt:这是不会在其他位置挂载的固定介质(例如额外的硬盘)的挂载点。(说的也太拗口了,如有没理解错的话,他是想说:这是固定介质唯一的挂载点)

/opt:第三方应用程序

/root:root用户的home

/sbin(system binaries):系统二进制文件

/tmp:临时存储,最终它的内容将被移除

/usr:辅助文件系统的根,目的用来存放静态数据(没有系统管理员的干涉不会改变的数据)。以前用来存放home

/var:辅助文件系统的根,目的用来存放可变数据。例如:日志文件、打印文件、电子邮件等




/usr目录

目录 内容
/usr/bin 非基本程序(大多数用户程序)
/usr/include C程序的头文件
/usr/lib 非基本共享库
/usr/local 本地安装程序
/usr/sbin 由超级用户运行的非基本系统管理程序
/usr/share 共享系统数据
/usr/src 源代码(只用于参考)
/usr/X11 存放着大量由X Window使用的程序
/usr/games 游戏、娱乐、教育程序

/usr/bin:可执行程序,比/bin中要多

/usr/include:C和C++程序员所使用的include文件(头文件)的存储区

/usr/lib:同/lib

/usr/local:存放本地程序和文档资料

/usr/sbin:同/sbin,与/usr/bin和/bin的关系一样

/usr/share:用户和程序间共享文件

字典文件在/usr/share/dict/words

Unix手册在/usr/share/man

Info系统在/usr/share/info

/usr/src:有一些包含系统源代码的子目录,只用来做参考。许多Linux系统上,内核的源代码位于/usr/src/linux

/usr/X11:存放着大量由X Window使用的程序

/usr/games:游戏、娱乐、教育程序




通用程序(可以由任何人使用)
/bin 基本程序
/usr/bin 非基本程序
/usr/local/bin 本地安装程序
系统管理程序(只能由超级用户使用)
/sbin 由超级用户运行的基本系统管理程序
/usr/bin 由超级用户运行的非基本系统管理程序
/usr/local/sbin 本地安装的系统程序
第三方应用程序
/opt/xxx 应用程序xxx的静态数据,包括程序
/var/opt/xxx 应用程序xxx的可变数据




/home目录

许多系统上,/home目录属于辅助文件系统,所以在挂载之前不可用

每次登录时,环境变量HOME被设置为字节home的名称,可以通过下面方式查看

echo $HOME或echo ~



环境变量PATH(搜索路径)

每当输入不是shell内置程序的程序名称时,Unix就会在搜索路径所指定的目录中进行搜索




虚拟文件系统

引导加载程序接管计算机,从引导设备中读取数据,从而将操作系统加载到内存中。

大多数情况下,引导设备是本地硬盘驱动器上的一个分区,但是也可以是网络设备、CD、闪存驱动器等

在引导设备的数据中有初始的Unix文件系统,称为根文件系统

根文件系统自动挂载,其中存放着启动Unix所需的全部程序和数据文件,还包含系统出现问题时管理员需要使用的工具

根文件系统至少包含下述目录

/bin

/boot

/dev

/etc

/lib

/root

/sbin

/tmp

一旦挂载了根文件系统,内核也就启动完毕,就会自动挂载其他设备文件系统


根文件系统总是存储在引导设备上

有3个其他文件系统可能位于单独的设备上:usr、var、home

基于磁盘的文件系统

ext3

第3代扩展文件系统(Linux)
ext4 第4代扩展文件系统(Linux)
FAT32 32位文件分配表文件系统(Microsoft Windows)
HFS+ 层次式文件系统(Macintosh)
ISO 9660 ISO 9660 标准文件系统(CD-ROM)
NTFS NT文件系统(Microsoft Windows)
UDF 通用磁盘格式文件系统(可重写CD和DVD)
UFS2 Unix文件系统(BSD、Solaris)
网络文件系统
NFS 网络文件系统(广泛使用)
SMB 服务器信息块(Windows 网络)
特殊用途文件系统
devpts 伪终端的设备界面(PTY)
procfs proc文件系统
sysfs 系统数据文件系统(设备与驱动器)
tmpfs 临时存储文件系统






Filesystem Hierarchy Standard(FHS):文件系统层次结构标准





转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

2012-09-24 16:29:48 su1216 阅读数 2549

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制




第二十一章:显示文件


部分显示文件的工具

程序 作用 章号
less 分页程序:每次一屏的显示数据 21
more 分页程序(已经废弃,在BSD中使用) 21
pg 分页程序(已经废弃,在System V中使用) --
cat 显示整个文件,没有分页 16
head 显示文件的第一步分 16、21
tail 显示文件最后一部分 16、21
grep 显示包含/不包含特定模式的行 19、20
vi 文本编辑器:显示和编辑文件 21
view、vi-R 只读文本编辑器:显示但不允许修改文件 22
hexdump 显示二进制文件 21
od 显示二进制文件 21



基础知识

程序/命令

less

语法


less [-mMsIN] [+command] [-xtab] [file...]

command自动执行的命名

tab是希望使用的制表间距

file是文件名称


-s(squeeze,挤压):将多个空白行压缩成一个

-m(more):显示内容占文件的百分比

-M:显示文件名和行号以及内容占文件的百分比

-I(ignore case):忽略大小写

+:指定less从什么地方开始显示数据,加号之后任何内容都会作为初始命令执行

less +/buffer file (从buffer字符串开始显示)

less +37g file (从第37行开始显示)

-N(number,数字):输出中显示行号(默认对空白行编号),类似nl(默认不对空白行编号)

-x:选项后跟数字,告诉less按指定的正则区间(regular interval)设置制表符

less -x4 file (file文件的制表符设置为4个空格)

基本命令
h 显示帮助信息
<Space> 前进一屏
q 退出
高级命令
g 跳到第一行
G 跳到最后一行
= 显示当前行号和文件名
<Return> 前进一行
n<Return> 前进n行
b 后退一屏
y 后退一行
ny 后退n行
d 前进(向下)半屏
u 后退(向上)半屏
<Down> 前进一行
<Up> 后退一行
<PageUp> 后退(向上)一屏
<PageDown> 后退(向下)一屏
ng 跳到第n行
np 跳到文本的n%行处
/pattern 向前搜索指定模式
?pattern 向后搜索指定模式
n 重复搜索:相同方向
N 重复搜索相反方向
!command 执行指定的shell命令
v 使用当前文件启动vi编辑器
-option 改变指定的option
_option 显示option的当前值


使用less显示多个文件

:n(next) 切换到列表中的下一个文件
:p(previous) 切换到列表中的前一个文件
:x 切换到列表中的第一个文件
:e(examine) 在列表中插入一个新文件
:d 从列表中删除当前文件
:f 显示当前文件的名称
= 同:f
/*pattern 向前搜索指定的模式
?*pattern 向后搜索指定的模式

less file1 file2:一次只显示一个文件,需要手动切换文件(:n和:p)

在多个文件中搜索时,可以使用/*和?*来代替/和?,这样可以在所有文件中搜索,否则只会在当前文件中搜索。


环境变量

PAGER:设置默认的分页程序

export PAGER=less

LESS、MORE

export LESS='-Ms'(设置less默认启动选项)

export MORE='-s'(设置more默认启动选项)



more

语法

more [-s] [file...]

-s(squeeze,挤压):将多个空白行压缩成一个

基本命令
h 显示帮助信息
<Space> 前进一屏
q 退出程序
高级命令
= 显示当前行号
<Return> 前进一行
d 前进(向下)半屏
f 前进一屏
b 后退一屏
/pattern 向前搜索指定模式
/ 重复上次搜索
!command 执行指定的shell命令
v 使用当前文件启动vi编辑器



关于进制

关于进制的信息请参阅数论有关书籍

含义 计算机表示法 发音
基10的101 101 “one hundred and one,一百零一”
基16的101 0x101 “hex one-zero-one,十六进制 1-0-1”
基8的101 0101或0o101 “octal one-zero-one,八进制 1-0-1”
基2的101 0b101 “binary one-zero-one,二进制 1-0-1”


hexdump与od

hexdump

语法

hexdump -C [file...]

-C(canonical,规范):自动使用合适的选项组合,生成规范输出(类似于下面的输出)

 写道
……
000001f0 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................|
00000200 52 e5 74 64 04 00 00 00 e0 8d 01 00 00 00 00 00 |R.td............|
00000210 e0 8d 61 00 00 00 00 00 e0 8d 61 00 00 00 00 00 |..a.......a.....|
00000220 20 02 00 00 00 00 00 00 20 02 00 00 00 00 00 00 | ....... .......|
00000230 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c |......../lib64/l|
00000240 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73 |d-linux-x86-64.s|
00000250 6f 2e 32 00 04 00 00 00 10 00 00 00 01 00 00 00 |o.2.............|
00000260 47 4e 55 00 00 00 00 00 02 00 00 00 06 00 00 00 |GNU.............|
00000270 0f 00 00 00 04 00 00 00 14 00 00 00 03 00 00 00 |................|
00000280 47 4e 55 00 cd e8 22 bf c4 68 6a 94 7a 40 a8 5b |GNU..."..hj.z@.[|
00000290 8c b4 1d 06 e2 3a 81 f7 61 00 00 00 72 00 00 00 |.....:..a...r...|
……

hexdump -C [-s offset] [-n length] [file...]


offset是在文件开头略过的字节数(任何进制数)

length是要显示的字节数(十进制数)


hexdump -C -s 0x120 -n 96 /bin/ls | less



od
语法
od -Ax -tx1z [file...]
以规范格式显示二进制文件
-A(address,地址):指定偏移值进制(对于规范输出来说,指定x,以16进制显示偏移)

-t(type of format,格式类型):控制数据显示方式(对于规范输出来说,指定x1,以16进制显示数据,每次一个字节;指定z,在每行末尾显示相应的ASCII值)

-j(jump over,跳过):指定从文件开头跳过多少字节

-N(number of bytes,字节数量):限制输出字节数量

od -Ax -tx1z -j 0x120 -N 96 /bin/ls (以16进制显示偏移,以16进制显示数据,每次显示一个字节,每行末尾显示相应ASCII值,从偏移0x120开始,显示96字节 - 6行输出)




名词解释

设备驱动程序:为操作系统和特定类型的设备提供接口的程序

终端驱动程序:当使用Unix的基于文本的CLI(命令行界面)时,控制终端的驱动程序称为终端驱动程序

line discipline:线路规程

规范模式(canonical mode):(Unix主要线路规程之一)在规范模式中,键入的字符累积在一个缓冲区(存储区域)中,除非按下Return键,否则不会向程序发送任何东西。(比如shell)

原始模式(raw mode):(Unix主要线路规程之一)在原始模式中,只要键一按下,字符就直接发送给程序。(比如less、vi、Emacs)

cbreak模式(稀有模式):原始模式变种。大多数输入都直接发送给程序,少数几个非常重要的键是由终端驱动程序直接处理的。5个特殊信号的键:intr(^C)、quit(^\)、susp(^Z)、stop(^S)、start(^Q)





转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

2012-08-21 10:56:28 su1216 阅读数 2454

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制



第十六章:过滤器:简介和基本操作



基础知识:

cat(catenate,to join in a chain)

每次一行从标准输入读取数据,完成处理后将结果每次一行的写到标准输出。

执行cat后,控制台等待输入,按下return时,之前键入的一行发送到cat,然后cat再输出,所以在屏幕上面可以看到两行相同内容的输出。

作用

在管道中不需要使用

在I/O重定向中应用较多

cat > data

将标准输出重定向到data,可以快速建立文件。当然也可以追加到文件(>>)。

cat < data

将data作为cat的标准输入,输出到屏幕上。这里重定向符号可以省略(cat data)。cat没有翻页功能,当文件内容较多的时候,只显示文件最后的内容。

cat < data > newdata

可以利用cat 复制文件。

cat [file...]

可以利用cat从多个文件读取收集数据(大多数过滤器都允许指定多个文件名作为参数)。


不要将输出重定向到一个文件上

cat name address > name

上面的命令无法完成任务!原因在于shell处理重定向的方式。在冲虚将标准输出重定向到文件之前,shell必须确保这个文件存在并且是空的,如果不存在,shell将其创建;如果存在,shell将其清空。

首先name被清空,然后address输出到name中, 和cat address > name的结果是一样的,shell会给出提示:

cat: name: input file is output file

但是这时name已经被清空了!

可以改用cat address >> name


cat [-bns] [file...]

-n(number):在每行前面加一个行号

-b(blank):和-n一起使用,告诉cat不要对空白行编号

-s(squeeze):将多个连续空白行替换为一个空白行


书中一个cat应用总结,都是上面将过的内容,而且有些还是重复的。

语法 作用
cat > file 从键盘读取数据,创建新文件或者替换已有文件
cat >> file 从键盘读取数据,将数据追加到已有文件中
cat < file 显示一个已有文件
cat file 显示一个已有文件
cat <file1 > file2 复制文件
cat file1 file2 file3 | less 组合多个文件,每次一屏的显示结果。
cat file1 file2 file3 > file4 组合多个文件,将输出保存到一个不同文件中
cat file1 file2 file3 | program 组合多个文件,将输出管道出送给另一个程序


split

语法

split [-d] [-a num] [-l lines] [file [prefix]]

num是创建文件名时用作文件名后缀的字符或者数字数量

lines是每个新文件所包含行的最大数量

file是输入文件的名称

prefix是创建文件时使用的名称


split默认创建1000行数据的文件

split data(将data分割为若干个每个含1000行数据的文件)

split -l 5000 data(将data分割为若干个每个含5000行数据的文件)


split默认以字母x开头,类似于

xaa  xab  xac  xad  xae  xaf  xag  xah  xai

如果之前有同名文件,则被覆盖。


split -d -l 5000 data

改用数字做后缀

x00 x01 x02 x03 ......


split -d -l 5000 data y

修改文件名前缀

y00 y01 y02 y03 ......


split -a 3 data

split -d -a 3 data

设置文件名后缀长度

xaaa xaab xaac xaad ......

x001 x002 x003 x004 ......


tac

语法

tac [file...]

tac将文本写入标准输出之前,将文本行的顺序反转(第一行成为最后一行,第二行成为倒数第二行……)。

tac log > reverse-log

将log文件行反转之后输出到reverse-log中。


rev

语法

rev [file...]


反转字符顺序

rev data | tac

即反转了行,也反转了每行的字符。


head、tail

语法

head [-n lines] [file...]

tail [-n lines] [file...]

head从数据的开头许选择数据行

tail从数据的结尾选择数据行

head、tail默认选取10行数据

cat data1 data2 | sort | tail -n 300 | less

cat data1 data2 | sort | head > newdata

其中n可以省略,变为

tail -15 file


查看不断增长的文件

语法

tail -f [-n [+]lines] [file...]

(需要按下^C后tail才会停止,否则一直等到file的新输出)


colrm(column remove)

语法

colrm [startcol [endcol]]

程序从标准输入读取数据,删除指定的数据列,然后将剩余数据写入标准输出。

其中startcol和endcol指定要移除奇遇的开头和末尾。列的编号从1开始。

比如,我的一个文件名为text的文本文件中有如下两行数据:

1234567

abcdefg

那么我想删除第3-5列

cat text | colrm 3 5

结果为(当然,上面的命令没有改变text文件本身)

1267

abfg

注意:列的编号从1开始,并且是闭区间,而非半开半闭。





第十七章:过滤器:比较和抽取

基础知识:

重要的文件比较程序和排序文件以及从文件中选取数据的相关程序

过滤器 作用 章号 文件类型 文件数量
cmp 比较两个文件 17 二进制或者文本 2个
comm 比较两个有序文件,显示区别 17 文本:有序 2个
diff 比较两个文件,显示区别 17 文本 2个
sdiff 比较两个文件,显示区别 17 文本 2个
cut 从数据中抽取指定列(字段) 17 文本 1个或多个
paste 组合数据列 17 文本 1个或多个
sort 排序数据 19 文本 1个或多个
uniq 选取重复/唯一行 19 文本 1个
grep 选取包含指定模式的行 19 文本 个或多个
look 选取以指定模式开头的行 19 文本:有序 1个


cmp

语法

cmp file1 file2

逐字节的比较,如果相同,则无任何输出,否则会看到如下类似提示:

file1 file2 differ: byte 4, line 1

无须关心文件类型


comm

语法

comm [-123file1 file2

按行比较两个有序文件,并显示区别。

该程序以3列显示输出:

第一列:包含只在第一个文件中有的行

第二列:包含只在第二个文件中有的行

第三列:包含两个文件都有的行


diff

语法

diff [-bBiqswy] [-c|-Clines|-u|-Ulines] file1 file2

lines是说明上下文关系的行号

diff输出使用3个不同的单字符指示:

c(change):改变

d(delete):删除

a(append):追加

每个字符左右都会有一串行号,左边的数字指第一个文件中的行,右边的数字指第二个文件中的行。

第一个文件中的行由“<”(小于号)字符标记;第二个文件中的行由一个“>”(大于号)字符标记。两组行被由若干个连字符构成的直线分隔。

我们来比较一下android4.0和android4.1的package/app下有神马变化

ls -1 /media/dfaf020c-d352-4c0d-ba00-71a419011550/android4.0/packages/apps > android40

ls -1 /media/dfaf020c-d352-4c0d-ba00-71a419011550/android4.1/packages/apps > android41

将packages/apps下的文件列表写到文件中,每行一个文件

然后比较一下这两个文件


diff android41 android40

log如下:

18d17
< LegacyCamera
18d17是说如果第一个文件这样做,那么就能和第二个文件相同。
那么18d17是神马意思,d表示删除,在第一个文件中删除第18行,那么就和第二个文件相同了(17可以省略,表示在第二个文件中第17行后发现了区别)


下面再用同样的方法看看4.0和4.1中Camera下的文件列表区别:

ls -1 /media/dfaf020c-d352-4c0d-ba00-71a419011550/android4.1/packages/apps/Camera > android41

cat android41 写道
jni
MODULE_LICENSE_APACHE2
NOTICE
perftests
res
src
tests

ls -1 /media/dfaf020c-d352-4c0d-ba00-71a419011550/android4.0/packages/apps/Camera > android40

cat android40 写道
AndroidManifest.xml
Android.mk
CleanSpec.mk
jni
MODULE_LICENSE_APACHE2
NOTICE
proguard.flags
res
src
tests

diff android41 android40

log 写道
0a1,3
> AndroidManifest.xml
> Android.mk
> CleanSpec.mk
4c7
< perftests
---
> proguard.flags

将第一个文件(android41)的第0行插入第二个文件(android40)的1-3行

将第一个文件(android41)的第4行(perftests)改为第二个文件(android40)的第七行(proguard.flags)


-i:忽略大小写的区别

-w:忽略所有空白字符(xx和x   x认为是一样的)

-b:忽略空白字符数量上的区别(x x和x   x认为是一样的,但xx和x   x认为是不一样的)

-B(blank lines,空白行):忽略所有空白行

-q(quiet,静止):当两个文件不同时,省略所有细节(和cmp相同,但是只能比较文本)。

-s(same,相同):当两个文件相同时,显示结果。内容大概如下

Files file1 and file2 are identical


-c(context,上下文):不再简洁,易理解

diff -c android41 android40 写道
*** android41 2012-08-20 15:18:05.735840338 +0800
--- android40 2012-08-20 15:18:15.265840419 +0800
***************
*** 1,7 ****
jni
MODULE_LICENSE_APACHE2
NOTICE
! perftests
res
src
tests
--- 1,10 ----
+ AndroidManifest.xml
+ Android.mk
+ CleanSpec.mk
jni
MODULE_LICENSE_APACHE2
NOTICE
! proguard.flags
res
src
tests

输出的前两行是两个文件的信息

然后是每个文件的摘录

第一个文件的1-7行,第4行需要修改

第二个文件的1-10行,第一个文件需要插入第二个文件的1-3行,第四行需要修改为第七行

(diff -C5 file1 file2,改变显示上下文的行数)


-u(unified output,统一输出):类似-c,但是没有重复行

diff -u android41 android40 写道
--- android41 2012-08-20 15:18:05.735840338 +0800
+++ android40 2012-08-20 15:18:15.265840419 +0800
@@ -1,7 +1,10 @@
+AndroidManifest.xml
+Android.mk
+CleanSpec.mk
jni
MODULE_LICENSE_APACHE2
NOTICE
-perftests
+proguard.flags
res
src
tests

(diff -U5 file1 file2,改变显示上下文的行数)


-y:两个文件行并排显示(可以使用sdiff)

diff -y file1 file2 同 sdiff file1 file2


sdiff

语法

sdiff [-bBilsW] [-w columnsfile1 file2

-l:当两个文件拥有共同行时,只显示左边的列

-s(same,相同):不显示在两个文件中相同的任何行

-i:忽略大小写的区别

-w:改变列的宽度

-W:忽略所有空白字符(diff使用-w

-b:忽略空白字符数量上的区别(x x和x   x认为是一样的,但xx和x   x认为是不一样的)

-B(blank lines,空白行):忽略所有空白行



cut

语法

cut -c list [file...]:抽取数据列

list是要抽取列的列表

file是输入文件的名称

ls -l 写道
total 128
-rw-r--r-- 1 su1216 su1216 107 2012-08-20 15:18 android40
-rw-r--r-- 1 su1216 su1216 58 2012-08-20 15:18 android41
-rw-r--r-- 1 su1216 su1216 108294 2012-08-06 09:54 hs_err_pid2095.log
-rw-r--r-- 1 su1216 su1216 16 2012-08-20 13:25 text
-rw-r--r-- 1 su1216 su1216 19 2012-08-20 14:10 x0000
-rw-r--r-- 1 su1216 su1216 17 2012-08-20 14:08 x0001

下面提取权限和日期部分

ls -l | cut -c 1-10,35-50

log 写道
total 128
-rw-r--r--2012-08-20 15:18
-rw-r--r--2012-08-20 15:18
-rw-r--r--2012-08-06 09:54
-rw-r--r--2012-08-20 13:25
-rw-r--r--2012-08-20 14:10
-rw-r--r--2012-08-20 14:08

 ls -l | cut -c1-10,35-50(-c和后面数字之间的空格可以省略)



cut -f list [-d delimiter] [-s] [file...]从文件行中抽取字段

list是要抽取字段的列表

delimiter是分隔字段所使用的定界符(delimiter

file是输入文件的名称

-s(suppress,抑制):遇到不包含任何定界符的行,使用此选项可以抛弃这样的行。


以/etc/passwd这个文件为例,下面截取一部分这个文件的内容:

cat /etc/passwd 写道
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh

cut -f 1 3-5 -d ':' /etc/passwd

我们提取每行的1,3,4,5个字段,其中冒号作为定界符。

 写道
root:0:0:root
daemon:1:1:daemon
bin:2:2:bin
sys:3:3:sys
sync:4:65534:sync
games:5:60:games
man:6:12:man
lp:7:7:lp
mail:8:8:mail
news:9:9:news

paste

语法

paste [-d char...] [file...]

char作为分隔符

file是输入文件的名称

paste可以将几个文件(每个文件都包含一列数据)组成一个大表。也可以将连续的数据行组合起来,构建多个列。

paste和cat有点相似,paste水平组合数据,cat竖直组合数据。

下面我们先把/etc/passwd拆分掉,我们就取前四列

cut -f 1 -d ':' /etc/passwd > /home/su1216/linux_test/c1

cut -f 2 -d ':' /etc/passwd > /home/su1216/linux_test/c2

cut -f 3 -d ':' /etc/passwd > /home/su1216/linux_test/c3

cut -f 4 -d ':' /etc/passwd > /home/su1216/linux_test/c4

然后我们再把它们拼到一起

paste /home/su1216/linux_test/c1 /home/su1216/linux_test/c2 /home/su1216/linux_test/c3 /home/su1216/linux_test/c4 > /home/su1216/linux_test/c

上面截取了部分结果,同之前的passwd文件基本一致,因为没有加分隔符

每列的之间放置了一个制表符(默认),Unix假设制表符为每8个位置一个,且以位置1为起点。

指定冒号为分隔符

paste -d ':' /home/su1216/linux_test/c1 /home/su1216/linux_test/c2 /home/su1216/linux_test/c3 /home/su1216/linux_test/c4 > /home/su1216/linux_test/c

也可以指定多个分隔符,当有多个分隔符时,paste交替使用分隔符。

paste -d '|&' /home/su1216/linux_test/c1 /home/su1216/linux_test/c2 /home/su1216/linux_test/c3 /home/su1216/linux_test/c4 > /home/su1216/linux_test/c

结果如下


名词解释:

version control system:版本控制系统

source code control system(SCCS):代码控制系统

revision control system(RCS):修订控制系统

comma-separated value(CSV):逗号分隔值


一些有用的过滤器

过滤器 章号 参阅 作用
awk -- perl 编程语言:操作文本
cat 16 split、tac、rev 组合文件:复制标准输入到标准输出
colrm 16 cut、join、paste 删除指定的数据列
comm 17 cmp、diff、sdiff 比较两个有序文件,显示区别
cmp 17 comm、diff、sdiff 比较两个文件
cut 17 colrm、join、paste 从数据中抽取指定列(字段)
diff 17 cmp、comm、sdiff 比较两个文件,显示不同
expand 18 unexpand 将制表符转为空格
fold 18 fmt、pr 将长行格式化成较短的行
fmt 18 fold、pr 格式化段落,从而使它们看上去更漂亮
grep 19 look、strings 选择包含指定模式的行
head 16 tail 从数据的开头选择行
join 19

colrm、cut、paste

基于公用字段,组合数据列
look 19 grep 选择以指定模式开头的行
nl 18 wc 创建行号
paste 17 colrm、cut、join 组合数据列
perl -- awk 编程语言:操作文本,文件,进程
pr 18 fold,fmt 将文本格式化为页或者列
rev 16 cat、tac 每行数据中的字符反序排列
sdiff 17 cmp、comm、diff 比较两个文件,显示区别
sed 19 tr 非交互式文本编辑
sort 19 tsort、uniq 排序数据:检查数据是否有序
split 16 cat 将大文件分隔成较小的文件
strings 19 grep 在二进制文件中搜索字符串
tac 16 cat、rev 组合文件,同时将文本行的顺序反转
tail 16 head 从数据的末尾选择行
tr 19 sed 改变或者删除选定的字符
tsort 19 sort 根据偏序创建全序
unexpand 18 expand 将空格转变成制表符
uniq 19 sort 选择重复/唯一行
wc 18 nl 统计行数、单词数和字符数




转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/


2012-11-15 22:46:45 su1216 阅读数 2083

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制





时区与24小时制时间

24小时制时间与AM/PM制时间之间转换
12:00 AM = 00:00 12:00 PM = 12:00
01:00 AM = 01:00 01:00 PM = 01:00
02:00 AM = 02:00 02:00 PM = 02:00
03:00 AM = 03:00 03:00 PM = 03:00
04:00 AM = 04:00 04:00 PM = 04:00
04:00 AM = 04:00 04:00 PM = 04:00
06:00 AM = 06:00 06:00 PM = 06:00
07:00 AM = 07:00 07:00 PM = 07:00
08:00 AM = 08:00 08:00 PM = 08:00
09:00 AM = 09:00 09:00 PM = 09:00
10:00 AM = 10:00 10:00 PM = 10:00
11:00 AM = 11:00 11:00 PM = 11:00



NTP(Network Time Protocol):网络时间协议。NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。

NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。



完成这个工作的程序是ntpd,ntpd是在后台运行的守护进程。

一些系统使用ntpdate程序,该程序并不是守护进程。

ntpd在时间同步上更加出色,最终将取代ntpdate,所以不推荐使用ntpd,更不推荐使用更古老的rdate




UTC(Coordinated Universal Time):协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。它从英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”而来。



美国时区与UTC之间的关系

缩写 时区 与UTC的时差
UTC 协调世界时 0
GMT 格林威治标准时间 同UTC
UT 世界时间 同UTC
EST 东部标准时间 -5小时
EDT 东部夏令时间 -4小时
CST 中央标准时间 -6小时
CDT 中央夏令时间 -5小时
MST 山区标准时间 -7小时
MDT 山区夏令时间 -6小时
PST 太平洋标准时间 -8小时
PDT 太平洋夏令时间 -7小时

注意:UTC、GMT和UT之间存在技术上的区别,但是从实际使用上讲,可以认为他们是相同的

注意:美国的大部分地区在三月的第二个星期日改为夏令制时间,在十一月的第一个星期日改回标准时间



欧洲和印度时区与UTC之间的关系

缩写 时区 与UTC的时差
WET 西欧时间 同UTC
WEST 西欧夏季时间 +1小时
BST 英国夏季时间 +1小时
IST 爱尔兰夏季时间 +1小时
CET 中部欧洲时间 +1小时
CEST 中部欧洲夏季时间 +2小时
EET 东部欧洲时间 +2小时
EEST 东部欧洲夏季时间 +3小时
IST 印度标准时间 +5.5小时

注意:在欧洲大多数地方,一般在三月最后的一个星期日改成夏季时间,在十月的最后一个星期日改回常规时间



Unix将时区信息记录在tz或zoneinfo数据库的标准参考库中。有时将这个数据库称为Olson数据库

在Android4.0中,关于zoneinfo的源码在bionic/libc/tools/zoneinfo,下面有一个可执行文件generate

执行generate,会生成需要的二进制文件

(看来编译的时候需要联网)

(log)

Looking for new tzdata...

2012-11-22 13:02:35 URL: ftp://munnari.oz.au/pub/tzdata*.tar.gz [1175] -> ".listing" [1]

生成的二进制文件在bionic/libc/zoneinfo





转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/


没有更多推荐了,返回首页