Unix&Linux大学教程期末复习整理 纯手打,共19000字左右 1-19章

更新时间:2024-03-29 19:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

Unix在1969年由贝尔实验室发明,最早叫Unics。 读取并解释所输入的命令的程序称为shell。

第二章

引导过程是计算机启动时要经历的一系列动作。 自由软件:任何人都可以对其检查、共享、修改以及发行。意义:改革了编程文化。 计算机按照指令自动执行任务,一系列指令称为程序。计算机物理部件被称为硬件。

操作系统是运行计算机的总控制程序。 操作系统最重要的功能:

控制计算机并在计算机启动或者重新启动时初始化计算机。初始化过程只是引导过程的一部分; 支持计算机交互所使用的界面;

为需要使用计算机资源的程序提供接口; 管理计算机内存 维护并管理文件系统 调度工作

提供账户和安全服务。

(引导过程的)最后一个动作是启动一个非常复杂的程序,这个程序称为内核。提供的服务:

内存管理、进程管理、进程间通信、输入输出、文件管理、安全和访问控制、网络访问。

内核分为单内核(规模较大)和微内核(规模较小)。 微内核需要调用其他程序,这些程序称为服务器。 单内核的优点是速度快,缺点是使用不便。[微内反] shell和GUI是为用户提供使用计算机的界面的程序。其中,shell是基于文本的界面程序,GUI基于图形。 其他程序是UNIX实用工具。 UNIX = UNIX内核+实用工具。

每种类型的Unix系统都基于BSD或者System V,或者基于二者。

Unix是一种多用户、多任务处理的操作系统。 Linux是任何一种使用Linux内核的Unix的名称。

第三章

1991年9月发行了第一版linux,是由Linus发行的。 使用计算机时必须有一种方式使您能和机器交互,这

种功能称为界面。

界面又可以称为终端(Terminal),其他部件总成为主机(Host)。

计算机=终端+主机

终端=输入设施+输出设施

终端服务器是一台充当交换机的设备,用于将任意的终端连接到任意的主机。

管理系统的终端叫控制台,通常认为它是计算机本身的一部分。

终端室内放满了终端,每个终端都连接到主机,以便于支持多用户。

最早的Unix是基于文本的,因为当时是文本时代。操作系统的所有能力和功能都是利用纯文本。 不需要终端的计算机称为无头系统。

不需要终端的主机类型:Internet上的服务器和路由器。

当移动鼠标或按下鼠标,屏幕没有立即更新时,就意味着发生了延迟,我们称这一延迟为滞后。

一种使用文本的终端被称为字符终端或者基于文本的终端。

图形终端充分利用了视频硬件的优点,可以使用小点在屏幕上进行绘制内容:图形、几何形状、阴影、线条、彩色等。

对X Window的基本支持由一个称为X终端的图形终端提供。

第四章

负责管理和维护Unix系统的人员称为系统管理员。 系统管理员必须分配给用户一个用来标识自己名称的,称为用户标识,除用户标识外,还得到一个口令。shell提示:等待用户输入命令。对于Bash和Korn Shell来说,提示是”$”,对于C-Shell来说,提示是”%”。 例如:nipper~$ _

tty1,tty7,pts/0,pts/1等都是终端名。 root是超级用户的用户标识。

命令列表:

login是登录命令,输入用户标识与密码。密码不回显 login还可以用来在已经登录的用户上以新的用户登录(算注销的一种方式)。但是在新用户注销后,仍然返回上一个用户的会话。容易不安全。 Ctrl-D/logout/exit注销系统

date命令:显示时间和日期

who命令:显示当前登录到系统的所有用户标识的列表

passwd修改口令格式:passwd [选项] [用户标识],不加选项为修改密码。修改root密码时在前面要加sudo last命令:显示用户标识最近几次的登录时间、终端等信息。格式:last [用户标识],无标识显示全部。

第五章

图形用户界面(GUI)是一个允许使用键盘、指点设备及显示器与计算机进行交互的程序。

对于GUI来说,屏幕被分割成许多有边界的区域,这些区域成为窗口。

窗口管理器控制着窗口和其他图形元素的外观和特征 表:抽象层次

6.应用程序/用户 5.桌面环境 4.窗口管理器 3.X Window 2.内核中的设备驱动程序 1.硬件 帮助完成与现代计算机使用相关的复杂认知任务的封闭式系统是桌面环境,或桌面管理器。

现在常见的桌面环境软件有:KDE, Gnome, CDE。前两个比较流行,CDE是公司开发的,收费。

比较流行的窗口管理器有3个:twm, mwm和olwm。 X Window的第一版是1984年6月,是由麻省理工的Athena团队发明。

两种基本的数据类型是:文本和图形。

X Window是一个使用图形数据的程序提供服务系统。它有3个重要的方面:

几乎是所有GUI的基础;

它允许在远程计算机上运行程序并在自己的计算机上显示完整的图形输出;

它使得各种各样的硬件成为可能。

此外,它还可以使用不止一台显示器,而且可移植,与硬件无关。

抽象层次:依靠层次定义一个大的整体目标,层次可以形象化为底部向上的堆叠,一个层次堆叠在另一个层次上面,每一个层次为其上一个层次提供服务,从下一层次请求服务。层次之间没有其他交互。

总拥有成本:从长远来看需要的开销。一般只有大型

公司才会关注。

第六章

时间片:一个非常短的时间间隔,在这段间隔中,允许一个特定的进程使用处理器,通常为10ms。

CLI(command line interface):命令行界面,基于文本的界面,键入的命令称为命令行。

GUI(graphical user interface):图形用户界面。

Unix有几种不同模式运行的能力,这些模式叫运行级别。默认是3或者是5。

运行时级别(运行级别)控制Unix的运行模式。 运行级别 0 1 2 3 4 5 6 描述 关机 单用户模式:命令行 非标准化 多用户模式:命令行 非标准化 多用户模式:GUI 重新启动 运行级别1过去为系统维护模式。 可以在/etc/inittab中的initdefault值修改自动启动时运行级别。

接受输入的窗口拥有焦点,它们就是活跃窗口。 菜单分为下拉菜单和弹出菜单。 为关闭当前窗口。

窗口中运行的每个程序称为一个任务。

任务切换:Alt-Tab组合键,改变活跃窗口。

使用GUI时,所工作的基本空间称为桌面(又称为工作空间)。

控制台和其他终端的区别:

非常重要的消息会发送到控制台上;

当用户引导是单用户模式时(运行级别1),只有控制台被激活。

访问终端仿真器的2种方式:终端窗口和虚拟控制台。 Linux同时启动了7个不同的终端仿真程序,称为虚拟控制台。

虚拟控制台切换:按,其中1-6是基于文本的界面,7为图形界面。

在虚拟控制台CLI中也可以按切换到其他终端。

配置文件中包含程序需要读取的信息,通常在程序启动时读取,该信息影响程序的工作方式。

修改配置文件时需要超级用户(root)权限。 一些配置文件:

/boot/grub/menu.lst 关于计算机上可以引导的操作系统信息; /etc/hosts 系统已知的一列主机名称和IP地址; /etc/inittab 不同运行级别的定义;

/etc/passwd 每个用户标识的基本信息(实际的口令加密,而且保存在其他地方);

/etc/profile 当用户登录时,系统自动执行的命令; /etc/samba/smb.conf Samba配置信息,它是一个允许Unix系统和Windows系统共享文件和打印机的工具 复制数据的2种方式:选择与插入、复制与粘贴。

命令列表:

su命令:允许临时变成另一个用户标识。格式:su [用户标识],也可以用su – [用户标识]来同时改变标识和环境,默认为root,输入该用户的口令。

sudo命令:允许以另一个用户标识执行一条单独的命令,默认root,输入当前用户口令。格式:sudo [命令] less命令:按屏幕显示信息(21章详细说明)。 init命令:修改运行级别,需要超级用户权限。sudo init [运行级别]。例如sudo init 6会重启。 reboot命令:重启。sudo reboot

shutdown命令:系统关闭 sudo shutdown now,now是指立即关闭。

dmesg命令:显示启动消息。过多时可以用less分屏显示。需要管道:dmesg | less。

第七章

是intr信号,中断。 less命令启动后的操作:

修饰键+,以”^”来表示。例如^A为。表中为一部分键盘信号。 erase ^H kill全删 ^U werase ^W rprnt ^R flush上条 ^O lnext ^V susp ^Z/^Y intr ^C quit ^\\ stop ^S start ^Q eof ^D stop是暂停程序,并不是关闭,还可以用start打开。 quit也是停止程序,但是还会告诉Unix为此时内存中的内容做一个副本,存储在磁芯文件中。 Bash shell中,IGNOREEOF环境变量可以忽略EOF(值代表数量),例如IGNOREEOF=5代表忽略5次EOF。 ^M 键。 ^J 键。

最早的终端叫Teletype。

现在VT100是最流行的终端。xterm也比较常见。 因为最早的Teletype做终端,所以这个习惯被Unix采纳了,故习惯称终端为tty。

curses用来执行屏幕显示管理所需的所有功能,同时对程序员隐藏细节。

环境变量是一个拥有名称和值的条目,通常由shell和所有运行的程序使用。Unix用它来记录正使用的终端类型。

不是Unix标准键盘的一部分,是后来加入的。 退格分为破坏性退格和非破坏性退格。

命令列表:

tty命令:显示终端内部的名称。

stty命令:用于显示或改变终端的设置。

getty命令:用来打开与一个终端的通信,并启动登录进程。

pwd命令:显示工作目录的名称。 lp/lpr命令:打印文件

infocmp命令:读取数据并且翻译为纯文本,格式:infocmo [终端名]。

echo $TERM 查看所使用终端的类型。 prientenv命令:显示所有环境变量。

cat命令:显示文件中(或者是输入)的内容。 stty -a命令:显示键映射

stty kill ^U:(例)把kill命令修改为 ^U。 echo命令:回显。echo [表达式]

<^J>stty sane<^J>/reset:可以复原终端。

第八章

vi和Emacs是Unix常用的文本编辑器。

命令列表:

which命令:查看命令在执行时所对应的程序的路径。格式:which [命令1] [命令2]……

type命令:和which用法相似,会显示更详细的信息。

命令列表: man:显示某个命令的文档资料man [命令1] [命令2]..。 date命令:显示日期和时间,-u表示UTC时间。 cal命令:显示日历。无参数:当前月份cal;输入4位数年:显示那年的日历cal 2013;输入月年:显示那年那月的日历cal 12 2013;-j为显示日期所在当年的编号。

calendar命令:基于自己创建的包含重要日期和消息的文件提供提醒服务。

uptime命令:输出开机后系统运行的时间(连续运行)的有关信息。包括当前时间、运行时间、用户个数以及等待执行程序的平均数量(1 min前,5 min前,15 min前)。

hostname命令:查看计算机的名称。

uname命令:显示操作系统名,-a显示更详细的信息 whoami命令:显示当前用户标识(也可以为who am i)。 quota命令:查看自己的限制。

users:显示登录当前系统的所有用户标识。

who:对于每个用户标识,显示终端名称、用户标识的登录时间。

w:显示用户标识正在做什么(更详细的信息),还可以加用户标识,显示某一用户标识的信息。-h抑制标题。

lock:终端临时上锁(Ubuntu中没有?)

leave:会提示在未来12小时之内某一时刻离开终端。格式:leave 1030为10:30离开。leave +15表示15分钟后离开。

bc:内置计算器,-l使用内置的数学函数库,不同的表达式间用分号隔开,需要^D或者quit退出,遵循一般代数运算法则,scale为设置小数点位数(直接输入为显示);可以使用变量,只能用26个变量(a-z),obase为输出时的基(进制),ibase为输入时的基(2-16); dc:基于栈的计算器(P165)。

第九章

两个Unix的文档资料系统:RTFM:Unix联机手册(手册)、info。

RTFM是一个文件集,每个文件都包含其具体的Unix命令,或者是主题相关文档资料。 man有两个备选方案:Web和xman。 用Web时要加双引号,”man 命令”

man的使用命令在P174。!+命令会跳出man执行其他命令,完成后按返回man。

xman:基于GUI的程序,充当说明书页的浏览器。 “man 章节命令”在某章节中找某命令。章节如下: 1.命令 2.系统调用 3.库函数 4.特殊文件 5.文件格式 6.游戏 7.杂项信息 8.系统管理 [例]man 2 kill 是查看第二章(系统调用)中的kill。 whatis:快速查询命令作用的方法。whatis [cmd1] [cmd2] [cmd3]……,和man –f等价。

man –k:搜索手册中与命令相关的所有条目。 apropos:与man –k等价。

info:和说明书相似,但是为树形结构(P195)。

第十章

一次输入多条命令:用”;”隔开。

命令语法:如何输入命令格式的描述。

选项用来修改命令的执行方式,又叫标志和开关。 参数是在命令行上用来向希望运行的程序传递信息。 命令选项参数 -help = --h --e --l --p

--help为一个整体的选项。

空白符是指一个或者多个连续的空格或者制表符。

第十一章

可以编写由shell解释的程序,这些程序称为shell脚本。 Bourne Shell家族:sh, ksh, bash C-Shell家族:csh, tcsh

查看系统安装了哪些shell的文件:/etc/shells,比如用less查看:less /etc/shells

描述Unix中用户标识的文件:口令文件和影子文件。 POSIX:操作系统标准化。最初由IEEE负责,叫IEEE-IX。后来由GNU创始人Richard Stallman建议成为POSIX。 B家族没有完全的全局变量。

命令列表: 临时改变shell:直接输入shell名(例如csh),执行完后按^D退出,又返回上一个shell。

改变登陆shell:chsh [-s shell路径] [userid],下次登陆系统后才会生效。

chsh -l:显示当前所有可用的shell。

第十二章

交互式程序指的是与人进行沟通的程序。非交互式程序指的是独立于人运行的程序。例如编译器为非交。 用户界面的shell为交互式shell; 创建一组命令(又称shell脚本),并保存在文件中。 运行shell脚本时,从文件读取命令,不需要用户输入的情况下处理所有命令,称为非交互式shell。启动shell时默认是交互的。

环境是一组用来存放信息的变量。 变量是用来存储数据的实体。

每个变量都有一个变量名和一个值。

Unix用TERM变量来存储使用的终端类型名称。最常见的TERM值有:xterm, linux, vt100和ansi。

使用Unix Shell时,有两种不同类型的变量:shell变量和环境变量。

变量有四种类型操作:创建、查看值、修改。销毁。 shell中的变量几乎只存储一种类型数据:字符串。 创建变量时通常会赋值,否则默认就null值(空值)。 子进程创建时,系统为子进程复制了父进程的环境。 shell变量:指在shell进程内使用的;

环境变量:可以在每个shell启动的进程中使用。 常见的环境变量:HOME, HOSTNAME, ENV, IGNOREEOF, PWD, PATH, PS1, TERM, SHELL, USER (P233)。 局部shell变量的两种使用方式:

它可能存放对shell本身有意义的信息,例如ignoreeof;

shell变量在shell脚本中以普通程序的局部变量的使用方式使用,作为临时的存储容器。 “|”叫管道线。

人类可读:当输出的设计方式适合阅读时 机器可读:当输出的设计方式非常复杂时

命令列表:

export [变量名]:B家族中把局部变量变为全局。 unset [变量名]:B家族中取消全局变量

env:显示所有的全局变量,也可以用printenv。可以排序并且以滚屏方式输出:env|sort|less。

set命令可以显示所有自己的shell变量以及他们的值。echo $变量名:显示某个特定的变量的值。防止歧义用引号括起来。例如:”This is $TERM.”显示

This is xterm.,’This is $TERM.’显示This is $TERM。 set -o [option]:设置一个shell选项(on) set +o [option]:复位一个shell选项(off) (shell选项在P242)

*直接输入以上命令为显示选项以及值。 shopt用来访问更多的shell选项。

第十三章

键盘可以键入的字符称为字母数字字符。

当使用shell时有些字符还有其他特殊含义,这些字符称为元字符。(P247-248)

告诉shell按字面意思解释字符时称为引用字符。 引用字符的三种方式:转义字符(\\,例如\\”),双引号和单引号。单引号为强引用,双引号为弱引用。 弱引用:保留$, `和\\的特殊含义。

如果在一行最后按\\,则系统还会等待用户继续输入。若只按一个’或者”,系统仍然会等待另外一个’或”。例如:echo ‘hello world’。

shell能够直接解释的命令是内置命令(例如type),其他所有命令是外部命令(拥有自己的文件,如date)。 bash有69条内置命令。 C-shell有55条内置命令。 搜索路径:在PATH环境变量中的一系列目录名。例如:/bin:/usr/bin:/usr/ucb:usr/local/bin(bash中用冒号)。 一般来说,/bin、/usr/bin、/usr/ucb存放系统中所有用户使用的程序。

export PATH=”$PATH:$HOME/bin”把目录加到当前PATH

末尾。

搜索路径是从头到尾的。

shell提示:B家族默认(初始)为$,C家族默认为%,超级用户默认为#。 转义字符:P264 命令替换:在一条命令中嵌入其他命令,用(`反引号)。 例如:echo “today is `date`.”

为了简化输入,shell提供了几个特性:历史列表、命令行编辑、自动补全和别名。 输入命令时,shell会将命令保存到所谓的历史列表中。B家族:unalias -a同时移除所有别名。C家:unalias *。 临时挂起别名: \\名字,告诉shell运行实际命令本身,而不是别名。

别名示例: alias del=’fc -s ls=rm’

C家族:alias del ’rm \\!ls:*’

从历史列表中重用命令:alias r=’fc -s’ r tempfile=data r 23

r 20 tempfile=data

r di(执行第一个以di开头的命令) 在历史列表中,每条命令称为一个事件,每个事件都有个内部编号。这个编号称为事件编号。

shell将历史列表存储在一个文件中。B家族会自动保存和恢复,C家族需要设置shell变量savehist才可。 B家族需要设置HISTSIZE环境变量,指定历史列表的大小。如:export HISTSIZE=50(C家族set history=50,且希望退出后保存多少条命令用set savehist=…)。

历史列表示例:ls temp* extra?显示所有temp开头的文件名以及以extra开头后面跟着一个字符的所有文件名。之后如果没有想要保留的文件,可以直接在历史列表中把ls改为rm来删除。fc -s ls=rm。 \\!表示bash的事件编号。export PS1=”aa[\\!]$ ” \\w表示工作目录(也可为~)。

自动补全:B家族中是按,帮助自动补全键入的单词。如果唯一,则补全,否则提示有歧义。可以按第二个自动补全键显示所有可能结果或者尝试输入更多字符以自动补全(叫文件名补全)。 命令补全和变量补全只适于bash和Tcsh,和上面类似。 主机名补全只能在bash中使用。

C-shell需要单独打开自动补全功能:set filec。 touch是创建文件。

ls -l用来列举文件名以及其他信息。 bash 由Brian Fox在1987年创造。

命令行编辑是一种强大的工具,允许使用许多不同的命令操纵(编辑)在命令行上键入的内容。包括历史列表和自动补全等功能。

shell使用Emacs时称为Emacs模式,使用vi为vi模式。 set -o emacs set -o vi

所有shell默认使用Emacs命令。 Tcsh要用bindkey命令。bindkey -e(-v)切换Emacs与vi。 别名(alias)就是赋予一条命令或者一列命令的名称。 B家族语法:alias [名字=命令列表] C家族语法:alias [名字命令列表] 命令引用在单引号中!

直接打alias显示所有别名。 unalias 名字:移除别名。

命令列表: help:本身显示一个所有内置命令的摘要列表,help [命令1,2,3...]显示一条或多条具体命令信息。 help -s[命令1,2,3…]只查看某条命令的语法。 export PATH=”路径名”:修改搜索路径名。 export PS1=“修改的shell提示”(B家族)。 set prompt=”修改的”(C家族, Tcsh)。

例export PS1=”${USER}@${HOSTNAME}:~$ ” a@a-PC:~$。

hostname (-s)显示计算机名。

fc -l:显示历史列表(B家族),history(C家族)

fc -s [编号]:重新执行历史列表中该编号的命令,无编号时执行上一条命令。C家族为:!编号,上条为!!。 fc -s 模式串=替换串编号,如fc -s tmpfile=data 25,是把tmpfile文件改为data,之后再执行该命令。

第十四章

按照自己的希望设置工作环境。首先,要创建初始化文件,包括登录文件和环境文件。

登录文件存放着所有希望在每次登录时自动执行的命令,环境文件中存放着所有希望在新shell启动时自动执行的命令。

一些shell还支持注销文件。 shell 登录 环境 注销 Bash(默认) .bash_profile, .bashrc .bash_logout bash_login bash(POSIX) .profile $ENV .bash_logout 所有的初始化文件都以”.”开头,称为”点文件”或者隐藏文件。用ls -a可以查看所有文件,包括点文件。 Bash可以有两种模式运行:默认模式(追求功能和灵活性)和POSIX模式(追求兼容性)。

所有rc文件都以点开头,以rc结尾。 KDE中,基于GUI的文本编辑器是kedit。 Gnome中,基于GUI的文本编辑器是gedit。 登录时启动的shell称为登录shell,其他的交互式shell称为非登录shell。两者初始化文件的处理方式大不相同。

登录shell执行登录文件和环境文件,非登录shell只执行环境文件。

登录文件有两项任务:设置环境以及初始化工作会话。因此应包含下述命令:创建或者修改环境变量的命令与执行所有一次性操作的命令。

环境文件有一项不同任务:设置不能在环境中保存的自定义项,特别是shell选项、别名和函数。 初始化文件保存在home目录中。 编辑:[例] gedit .bash_profile。 shell脚本注释:以#开头的行。执行时会忽略所有注释。

第十五章

Unix旧设计准则:每个程序或者命令应该是一个工具,它只完成一件事,但一定要完成好这件事;需要新的工具时,最好对现有的工具进行组合,而不是建立一个新的工具。

Unix新设计准则:除非程序无法更小,否则小的就是完美的。

屏幕显示程序的命令:more, pg, less。

标准输入输出的基本思想:每个基于文本的程序都应该从任何源接收输入并向任何目标写入输出。 一种读取数据的方法:标准输入。

两种写出数据的方法:标准输出、标注错误。两种不同输出目标的原因在于标准输出用于正常输出,而标准错误用于错误消息。它们综合起来叫标准I/O。 >为重定向输出,例sort > name就是把排序的结果输出到名为name文件中,如果name已存在则覆盖,否则创建并写入。

>>为追加输出,若文件存在则输出到文件尾部(不覆盖),否则创建文件。

当标准输出发送给文件时,称为重定向标准输出。

可以通过设置内置防护(noclobber)来防止文件被意外替换或创建。set +(-)o noclobber (-开+关)。C家族用set和unset,就不会被覆盖了。

>|为忽略noclobber,可以直接覆盖。C家用>!。 重定向标准输入:<。sort < /etc/passwd 标准输入输出可以任意组合使用。例如: sort < datafile > report。

每个输入源和输出目标都由一个唯一的数字标识,这个数字被成为文件描述符。默认的文件描符:0为标准输入,1为标准输出,2代表标准错误。

‘<’与’>’要紧挨着写在文件描述符的后面,例如2>, 0<。 0<和1>不必写文件描述符。

例:sort < rawdata > result 2> errors。

使用子shell执行命令的方法:通过输入命令在shell里启动一个全新shell;将命令扩在圆括号中如(date)。 在子shell中改变了复制父shell的环境变量值,对父shell中的值无影响。

位于圆括号中的一些命令被成为一个编组。

使用编组和子shell最常见的原因是防止cd命令影响当前的shell,格式为(cd directory; command)。

C-shell重定向标准错误command>& output(在P319)。 bash中可以用>&或者&>来同时重定向标准输出与标准错误(写到同一个文件中)。

抛弃输出:重定向到/dev/null中,它叫“位桶”。 重定向小结:P323表格重点。

cat查看文件,也可以实现合并文件(重定向输出)。 ls -l a b > output 2>errors

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

希望将一个输出保存到一个文件中,同时还发送到另一个程序中,用tee可以实现。tee [-a] file…

例如:cat name1 name2 | tee namelist | grep Harley。 tee -a file…追加到每个文件的末尾。

管道线的实现是Unix设计准则提升的催化剂。 条件执行:cmd1 && cmd2:前一条成功时执行后面的,cmd1 ||cmd2:前一条没成功时执行后一条。概念:当前一条命令成功执行或者失败时才执行另一条命令。例如:grep Harley people && sort people > contacts。 使用新程序时的三个问题: 这个程序可以做什么? 这个程序有什么基本细节?

需要时可以在什么地方查找到更多的帮助? 标准I/O缩写:stdin, stdout, stderr。

第十六章

过滤器就是任何能够从标准输入读取文本数据并向标准输出写入文本数据(每次一行)的程序。 使用过滤器解决管道线问题的4个步骤: 分析问题 选择工具 与他人讨论 选择选项

其中三个最重要的技能:思考、RTFM、询问他人的意见。

可能最简单的过滤器:cat。只输入cat,会等待用户输入,按会将输入的复制到标准输出。按^D结束输入。作用:可以与重定向输出结合,快速创建小文件。输入后自动保存[cat > data],[cat >> data]在data中追加任意多行的内容。[cat < data]显示一个短文件或者一个长文件的最后一部分(一屏幕)。省略<则直接从文件中读取数据[cat data]。还可以重定向标准输入输出,实现复制(文本)文件的功能。

tail程序:快速显示文件的末尾,只显示指定行数,默认为10。

cat加多个文件名,可以合并文件显示或者输出。 【重点】P341-342最有用的Unix过滤器列表。

使用cat时不用将输出重定向到一个输入的文件上。因为它会首先检查、创建、(覆盖)这个文件。 选项:

-n在每个行前加个行号

-b和-n一起使用,告诉cat不要对空行编号。 -s将多个连续空行替换为一个空行。 划分文件split:

语法:split [-d] [-a num] [-l lines] [file [前缀]]

-d是设置后缀为十进制数排列,无则按小写字母按字典序排列。

num是文件后缀的字符个数,例如4则为f0000, f0001… lines是每个文件的最大行数。输入数字时不要输逗号。 file是新文件的前缀名。

组合文件时反转文本行顺序:tac。用法和cat一样,只不过行顺序和原来文件完全相反。注意:多个文件输入时是将多个文件分别反顺序再组合!

反转字符的顺序:rev,将整行字符顺序完全反转。 head [-n lines]从头选择lines行数据输出 tail [-n lines]从尾巴选择lines行输出,默认lines为10。 删除数据列:colrm [startcol [endcol]]从开始列到截至

列,如果没写就是开始列之后的删除。如果两个都没指定就不删。

第十七章

比较任意两个文件(每次一个字节的比较):cmp 格式:cmp file1 file2,相同时无输出,不相同就会显示第一个不同的字节以及其所在行数。 比较有序文本文件:comm

格式:comm [-123] file1 file2,输出3列,第1列是只在第一个文件中出现的行,第2列是只在第二个文件中出现的行,第3列是两文件中共有的行。-1可以抑制第一列输出,-2和-3相似。

限制:首先文件必须是排好序的,其次是比较大文件时容易出现混乱。

比较无序文本文件:diff

格式:diff [-bBiqswy] [-c|-Clines|-u|-Ulines] file1 file2 1a3,5是提示第一个文件中第一行后追加第二个文件的3-5行;

4c10是提示第一个文件中的第4行修改成第二个文件的第10行

4d3是提示将第一个文件删除第4行,在第二个文件中第3行与第一个文件发现区别(可忽略后面的)。 第一个文件中的行由一个<标记,第二个由>标记。出于可读性,两组行被”- - -“隔开。

diff的目的就是说明如何将第一个文件修改为第二个文件。 选项:

-i为不区分大小写

-w和-b允许控制diff使用空白符的方式。-w忽略所有空白符,-b忽略空白符数量的区别,区分有无。 -B忽略所有空白行

-q当两个文件不同时省略所有细节(只提示不同,相同时不提示)。

-s当两个文件相同时提示相同。 输出格式:

-c显示存在不同的实际行,多出的行前会有-,少的行前会有+,!指行不同。

-u和-c相似,但是不显示重复的行(两个上下都默认显示两行上下文)。 -y对应行并排显示。

-C/-U,后面可以加希望的额外行的数量代替-c, -u。 sdiff和diff -y功能上一样,但是也有许多选项:

-l共同行只在左边显示,中间会有‘(’。 -s不显示在文件中任何相同的行。 -w 数字:改变列的宽度

-W忽略所有空白符,其他像-i, -b, -B与diff相同。 将一个文件转换成另一个文件的一串指示称为一个差分。

抽取数据列:cut(列以字符为单位) cut -c list [file…] list是要抽取的列的列表,file是文件名 size,另一种跟多个数字,是制表位值,用逗号隔开。 -i只在行的开头使用。

将空格转换为制表符:unexpand unexpand [-a] [-t size|-t list] [file…]

将空格替换为制表符,同时保持原始文件中的对齐方式。默认只替换行开头的空格。替换全部需要-a。 其他的选项类似于expand。 格式化行:fold

例:cut -c 14-30,42-49 info

可以与重定向输出、管道等结合使用。 抽取数据字段:cut

对于数据来说,每行称为一个记录,每行各部分称为字段,充当字段分隔符的字符称为定界符。 cut -c list [file…]

cut -f list [-d 定界符] [-s] [file…](定界符只能为单个字符,不写-d默认为)

-s为对于不包含任何定界符的行,可以抛弃。 例如:cut -f 1,3-5 -d ‘:’ /etc/passwd |sort 组合数据列:paste 可以将多个文件中的列合并(水平合并),并且为简单的列合并。paste [-d char…] [file…] 例paste -d ‘;’ f1 f2

第十八章 创建行号:nl

nl [-v start] [-i increment] [-b a] [-n ln|rn|rz] [file…]

start是起始行号,increment是增量,-b a强制所有行编号(默认不包括空行),-n行号对齐方式,ln左对齐,无前导0:10;rn右对齐,无前导0:10,rz右对齐有前导0:0010。

nl -i 5 -v 100 -b a -n ln data 统计行、单词、字符数:wc wc [-clLw] [file…]

-c是字符数,-l是行数,-w是单词数,-L是最长的行有多少个字符。输入选项时只显示请求输入的数字。后面会跟上文件名。

制表符优点:简单,比空格灵活,缺点:生成空格数量是变化的。

vi中可视化制表符: :set list 取消: :set nolist 制表符将会显示为 ^I

将制表符转换为空格:expand expand [-i] [-t size|-t list] [file…]

-t有两种使用方式:所有制表位都相同,就跟个数字

fold [-s] [-w width] [file…] width为新行的最大长度

-s表示不分隔单词。默认为在80处分隔。 格式化段落:fmt

fmt [-su] [-w width] [file…]

width是行宽

-u是不保持单词、空行间的缩进、空格(默认保持),每个单词间最多只有一个空格,句子末尾最多有2个空格。这一样式称为法国式间距。 -s仅拆分长行,但是不连接短行。

pr的功能:打印;格式化文本,打印是设计目的。 按页格式化文本:pr

pr [-dt] [+beg[:end]] [-h text] [-l n] [-o margin] [-W width] [file…]

beg是需要格式化的第一页,end是~~最后一页 text是标题中间的文本

n是每页的行数margin是左边缘的大小 width是输出的宽度 -d是使用双倍行距 -l 行数是改变每页行数

-t消除标题,页间没有分隔。 -o添加一个额外边缘,后面跟着额外边缘的空格数量。 -W改变输出的宽度(默认72) 按列格式化文本:pr

pr [-mt] [-columns] [-l lines] [-W width] [file…] columns是输出列的数量,其余和上面相似。

pr会盲目截断长行,因此最好用fold -s或者fmt分隔行。

默认情况下,pr使用制表符,而不是空格对齐各列。 -m在单独的列中输出每个文件。每列长度默认为23。 -t移除标题

第十九章

选取包含特定模式的行:grep

grep [-cilLnrsvwx] pattern [file…] pattern是要搜索的模式

-c显示所抽取行的数量,而不是所抽取行的本身。 -i忽略大小写

-l列举(list)文件名,只显示包含这个模式的文件名 -L显示不包含匹配模式的文件名 -n在每一行前面写一个相对行号 -w只希望搜索完整的单词

-v选取不包含制定模式的所有行 -x查找该模式占用整行的那些行 -r搜索整个目录树

-s不希望看到错误提示,抑制。例如-rs。 fgrep是grep的快速版本,只搜索”固定字符”的字符串egrep是grep的扩展版本,支持功能更强大的”扩展正则表达式”,通过egrep或者grep -E实现。 选取以特定模式开头的行:look look [-df] pattern file…

-d忽略标点和其他特殊字符 -f是忽略大小写。 look和grep区别:

look要求有序输入,只能从文件中输入,不能从标准输入中读入,只能在行开头搜索指定的模式。 look优点:易于使用且速度快。

grep灵活,允许使用正则表达式,但是速度慢。 查找以特定模式开头的所有单词:look pattern,默认从字典文件中搜索。

最初创建字典文件的目的是为了用spell程序 aspell程序用来进行拼写检查。aspell -c file 排序数据:sort [-dfnru] [-o outfile] [infile…] -d只查看字母、数字和空白符(其他特殊符号都不排序) -f同等对待大小写

-n识别行开头或字段开头数字按数字进行排序。可包含前导0、负号和小数点。 -r按反向顺序进行排序(降序)。

-u告诉sort查找相同行,并只留下一个。

检查数据是否有序:sort -c[u] [file],-u是检查行唯一性 在字符编码方案中,字符组织的顺序称为排序序列。 查找重复行:uniq 四项任务: 消除重复行 选取重复行 选取唯一行 统计重复行数量

uniq [-cdu] [infile [outfile]] -d只查看重复行 -u只查看唯一行

-c统计重复行出现的次数

-d和-u一起输入,结果为空集。 合并两个文件中的有序数据:join

join [-i] [-a1|-v1] [-a2|-v2] [-1 field1] [-2 field2] file1 file2 输入时忽略前导空白 例如 111 aaa 222 ccc 和 111 1234 222 2345 合并后为 111 aaa 1234 222 ccc 2345

join假定各字段间用空白符分隔

基于匹配的字段组合两组数据时,称为联接。用来匹配具体字段成为联接字段 不加-a1, -a2显示共有的

-a1显示a1有的(a2也如此) -v1显示v1没有的。

-1, -2跟希望使用的字段。

例join -1 3 -2 4 file1 file2把file1的第3个字段和file2的第4个字段进行联接。

区域设置是一种技术范围,描述与特定文化的用户通信时应该使用的语言和习俗。

Unix中,区域设置是由一组标识语言、日期格式、时间格式、货币符号和其他文化习俗的环境变量所定义。用locale [-a]显示当前区域设置,-a系统支持哪些设置。

本文来源:https://www.bwwdw.com/article/kvlr.html

Top