logo资料库

北航unix考试资料.docx

第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
资料共35页,剩余部分请下载后查看
变量赋值和引用
Shell里的流程控制
if 语 句
&& 和 || 操作符
case 语句
select 语句
while/for 循环
Shell里的一些特殊符号
引号
一: 1.UNIX 是一类操作系统。狭义理解,UNIX 是一个分时操作系统的核心,控制和分配计算机 资源(软硬件),协调各应用进程的运行。广义理解,UNIX 除了其核心外,还包括一些基本 的工具,如编辑器、编译器、文件操作工具、文字处理工具等。更广义地理解,UNIX 还包 括用户自己开发的各种工具软件。 2.1973 年,B 语言(一种解释语言)高手 Dennis Ritchie 发明 C 语言,并用 C 语言重写 UNIX 系统,产生了第一个 UNIX 的正式版本----SYSTEM V。 3.Linux 的由来 1987 年,荷兰阿姆斯特丹 Vrije 大学 Andrew S. Tanenbaum 教授(MIT 学士, Berkeley 博士)为课堂教学编写了 Minix 系统。1991 年,年仅 21 岁的芬兰赫尔辛基大学的 学生 Linus Torvalds 参考 Minix 开发了 PC 版的 UNIX,命名为 Linux。 4.Linux 的特点 ①与 UNIX 兼容,遵从 POSIX 标准②自由,开源③性能高,安全性强 5.什么是操作系统 用户与计算机硬件之间的界面,它是控制、管理计算机系统内各种硬件 和软件资源,有效地组织多道程序运行的系统软件(或程序集合)。 q - 真正退出 ed 编辑器 5 将当前行改为第 5 行并显示当前行 $-5,$p | $ | $ who | $ who am I i - 在文件的最后一行之前插入新内容 //or whoami or wr | $ logout 或 exit 二: 1.基本操作----登录 login: you | password: $ write username | $ man command | $w (|表示分隔,指令中没有|) 2. 行编辑器 ed | $ ed | a | now type in… | what do you want to type? | . | w tmp | q | $ a - 从当前行开始添加 o - 把文件输入的最后一行(不论是原来存在的或者插入的)替换成新内容 . - 退出编辑文件模式进入命令行模式(注意:此时并没有退出 ed 编辑器) w - 保存文件 ①显示命令 p p 显示当前行 m,np 显示 m 到 n 行 .代表当前行,$代表最后一行 可使用相对行,如 .,.+3p ②插入、删除、撤销 na 从 n 行后添加 ni 从 n 行前插入。i、a 都以行首.来结束 m,nd 删除 m 至 n 行 u 撤销所做的编辑 ③替换 s/old/new/ 把当前行中第一个 old 替换为 new s/old/new/g 把当前行中每一个 old 都替换为 new 1,$ s/old/new/g 把文件中所有的 old 都替换为 new ④速记符& 1,$s/big/very &/g 把文件中的 big 都替换为 very big s/and/\&/ 把 and 改为& ⑤查找/^$/ 空行 /./ 非空行 /^/ 任意行
/thing/ 包含字符串 thing 的行 /^thing/ 以 thing 开始的行 /thing$/ 以 thing 结尾的行 /^thing$/ 内容为 thing 的行 /thing.$/ 以 thing 加任意符号结尾的行 /thing\.$/ 以 thing.结尾的行 /\/thing\// 包含/thing/的行 /[tT]hing/ 包含 thing 或 Thing 的行 /thing[0-9]/ /thing[^0-9]/ /thing[0-9][^0-9]/ /thing1.*thing2/ /^thing1.*thing2$/ 全局命令 g/…/p 显示所有包含…的行 g/…/d 删除所有包含…的行 g/…/s//rep1/ 对于包含…的行,将其中第一个替换成 rep1 g/…/s//rep1/g 把所有的…替换成 rep1 g/…/s/pat/rep1/ 对于包含…的行,将其中第一个 pat 替换成 rep1 v/^$/p 打印所有非空行 ⑥移动、复制 命令格式:m,nmd m 到 n 行移到 d 行之后。 m,ntd m 到 n 行拷贝到 d 行之后 举例说明一下。 [titan@localhost titan]$ ed a My name is Titan. And I love Perl very much. . i I am 24. . c I am 24 years old. 输的内容) . w readme.text 件,只需要敲入 w 即可) q 这是文件的内容是: [titan@localhost titan]$ cat readme.text <- My name is Titan. I am 24 years old. And I love Perl vrey much. [titan@localhost titan]$ 3. 文件列表 ls $ ls –t //返回 ed 的命令行状态 //告诉 ed 我要在最后一行之前插入内容 // 返回 ed 的命令行状态 // 告诉 ed 我要替换最后一行输入内容 $ ls //按修改时间排序 // 返回 ed 的命令行状态 // 完全退出 ed 编辑器 // 告诉 ed 我要编辑新文件 // 输入第一行内容 // 输入第二行内容 // 激活 ed 命令 $ ls –l $ ls –lt //详细信息列表 //命令选项可以组合 // 将“I am 24.”插入“My name is Titan.”和“And I love Perl very much.”之间 // 将“I am 24.”替换成“I am 24 years old.”(注意:这里替换的是最后 // 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文
abc file2 //针对文本文件 //文件/目录重命名、 /home/cdy 把当前目录下的 abc 移动到/home 目录下面,并重命名为 cdy; //将文件 file1 复制成文件 file2 //7 行 23 个单词 108 个字符(包括"\n") 4. 显示文件 cat 5. 移动及重命名: mv file1 mv -i -i 表示相同名字文件覆盖时询问,若-f 则表示覆盖时不询问 复制: cp file1 file2 cp /tmp/file1 //将目录 /tmp 下的文档 file1 复制到现行目录下,档名仍为 file1 删除:rm [文件名] 6. wc 命令:计数,一或多个文档里的字符、单词、行数 1、字符计数中包含了换行符(\n) 2、默认输出三个选项(c,l,w),可单独指定 c 字符 l 行 w 单词 #wc test1 7 23 108 test1 #wc -l test1 7 test1 7. $ grep ‘test’ d* 显示所有以 d 开头的文件中包含 test 的行。 $ grep ‘test’ aa bb cc 显示在 aa,bb,cc 文件中匹配 test 的行。 $ grep ‘[a-z]\{5\}’ aa 显示 aa 中所有包含每个字符串至少有 5 个连续小写字符的字符串的行。 $ grep ‘w\(es\)t.*\1′ aa 如果 west 被匹配,则 es 就被存储到内存中,并标记为 1,然后搜索任意个字符(.*),这些 字符后面紧跟着 另外一个 es(\1),找到就显示该行。如果用 egrep 或 grep -E,就不用”\” 号进行转义,直接写成’w(es)t.*\1′就可以了。 8. sort 将文件每一行单词或数字按从 a-z 顺序输出。-u 选项:去除重复词 -r 选项:倒序输 出 -n 选项:按数值排序(这样 10 才会排在 2 的后面) 9. cmp 比较指令 cmp prog.o.bak prog.o //-c 和-w 同理 //输入 prog.o.bak prog.o differ: char 4, line 1 //表示第一行第四个字符不同 $ mkdir 创建子目录 5 101 141 //表示第五个字节在 prog.o.bak 中是八进制 -l cmp -l prog.o.bak prog.o 101,在 prog.o 中是 141 cmp -s prog.c.bak prog.c //文件相同,给出值 0,不同,给出值 1,发生错误,给出值 2。 10.diff : diff /usr/xu mine //把目录/usr/xu 中名为 mine 的文件与当前目录中的 mine 文件进 行比较。 11. 文件目录 $ pwd 显示当前路径(目录) $ cd 改变当前工作目录,或返回个人主目 录 . 和..目录 12. 基本操作----shell ①文件名缩写(模式)$ ls ②转义字符\ echo *, ③I/O 重定向 $ ls > tmp 标准输入文件,标准输出文件,标准错误输出文件 ④管道 $ who | grep pts | wc -l 计算用户所使用的仿真终端数量. //管道线上的程序是同时运 行的,它们之间存在通信。 ⑤进程 $ who; whoami 多个命令同时运行 $ 命令& 后台运行 $ ls a*[1-9].c ls ‘*’ $ ls -l >tmp $ who | wc -l 计算所有用户登录的终端数 $ rmdir 删除子目录 *.c echo \*, $ ls >>tmp $ wc
$ kill 终止某个进程 $ echo $PATH $ cd $d $ at hh:mm 定时运行某些命令 $ PATH=$PATH:$HOME/bin $ PS1='`whoami`:`pwd` >' $ ps 显示当前运行的进程 $ nohup command 注销后仍将运行 ⑥设置 shell 内部变量值 $ PS1=C:\\\> $ echo $HOME $ d=/home/lls/c 三:文件系统 1. 文件类型 件、二进制文件(程序、数据库等)。 查看文件类型$ls -l ; 分析文件结构$od -x 2. 绝对路径:从根目录出发到某个文件的搜索路径。如:/home/user1/myc/p1.c 相 对 路 径 : 从 当 前 目 录 出 发 到 某 个 文 件 的 搜 索 路 径 。 如 : myc/p1.c, 3. 文件权限 $ ls –l a.out ① 目录文件:包含其它文件的文件。 ./bin/prog1, ../user2/file1 ③设备文件:键盘、显示器、打印机、硬盘等。 ② 常规文件:文本文 -rwxr-xr-x 1 user1 users 9319 2010-02-09 23:56 a.out rwx:读、写、运行 9 个权限位,每 3 个为一组,分别代表文件所有者、同组用户和其他用户的权限。 更改文件权限 chmod 目录文件权限 x: 是否可以存取目录中的文件。 r: 是否可以对目录进行文件列表。可以 存取已知的文件。 w:是否可以增加、删除目录中的文件。 4. 文件的组成:文件名、i 节点、文件内容。i 节点中记录文件权限、所有者、修改日期、 $ chmod –w a.out $ chmod 777 a.out 长度、存放位置等等。 //给 file1 所对应的 i 节点增加一个文件名 file2 //删除文件名 file2。对应的 i 节点和文件内容依然存在。 //删除文件名 file1。由于没有文件名指向该 i 节点,系统删除该 i 节点及其 $ ln file1 file2 $ rm file2 $ rm file1 对应的文件内容 5. 设备文件 UNIX 的精华思想之一就是在文件系统中处理外部设备,按普通文件来处理外设。 $ ls -l /dev $ cat c/sig.c >/dev/pts/1 $ echo hello! > /dev/pts/0 $ cp tmp /dev/pts/0 四:流编辑器 sed 1.$ sed 's/UNIX/Linux/g' file 改变 file 本身。 将 file 中的 UNIX 替换成 Linux 显示在屏幕上,但不
显示 file 文件的前 10 行 不显示包含 pattern 的行。 $ who | sed 's/ .*//' 显示当前登录用户,只显示用户名。 $ who am i |sed 's/ .*//' 获取我的登录名. $ sed '10q' file $ sed '/pattern/d' file $ sed -n '/pattern/p' file 仅显示包含 pattern 的行。sed 默认显示每一行,-n 选项关 闭自动显示功能。 sed -n ‘/pattern/p’ file 具有过滤功能,与 grep pattern file 功 能相同。 $ ls -l $ ls -l | sed -n '/^d/p' 长格式列出当前目录下的子目录 | sed -n '/^d/p'|sed 's/.* //' 列出当前目录下的子目录 pattern: ed pattern | grep '^d' 列出当前目录下的子目录 | grep '^d' | sed 's/.* //' 列出当前子目录名 sed 的局限性 由于 sed 处理的是输入流,一旦读入一行,前面的行就过去了,无法再次取 回,因此 sed 不具备行运算的能力。例如 $ sed '$-1d' 是非法的 2. 过滤器 grep,fgrep,egrep $ grep pattern file $ grep '^void' sig.c 显示 sig.c 文件中以 void 开头的行 $ ls -l $ ls -l fgrep 功能较弱,但处理大文件的能力强,egrep 使用扩展正则表达式,功能强大。 3. sort----排序 $ ls | sort 4. tail、head $ tail file 显示 file 的最后 10 行 $ tail -5 file 显示 file 的最后 5 行 $ head file 显示 file 的前 10 行 $ head -5 file 显示 file 的前 5 行 五:模式匹配与处理语言 awk 一般使用形式: $ awk 'program' filename $ commd | awk 'program ' program 的形式 pattern1 {action1} pattern2{action2}…… pattern: ed 的正则表达式,逻辑表达式 action:如 print、printf 等 缺省 $ awk '/pattern/' file 显示匹配模式的每一行,功能同 grep $ awk '{print}' 显示每一行,功能同 cat 记录、字段 每一行为一条记录,NR 为记录数 每一个非空的字符串为一个字段,使用$1、$2、…标记,$0 为整行,NF 为字段数 $ awk '{print NR, $0}' file 显示 file,并在行首加上行号 $ ls –l | awk ' /^d/{print}' 长格式列出当前目录下的子目录 $ ls –l | awk ' /^d/{print $8}' 列出当前目录下的子目录 打印(显示)
sig.c $ ls –l | awk '{print NR, ": " $1, $8}' $ awk '{printf("%d: %s\n", NR, $0)} ' pattern 字段运算、模式表达式、逻辑表达式 $ ls –l | awk '$5~/.....*/' 列出长度超过 999 字节的文件 $ ls –l | awk '$5 !~ /.....*/' 列出长度小于等于 999 字节的文件 $ ls –l | awk '$5=="4096"' 列出长度为 4096 字节的文件 $ ls –l | awk 'length($5)>3' 列出长度超过 999 字节的文件 $ ls –l | awk '!(length($5)>3) ' 列出长度小于等于 999 字节的文件 特殊 pattern awk 'BEGIN{初始化动作}' awk 'END{结束动作}' 变量和运算 举例:打印某个文件的行数、单词数和字符数 $ awk '{ nw += NF nc +=length($0)+1 } END{ print NR, nw,nc }' 流程控制 寻找文件中相同的相邻单词 $ awk 'NF>0{ //这段程序的功能与 wc 命令的功能完全一样。 sig.c if ($1==lastword) printf("double %s, line %d:\n%s\n", $1,NR,$0) for (i=2; i<=NF; i++) if ($i==$(i-1)) printf("double %s, line %d:\n%s\n", $i,NR,$0) lastword=$NF } ' tmp 流程控制(二) while 语句 while (condition){ statement1 statement2 … } break:跳出循环 continue:下一个循环 next:下一条记录,回到 awk 程序开始 exit:跳转至 END 模式或结束 内部变量(部分) FILENAME 当前输入文件名
输入记录的分割符(默认为换行符) 输入字段的分隔符(默认为空格、制表符) 当前记录的字段数 当前记录数 RS FS NF NR OFS 输出字段的分隔符(默认为空格) ORS 输出记录的分隔符(默认为换行) 内部函数(部分) cos(expr) 求余弦 exp(expr) 求自然指数 index(s1,s2) int(expr) length(s) 求字符串长度 log(expr) 求自然对数 sin(expr) split(s, a, c) 按分隔符 c 将 s 放入 a[1],a[2],…中 substr(s,m,n) 求 s 的子串,从第 m 个字符开始,共 n 个字符。 数组 $ awk '{line[NR] = $0} 求正玄 是否字符串 s2 位于 s1 中 取整 END{ # do what you want for (i=1; i<=NR; i++) print line[i] } ' 流处理程序的约定,当给定文件名时,数据从文件中读取,否则从标准输入读取。这样便于 管道和重定向的使用。 awk用于格式化报文或者从文件中抽取数据包. 1.$awk '{print $0}' gefforey.txt | tee gefforey.doc 该命令将在屏幕输出 gefforey.txt 文件内容并将其内容复制到 gefforey.doc 文件中. 2.$awk -F: '{print $1}' gefforey.log 该命令以:为单位读取 gefforey.log 文件中第一列内容. 3.$awk 'BEGIN {print "Name Belt\n------------"} {print $1"\t"$3}' gefforey.txt 该命令将在屏幕首先输出"Name Belt",第二行输出"------------",并在输出文件内容的时 候,每列之间间隔一个 TAB 位.可以在 print 语句之后加上 END {print "end of output"}, 那么将会在文件内容输出结束的时候打印"end of output". 4.$awk '$2 ~ /^baidu$/ {print $0}' gefforey.txt 该命令显示 gefforey.txt 文件中以空格分隔的第二列字符串是"baidu"的所有行. 5.$awk '{if($2 ~ /^baidu$/) print $0}' gefforey.txt 该命令判断如果某行第二列字符串为"baidu",则打印出该行. 6.$awk '{if($2 < $3) print $0}' gefforey.txt 该命令显示判断如果某行第二列值小于第三列值,则打印该行.awk 的条件操作符有: < 小于,> = 大于等于,< = 小于等于,~ 匹配正则表达式,= = 等于,!~ 不匹配正则 表达式,!= 不等于 7.$awk '{if($2 =="google1" && $3=="google2") print $0}' gefforey.txt 该命令判断如果某行第二列值为"google1"并且第三列值为"google2",则打印出该行.awk
的逻辑表达式有:&& AND,|| O R,! 非. 8.$awk '{print NF,NR,$0} END{print FILENAME}' gefforey.txt 该命令会输出浏览记录的域个数和已读的记录数,并在输出结尾打印文件名. 六:vi 编辑器 由 BSD UNIX 的作者 Bill Joy 编写 分两种工作模式:命令模式、编辑模式。a、i、o、O 命令进入编辑模式,ESC 退出编辑模式。 在命令模式下,可使用所有的 ed 命令。 退出:按住 esc+shift+; 然后输入 wq 七:图形界面系统管理 1.X server 处理输出 接受 X client 的输出请求,驱动硬件显示 处理输入 接受键盘、鼠标的输入,当作“事件”传送给适当的客户程序。 窗口管理器 一个特殊的 X 客户程序,具有改变窗口大小、位置、堆放层次等功能。 桌面系统 另一个特殊的 X 客户程序,依赖窗口管理器,控制桌面、菜单的位置、风格、效果等。 2. X 协议 : X 系统采用客户-服务器模型,带来如下优点 X server 屏蔽了硬件特性,使得 X client 和 X server 之间的 X 协议是一个完全抽象的协 议,具有很强的可移植性 将 X 协议构建在网络协议之上,X server 和 X client 可以运行在不同的机器上,这带来了 很大的灵活性。 3.提示 当用户使用 X 协议登录远程计算机时,本地运行的是 X server,远程计算机运行的应用程 序是 X client。 4. X 开发接口 X Library 最底层的程序界面,主要功能是存取 X protocol 的服务 常见的有:Xlib、Motif、Qt X Toolkit X Library 基础上的拓展,提供大量函数或组件。 种类很多,有 Motif、OpenLook、Gimp、X foums、X Toolkit(Xt)等 5. 激活超级用户(root)(非必须) 为了安全,Ubuntu Linux 默认禁用 root 用户。使用 sudo 命令可以提升权限,只是有些麻 烦。 $ sudo vi /etc/gdm/gdm.conf //也可以通过主菜单“系统”->“系统管理”->“登录窗口”进入“登录窗口首选项”,在 “安全”选项页中选中“允许本地系统管理员登录”。 $ sudo passwd root 更改 root 用户口令 重启系统 6. 网络配置 IP 地址、子网掩码、默认网关 将其中一行“AllowRoot=false”改为“AllowRoot=true”
分享到:
收藏