UNIX 常用知识系列讲座(五)

Posted by NosaLee in UNIX/Linux on 18-08-2011. Tags: , ,

作者:牧山道人
原文地址:http://www.seeksunslowly.com/unix-basic-lecture-5
转载请注明出处,谢谢。
_____________________________________

笔者根据 7 年多的实作经验编写了该系列讲座,共分为 5 讲,每讲 10 个要点。
这 50 个要点涵盖了操作 UNIX 的必备知识及正确编写 shell 脚本的必要理论,每一要点均附有演示(在本博客中只能略过,实际培训才有办法演示)。

该讲座在之前任职的公司举办过两次,反映非常好,学员都称专业、有用、获益匪浅。
若您或所在企业有现场培训需要(现场培训的效果,您懂的:)),请留下 QQ 及电话,笔者会及时与您商谈。

41、使用 vi
放弃那种写个小脚本先在本地编辑再 ftp 的方式吧!耍 UNIX,必须得学会使用 vi,当你习惯使用它后,你会喜欢上它。
刚开始会很难使用,但请一定去慢慢适应它,直至成为一种习惯。

以下三节是一些常用基本知识,掌握这些知识后,vi 就是你身边的一个趁手工具。

vi 三种模式
编辑模式 在第三种模式中按 a、i、o 等。
命令行/搜索模式 按 : 或 / 进入。
正文命令模式 先按切换,然后直接敲命令。

进入方法
vi 进入 vi 而不读入任何文件。
vi filename 进入 vi 并读入指定名称的文件(新、旧文件均可),最常用。
vi +n filename 进入 vi 并且由文件的第 n 行开始。
vi + filename 进入 vi 并且由文件的最后一行开始。
vi +/word filename 进入 vi 并且由文件的 word 这个字开始。
vi filenames 进入 vi 并且将各指定文件列入名单内,第一个文件先读入。
vedit 进入 vi 并且在输入方式时会在状态行显示”INSERT MODE”字样。

编辑数个文件(利用vi filenames进入 vi 后)的命令行命令。
:args 显示编辑名单中的各个文件名。
:n 读入编辑名单中的下一个文件,最常用。
:rew 读入编辑名单中的第一个文件。
:e# 读入编辑名单内的前一个文件。
:e file 读入另一个文件进 vi (此文件可不在编辑名单内),若原文件经修改还没有存档,则应先存档。
:e! file 强迫读入另一个文件进入vi,原文件不作存档动作。

演示

42、vi 常用正文命令
^F – PageDown ^B – PageUp
^G – display the file information and current line No.
n – 继续搜寻 o – 在当前行后面插入一新行
Esc – 在输入模式和正文命令模式间切换
G – 移到档案尾 $ – 移到行尾
^ – 移到本行第一个不为空白的字符处
^U – Half PageUp 0 – 移到行首
[[ – 移到档案首 ]]- 移到档案尾
h,j,k,l – 分别控制光标左, 下, 上, 右移一格
^D – Half PageDown e – 移到当前 word 的尾部
w – 移到下个 Word 的开头 b – 移到上个 Word 的开头
yw – 复制光标所在处到字尾的字符 (必须与p搭配使用)
#command – 执行 # 次 command (#表示数字)
x – 删除光标后面的一个字符 X–删除光标前面的一个字符
dd – 删除光标所在行 p – 将缓冲区内的字符粘贴到光标所在位置
yy – 复制光标所在行(必须与p搭配使用)
r – 取代光标所在处的字符 R – 取代字符直到按 Esc 为止
cw – 更改光标所在处的字到字尾 $ 处 ($由 vi 自动产生)
c#w – 更改#个字符 dw – 删除光标所在处的word
d0 – 从行首删到光标处 d$ – 从光标处删到行尾 (同 D)
#1,#2 w filename – 摘取文章的某一段,存成另一个文件. # 代表行号. 例如 30,50 w nice, 将您正在编辑文章的第 30~50 行存成 nice 这个文件.
!command – 执行命令, 并将结果插入到光标所在行的下一行
演示

43、vi 常用命令行指令
/string – 查找 string
:set nu – 在每一行列出行号
:w – Save :w! – 无条件存储
:w FileName – Save as… :wq – Save & quit (同 ZZ 及 :x)
:q – Quit :q! – Do not save and quit
:e FileName – Open file & edit It
:r FileName – 从档案中读入, 并插入当前档案尾部
:dG – 刪除档案中所有內容 :$ – 移到档案尾 (同 G)
:n – n为一数字, 表示到第 n 行 (同 nG)
:!command – 暂时退出vi并执行 command, 完成后回到 vi
:sh – 暂时退出 vi 到 shell 提示符下, 按 ^D (或 exit)可返回 vi
:n,md – 删除 n 至 m 行
:1,$s/string/replace/g – 将全文的 string 字符串取代为 replace 字符串, 其中 1,$s 就是指搜寻区间为文章从头至尾, g 则是表示全部取代不必确认
:%s/string/replace/c – 同样会将全文的 string 字符串取代为 replace 字符串, %s 和 1,$s 是功能相同, c 则是表示要替代之前必须再次确认是否取代
:1,20s/string/replace/g – 将 1 至 20 行间的 string 替代为 relpace 字符串
:%s/^/some string – 在文件的第一行至最后一行的行首插入”some string” (%s可取代为1,4s等)
:%s/$/some string – 在文件的第一行至最后一行的行尾插入”some string” (%s可取代为1,4s等)

演示

44、使用 awk
常用格式
awk ‘{print $n, …, $m}’ 打印出源串的第 n … m 列,在'{}’内可使用””加入任意字符串,原样输出。
-Fc 用字符 c 分隔源串(不指定时默认以空格分隔),如 awk -F”:” ‘{print $n}’,分隔符可以是字符串。
substr($n,m,k) 从 $n 字段的第 m 位开始取出 k 个字符,如 awk ‘{print substr($1,4,3)}’,其中 4, 3 也可为变量。

注意 awk 的处理能力远不止这些,实际上,它就是一种脚本语言,你可以编写 awk 脚本进行更复杂的处理。有兴趣的,可以下来自己去研究。

演示

45、使用 awk 循环读取数据文件、配置文件的经典写法
cat /rasbkg/test/cfg.txt | awk -F: ‘{print $2, $3}’ | while read num str
do
echo “num: ${num}”
echo “str: ${str}”
commands
done

演示

46、使用 ftp
Why?不仅要会使用 Windows FTP 工具,还要掌握常用命令,因为 ftp 在 script 中会经常用到。
注意 使用方式请参考第三讲第 8 节。
常用参数及内部命令
open Host (IP or HostName) 连接主机
cd 切换目录
lcd 切换发起方路径
ls 列示服务器文件
get 下载一个档案
mget 下载多个档案
put 上传一个档案
mput 上传多个档案
bye 断开连接, 回到发起方
user UserName Password 登录或切换用户
-i 上传下载文件时不征求确认
-n 限制 ftp 的自动登录, 即不使用.netrc文件,不出现登录提示行, -i 和 -n 参数在编写自动执行的 ftp 程序中应用广泛, 因为此时用户不能干预.
-T n 设置登录超时 (单位: S)
-p 印出回显结果 (特别是在 HP-UX 上, ftp 脚本不加此项便无回显)
bin 以二进制格式上传/下载文件
delete 删除文件
mdelete 批量删除文件

演示

47、使用 sed 处理文件
sed 也是一个强大的工具,处理文件特别简单高效。
常用形式
sed command files
command 基本可套用 vi 查找模式 / 后的字符串(%s 不带 %)。
files 待处理的文件。
注意 sed 不实际修改文件,一般用它处理后将输出重定向到另一文件以达到目的。
演示

48、查看文件前/后 n 行,以及跟踪文件变化
从尾部开始查看 tail ? Filename
-n 显示文件最后 n 行内容(常用于大文件,用 vi、cat 无法快速显示、查找)。
-f 跟踪文件变化。
+n 从第 n 行显示到文件最后一行(记下文件上次行数,再从该行开始扫描最近增加的内容时常用)。
从头部开始查看 head -n Filename,功能与 tail -n filename 相反。
演示

49、查看 OS 信息
Why?必须清楚你的工作环境,上报错误、交流经验、告知第三方时需要这些基本信息。
命令 uname
常用参数
-m 显示机器的ID。
-M 显示机器型号。
-r 显示操作系统发行的版本号(release number)。
-s 显示系统名。
-v 显示操作系统版本号。
-S name改变系统名。
-a 显示机器ID,操作系统的版本号及系统名(最常用)。

演示

50、文件、目录查找
命令 find
格式 find pathname …

…部分为参数,较常用的有以下几个
-name filename 指定档案名(常用)。
-mtime n 指定修改时间在 n 天前的档案(+n,大于n天;-n,小于n天;n,刚好为n天)。
-atime n 指定访问时间在 n 天前的档案(+n,大于n天;-n,小于n天;n,刚好为n天)。
-user username 指定所有者。
-type t 指定档案类型。
-exec command{} 找到档案后要执行的命令(比如找到全部的core档案再删之find / -name core -exec rm{})。
find . 列示当前目录及其下所有子目录及档案(常用)。

演示

Post a comment