Linux总结_linux总结
Linux总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“linux总结”。
linux命令总结:
startx
从字符界面到图形界面。
tar czvf aa.tar.gz aa 压缩文件aa tar zxvf aa.tar.gz
解压文件aa mv aa /home/admin/ 移动文件aa到/home/admin/下
mv aa bb
把aa文件重命名为bb。
用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同MSDOS下的ren和move的组合。
语法:mv [选项] 源文件或目录 目标文件或目录
说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
命令中各选项的含义为:
-I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。
-f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。
如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户用mv命令破坏另一个文件,使用mv命令移动文件时,最好使用i选项。cp aa /home/admin/
拷贝文件aa到/home/admin/下。
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。
语法: cp [选项] 源文件或目录 目标文件或目录
说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
该命令的各选项含义如下:
-a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
l 不作拷贝,只是链接文件。
需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
rm-rfi aa
删除aa文件夹包含子其目录
用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。
rm命令的一般形式为:
rm [选项] 文件„
如果没有使用-r选项,则rm不会删除目录。
该命令的各选项含义如下:
-f 忽略不存在的文件,从不给出提示。
-r 指示rm将参数中列出的全部目录和子目录均递归地删除。
b 对文件名中的不可显示字符用八进制逃逸字符显示。
F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记 “@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。
-i 在输出的第一列显示文件的i节点号。
-l 以长格式来显示文件的详细信息。这个选项最常用。
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字
对于符号链接文件,显示的文件名之后有“―〉”和引用文件路径名
date
显示当前时间。
Cal-m : 以星期一为每周的第一天方式显示。
-j : 以凯撒历显示,即以一月一日起的天数显示。
-y : 显示今年年历。
使用权限:所有使用者
使用方式:cal [-mjy] [month [year]]
说明:
显示日历。若只有一个参数,则代表年份(1-9999),显示该年的年历。年份必须全部写出:``cal 89 将不会是显示 1989 年的年历。使用两个参数,则表示月份及年份。若没有参数则显示这个月的月历。
1752 年 9 月第 3 日起改用西洋新历,因这时大部份的国家都采用新历,有 10 天被去除,所以该月份的月历有些不同。在此之前为西洋旧历。
匡兜∏
-m : 以星期一为每周的第一天方式显示。
-j : 以凯撒历显示,即以一月一日起的天数显示。
-y : 显示今年年历。
范例
cal : 显示本月的月历。
[root@mylinux /root]# date Tue Aug 15 08:00:18 CST 2000 [root@mylinux /root]# cal August 2000
Su Mo Tu We Th Fr Sa 1 2 3 4 5 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[root@mylinux /root]#
cal 2001 : 显示公元 2001 年年历。
[root@mylinux /root]# cal 2001 2001
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 2 3 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 5 1 2 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 29 30 27 28 29 30 31 24 25 26 27 28 29 30 July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 1 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 30 31
[root@mylinux /root]#
cal 5 2001 : 显示公元 2001 年 5 月月历。
[root@mylinux /root]# cal 5 2001 May 2001
Su Mo Tu We Th Fr Sa 1 2 3 4 5 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[root@mylinux /root]#
cal-m : 以星期一为每周的第一天方式,显示本月的月历。
[root@mylinux /root]# cal-m August 2000
Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[root@mylinux /root]#
cal-jy : 以一月一日起的天数显示今年的年历。
[root@mylinux /root]# cal-jy 2000
January February
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 32 33 34 35 36 3 4 5 6 7 8 37 38 39 40 41 42 43 10 11 12 13 14 15 44 45 46 47 48 49 50 16 17 18 19 20 21 22 51 52 53 54 55 56 57 23 24 25 26 27 28 29 58 59 60 30 31
March April
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 61 62 63 64 92
99
79 80 81 82 83 84 85 107 108 109 110 111 112 113 86 87 88 89 90 91 114 115 116 117 118 119 120 121
May June
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 122 123 124 125 126 127 153 154 155
156 157 158 159 160 161 162
163 164 165 166 167 168 169 142 143 144 145 146 147 148 170 171 172 173 174 175 176 149 150 151 152 177 178 179 180 181 182 July August
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 183 214 215 216 217 218
184 185 186 187 188 189 190 219 220 221 222 223 224 225 191 192 193 194 195 196 197 226 227 228 229 230 231 232 198 199 200 201 202 203 204 233 234 235 236 237 238 239 205 206 207 208 209 210 211 240 241 242 243 244 212 213
September October
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 245 246 275 276 277 278 279 280 281
247 248 249 250 251 252 253 282 283 284 285 286 287 288 254 255 256 257 258 259 260 289 290 291 292 293 294 295 261 262 263 264 265 266 267 296 297 298 299 300 301 302 268 269 270 271 272 273 274 303 304 305 November December
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 306 307 308 309 336 337
310 311 312 313 314 315 316 338 339 340 341 342 343 344 317 318 319 320 321 322 323 345 346 347 348 349 350 351 324 325 326 327 328 329 330 352 353 354 355 356 357 358 331 332 333 334 335 359 360 361 362 363 364 365 366 At 使用权限 : 所有使用者
使用方式 : at-V [-q queue] [-f file] [-mldbv] TIME
说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令,TIME 的格式是 HH:MM其中的 HH 为小时,MM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。
如果想要指定超过一天内的时间,则可以用 MMDDYY 或者 MM/DD/YY 的格式,其中 MM 是分钟,DD 是第几日,YY 是指年份。另外,使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间,其中的时间间隔可以是 minutes, hours, days, weeks∶
另外,使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后,at 会进入交谈模式并要求输入指令或程式,当你输入完后按下 ctrl+D 即可完成所有动作,至于执行的结果将会寄回你的帐号中。
把计 :
-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c...z 以及 A, B,...Z 共 52 个
-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入
-l : 列出所有的指定(使用者也可以直接使用 atq 而不用 at-l)
-d : 删除指定(使用者也可以直接使用 atrm 而不用 at-d)
-v : 列出所有已经完成但尚未删除的指定
例子 :
三天后的下午 5 点锺执行 /bin/ls :
at 5pm + 3 days /bin/ls
三个星期后的下午 5 点锺执行 /bin/ls :
at 5pm + 2 weeks /bin/ls
明天的 17:20 执行 /bin/date :
at 17:20 tomorrow /bin/date
1999 年的最后一天的最后一分钟印出 the end of world!
at 23:59 12/31/1999 echo the end of world!kill 使用权限:所有使用者
使用方式:
kill [-s signal |-p ] [-a ] pid...kill-l [ signal ]
说明:kill 送出一个特定的信号(signal)给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止(TERM)的信号
把计∏
-s(signal): 其中可用的讯号有 HUP(1), KILL(9), TERM(15), 分别代表着重跑, 砍掉, 结束;详细的信号可以用 kill-l
-p : 印出 pid , 并不送出信号
-l(signal): 列出所有可用的信号名称
范例:
将 pid 为 323 的行程砍掉(kill):
kill-9 323
将 pid 为 456 的行程重跑(restart):
kill-HUP 456 kill-9 323
将 pid 为 323 的行程砍掉(kill):
kill-HUP 456 将 pid 为 456 的行程重跑(restart): ps 显示瞬间行程(proce)的动态
-e 显示所有进程。-f 全格式。
-h 不显示标题。-l 长格式。-w 宽输出。
a显示终端上的所有进程,包括其他用户的进程.r只显示正在运行的进程.x显示没有控制终端的进程.O[+|-] k1 [,[+|-] k2 [,„]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表.对于ps的不同格式都存在着默认的顺序指定.这些默认顺序可以被用户的指定所覆盖.其中“+”字符是可选的,“-”字符是倒转指定键的方向.最常用的三个参数是u、a、x.使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间行程(proce)的动态
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x)输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码(minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止(通悸□□缜b进行 I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内(即时系统或捱A I/O)START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
范例:
ps
PID TTY TIME CMD 2791 ttyp0 00:00:00 tcsh 3092 ttyp0 00:00:00 ps % ps-A
PID TTY TIME CMD 1 ? 00:00:03 init 2 ? 00:00:00 kflushd 3 ? 00:00:00 kpiod 4 ? 00:00:00 kswapd ? 00:00:00 mdrecoveryd.......% ps-aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init Who 该命令主要用于查看当前在线上的用户情况。
-m 和“who am i”的作用一样,显示运行该程序的用户名。
-q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。-s 忽略。主要是用于和其他版本的who命令兼容。
-i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。其中“.”符号代表该用户在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。
-H,--heading 显示一行列标题。常用的标题如表4-2所示。
netstat 命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。
-a 显示所有socket,包括正在监听的。
-c 每隔1秒就重新显示一遍,直到用户中断它。-i 显示所有网络接口的信息,格式同“ifconfig-e”。
-n 以网络IP地址代替名称,显示出网络连接情形。
-r 显示核心路由表,格式同“route-e”。
-t 显示TCP协议的连接情况。-u 显示UDP协议的连接情况。-v 显示正在进行的工作。
vi 使用说明:
vi aa.c 编辑aa.c文件,:q 不保存退出。:wq保存退出。:se nu 显示行号。1 将aaa,bbb,ccc替换成aaa bbb ccc 方法::%s/,/^M/g
^M是用ctrl-v然后ctrl-m敲出来的 2 将 aaa
bbb
ccc替换成aaa,bbb,ccc
方法::%s/n/,/ Crontab 使用权限 : 所有使用者
使用方式 :
crontab [-u user ] filecrontab [-u user ] {-l |-r |-e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用-u user 的话,就是表示设定自己的时程表。
餐数 :
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。
/etc/aliases 使用权限:系统管理者
使用方式: 请用 newaliases 更新资料库
说明:
sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时,它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能,在 mailinglist 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu 的 mailinglist,但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。
/etc/aliases 是一个文字模式的档案,sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。范例:
# newaliases
下面命令会做相同的事,# sendmail-bi
相关命令:
mail, mailq, newaliases, sendmail
” mail [返回] Mail
使用权限:所有使用者
使用方式:mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2...]
说明:
mail 不仅只是一个指令,mail 还是一个电子邮件程式,不过利用 mail 来读信的人应该很少吧!对于系统管理者来说 mail 就很有用,因为管理者可以用 mail 写成 script,定期寄一些备忘录提醒系统的使用者。
参数:
i 忽略 tty 的中断讯号。(interrupt)
I 强迫设成互动模式。(Interactive)
v 列印出讯息,例如送信的地点、状态等等。(verbose)
n 不读入 mail.rc 设定档。
s 邮件标题。
c cc 邮件地址。
b bcc 邮件地址。
范例:
将信件送给一个或以上的电子邮件地址,由于没有加入其他的选项,使用者必须输入标题与信件的内容等。而 user2 没有主机位置,就会送给邮件伺服器的 user2 使用者。
mail user1@email.addre
mail user1@email.addre user2
将 mail.txt 的内容寄给 user2 同时 cc 给 user1。如果将这一行指令设成 cronjob 就可以定时将备忘录寄给系统使用者。
mail-s 标题-c user1 user2
使用方式 : mesg [y|n]
说明 : 决定是否允许其他人传讯息到自己的终端机介面把计 ∏
y : 允许讯息传到终端机介面上。
n : 不允许讯息传到终端机介面上。
如果没有设定,则讯息传递与否则由终端机界面目前状态而定。
例子 :
改变目前讯息设定,改成不允许讯息传到终端机介面上 : mesg n
与 mesg 相关的指令有: talk,write,wall。
Talk 使用权限 : 所有使用者
使用方式 :
talk person [ttyname]
说明 : 与其他使用者对谈
把计 :
person : 预备对谈的使用者帐号,如果该使用者在其他机器上,则可输入 person@machine.name
ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息
例子.1 :
与现在机器上的使用者Rollaend对谈,此时 Rollaend 只有一个连线 :
talk Rollaend
接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee`即可开始对谈,结束请按 ctrl+c
例子.2 :与linuxfab.cx上的使用者Rollaend对谈,使用pts/2来对谈 :
talk Rollaend@linuxfab.cx pts/2
接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee@jzlee.home`即可开始对谈,结束请按 ctrl+c
注意 : 若萤幕的字会出现不正常的字元,试着按 ctrl+l 更新萤幕画面。
Wall 使用权限 : 所有使用者
使用方式 :
wall [ meage ]
使用说明:
wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF(通常用 Ctrl+D)∶
例子 :
传讯息“hi” 给每一个使用者 :
wall hi write 使用权限 : 所有使用者
使用方式 :
write user [ttyname]
说明 : 传讯息给其他使用者
把计 :
user : 预备传讯息的使用者帐号
ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息
例子.1 :
传讯息给 Rollaend,此时 Rollaend 只有一个连线 :
write Rollaend
接下来就是将讯息打上去,结束请按 ctrl+c
例子.2 :传讯息给 Rollaend,Rollaend 的连线有 pts/2,pts/3 :
write Rollaend pts/2
接下来就是将讯息打上去,结束请按 ctrl+c
注意 : 若对方设定 mesg n,则此时讯席将无法传给对方
Nice 使用权限:所有使用者
使用方式:nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]
说明:以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为-20(最高优先序)到 19(最低优先序)
把计∏
-n adjustment,-adjustment,--adjustment=adjustment 皆为将该原有优先序的增加 adjustment
--help 显示求助讯息
--version 显示版本资讯
范例:
将 ls 的优先序加 1 并执行 :
nice-n 1 ls
将 ls 的优先序加 10 并执行 :
nice ls将 ls 的优先序加 10 并执行
注意 : 优先序(priority)为作业系统用来决定 CPU 分配的参数,Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程,优先序越高,所可能获得的 CPU时间就越多。Linux常见命令:进程查看
who命令
该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。
who命令的常用语法格式如下:
who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--meage] [--mesg] [--version] [--writable] [file] [am i]
所有的选项都是可选的,也就是说可以单独使用who命令。不使用任何选项时,who命令将显示以下三项内容:
login name:登录用户名;
terminal line:使用终端设备;
login time:登录到系统的时间。
如果给出的是两个非选项参数,那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这两个参数是“am i”,即该命令格式为:“who am i”。
下面对who命令的常用参数进行说明。
-m 和“who am i”的作用一样,显示运行该程序的用户名。
-q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。
-s 忽略。主要是用于和其他版本的who命令兼容。
-i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。其中“.”符号代表该用户在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。
-H,--heading 显示一行列标题。常用的标题如表4-2所示。
表4-2 who命令输出常用标题
标 题
说 明
USER
用户登录帐号
LINE
用户登录使用终端
LOGIN-TIME
用户登录时间
IDLE
用户空闲时间,即未进行操作的时间
PID
用户登录shell的进程ID
FROM
用户网络地址
-w,-T--mesg,--meage,--writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态:
+:允许写信息;
-:不允许写信息;
?:不能找到终端设备。
--help 在标准输出上显示帮助信息。
--version 在标准输出上显示版本信息。
下面介绍who命令的一些基本用法。
如果需要查看在系统上究竟有哪些用户,可以直接使用who命令。
[例17] 查看登录到系统的用户情况
$ who
root tty1 Mar 17 13:49
foxy tty2 Mar 17 13:49
root tty3 Mar 17 13:49
bbs ttyp0 Mar 17 13:49(river.net)
可以看到,现在系统一共有四个用户。第一列是登录用户的帐号;第二列是登录所使用的终端;第三列是登录时间;第四列是用户从什么地方登录的网络地址,这里是域名。
一般来说,这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观,因为没有标题说明,不容易看懂,这时就需要使用-H选项了。
[例18] 查看登录用户的详细情况,键入:
$ who-uH
显示如下:
USER LINE LOGIN-TIME IDLE FROM
root tty1 Mar 17 13:49.foxy tty2 Mar 17 13:49 00:01
root tty3 Mar 17 13:49 00:01
bbs ttyp0 Mar 17 13:49 00:01(river.net)
这样一目了然。其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。第一个root用户的IDLE项是一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。
最后来看看使用“who am i”格式命令的结果:
233.river.net!root tty1 Mar 17 13:49
可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。
who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。
w命令
该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。
w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。
其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。下面介绍该命令的具体用法和参数。
语法格式如下:
w-[husfV] [user]
下面对参数进行说明:
-h 不显示标题。
-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。
-s 使用短模式。不显示登录时间、JCPU和PCPU时间。
-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。
-V 显示版本信息。
User 只显示指定用户的相关情况。
[例19] 显示当前登录到系统的用户的详细情况
$ w
2:50pm up 2 min,4 users,load average:0.22,0.16,0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 2:49pm 0:00s 0.56s 0.10s w
foxy tty2 2:49pm 1:09 0.42s 0.42s bash
root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3 bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net ps命令
1.ps简介
前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
2.ps命令及其参数
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了。
该命令语法格式如下:
ps [选项]
下面对命令选项进行说明:
-e 显示所有进程。
-f 全格式。
-h 不显示标题。
-l 长格式。
-w 宽输出。
a 显示终端上的所有进程,包括其他用户的进程。
r 只显示正在运行的进程。
x 显示没有控制终端的进程。
O[+|-] k1 [,[+|-] k2 [,„]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中“+”字符是可选的,“-”字符是倒转指定键的方向。
pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面紧接着给出,中间不能插入空格。比如:ps-f1,4,5。
以下介绍长命令行选项,这些选项都使用“--”开头:
--sort X[+|-] key [,[+|-] key [,„]] 从SORT KEYS段中选一个多字母键。“+”字符是可选的,因为默认的方向就是按数字升序或者词典顺序。比如: ps-jax-sort=uid,-ppid,+pid。
--help 显示帮助信息。
--version 显示该命令的版本信息。
在前面的选项说明中提到了排序键,接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值,并非仅用于某些输出格式的伪值。排序键列表见表4-3。
表4-3 排序键列表
短格式
长格式
说 明
c
cmd
可执行的简单名称
C
cmdline
完整命令行
f
flags
长模式标志
g
pgrp
进程的组ID
G
tpgid
控制tty进程组ID
j
cutime
累计用户时间
J
cstime
累计系统时间
k
utime
用户时间
K
stime
系统时间
m
min_flt 次要页错误的数量 M maj_flt 主要页错误的数量 n cmin_flt 累计次要页错误 N cmaj_flt 累计主要页错误 o seion 对话ID p pid 进程ID P ppid 父进程ID r r 驻留大小 R resident 驻留页 s size 内存大小(千字节)S share 共享页的数量 t tty tty次要设备号 T start_time 进程启动的时间 U uid UID u user 用户名
v vsize 总的虚拟内存数量(字节)y priority 内核调度优先级 3.常用p Ytalk 功能说明:与其他用户交谈。
语
法:ytalk [-isxY][-h][用户名称...]
补充说明:通过ytalk指令,你可以和其他用户线上交谈,如果想和其他主机的用户交谈,在用户名称后加上其主机名称或IP地址即可。
参
数:
-h 指定交谈对象所在的远端主机。
-i 用提醒声响代替显示信息。
-s 在指令提示符号先开启ytalk交谈窗。
-x 关闭图形界面。
-Y 所有必须回应yes或no的问题,都必须用大写英文字母“Y”或“N”回答。
write
功能说明:传送信息。
语
法:write [用户名称][终端机编号]
补充说明:通过write指令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write指令就会将信息传给对方。如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号。
wall(write all)
功能说明:传送信息。
语
法:wall [公告信息]
补充说明:通过wall指令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall指令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
uux
功能说明:在远端的UUCP主机上执行指令。
语
法:uux [-bcCIjlnrvz][-a][-g][-s][-x][--help][指令]
补充说明:uux可在远端的UUCP主机上执行指令或是执行本机上的指令,但在执行时会使用远端电脑的文件。
参
数:
-或-p或--stdin 直接从键盘读取要执行的指令。
-a或--requestor 执行邮件地址,以便寄送状态信息。
-b或--erturn-stdin 在屏幕上显示状态信息。
-c或--nocopy 不用将文件复制到缓冲区。
-C或--copy 将文件复制到缓冲区。
-g或--grade 指定文件传送作业的优先顺序。
-I或--config file 指定uux配置文件。
-j或--jobid 显示作业编号。
-l或--link 将本机上的文件连接到缓冲区。
-n或--notification=no 无论发生任何状态,都不寄邮件通知用户。
-r或--nouucico 不要立即启动uucico服务程序,仅将作业送到队列中,然后再执行。
-s或--status 将完成状态保存为指定的文件。
-v或--version 显示版本信息。
-x或--debug 指定排错层级。
-z或--notification=error 若发生错误,则以邮件来通知用户。
--help 显示帮助。
uustat
功能说明:显示UUCP目前的状况。
语
法:uustat [-aeiKmMNpqQRv][-B][-c][-C][-I][-k][-o][-r][-s][-S][-u][-U][-W][-y][-x][--help]
补充说明:执行uucp与uux指令后,会先将工作送到队列,再由uucico来执行工作。uustat可显示,删除或启动队列中等待执行的工作。
参
数:
-a或-all 显示全部的UUCP工作。
-B或--mail-lines 与-M或-N参数一并使用,用来指定邮件中要包含多少行的信息。
-c或--command 显示与有关的工作。
-C或--not-command 显示与无关的工作。
-e或--executions 仅显示待执行的工作。
-i或--prompt 针对队列中的每项工作,询问使用是否要删除工作。
-I或--config 指定配置文件。
-k或--kill 删除指定的工作。
-m或--status 删除全部的工作。
-M或-mail 将状态信息邮寄给UUCP管理员。
-N或--notify 将状态信息分别邮寄给提出该项工作的用户。
-o或--older-than 显示超过指定时数的工作。
-p或--ps 显示负责UUCP锁定的程序。
-q或--list 显示每台远端主机上所要执行工作的状态。
-Q或--no-list 不显示工作。
-r或--rejuvenate 重新启动指定的工作。
-R或--rejuvenate-all 重新启动全部的工作。
-s或--system 显示与有关的工作。
-S或--not-system 显示与无关的工作。
-v或--version 显示版本信息。
-u或--user 显示与有关的工作。
-U或--not-user 显示与无关的工作。
-W或--comment 要放在邮件信息中的附注。
-y或--younger-than 显示低于指定时数的工作。
-x或--debug 指定排错层级。
--help 显示帮助。
uuname
功能说明:显示全部的UUCP远端主机。
语
法:uuname [-alv][-I][--help]
补充说明:uuname可显示UUCP远端主机。
参
数:
-a或--aliases 显示别名。
-I或--config 指定程序的配置文件。
-l或--local 显示本机名称。
-v或--version 显示版本信息。
--help 显示帮助。
uulog
功能说明:显示UUCP记录文件。
语
法:uulog [-DFISv][-][-f][-I][-n][-s][-u][-X][--help]
补充说明:uulog可用来显示UUCP记录文件中记录。
参
数:
-D或--debuglog 显示排错记录。
-f或--follow 与-F参数类似,但仅显示与指定主机相关的记录。
-I或--config 指定程序的配置文件。
-,-n或--lines 显示记录文件中,从最后算起指定行数的数值。
-s 仅显示记录文件中,与指定文件相关的记录。
-S或--statslog 显示统计记录。
-u或--suer 仅显示记录文件中,与指定用户相关的记录。
-v或--version 显示版本信息。
-X或--debug 设定排错层级。
--help 显示帮助。
tty(teletypewriter)
功能说明:显示终端机连接标准输入设备的文件名称。
语
法:tty [-s][--help][--version]
补充说明:在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty指令查询目前使用的终端机的文件名称。
参
数:
-s或--silent或--quiet 不显示任何信息,只回传状态代码。
--help 在线帮助。
--version 显示版本信息。
traceroute
功能说明:显示数据包到主机间的路径。
语
法:traceroute [-dFlnrvx][-f][-g...][-i][-m][-p][-s][-t][-w][主机名称或IP地址][数据包大小]
补充说明:traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
参
数:
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。
testparm(test parameter)
功能说明:测试Samba的设置是否正确无误。
语
法:testparm [-s][配置文件][ ]
补充说明:执行testparm指令可以简单测试Samba的配置文件,假如测试结果无误,Samba常驻服务就能正确载入该设置值,但并不保证其后的操作如预期般一切正常。
参
数:
-s 不显示提示符号等待用户按下Enter键,就直接列出Samba服务定义信息
ip命令手册
ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。这个手册将分章节介绍ip命令及其选项。本文的原文在http://defiant.coinet.com/iproute2/ip-cref/(2002-10-15 18:40:46)
1.关于这篇文档
2.ip命令的语法
3.ip的错误信息
4.ip link--配置网络设备
4.1.ip link set--改变设备的属性
4.2.ip link show--显示设备属性
5.ip addre--协议地址管理
5.1.ip addre add--添加一个新的协议地址
5.2.ip addre delete--删除一个协议地址
5.3.ip addre show--显示协议地址
5.4.ip addre flush--清除协议地址
6.ip neighbour--neighbour/arp表管理命令
6.1.ip neighbour add--添加一个新的邻接条目
ip neighbour change--修改一个现有的条目
ip neighbour replace--替换一个已有的条目
6.2.ip neighbour delete--删除一个邻接条目
6.3.ip neighbour show--显示网络邻居的信息 6.4.ip neighbour flush--清除邻接条目
1.关于这篇文档
ip是iproute2软件包里面的一个强大的网络配置工具,本文将分章节介绍ip命令及其选项。为了便于理解,作者在本文中列举了很多示例。但是,正如作者所说,这不是一个教程,而是一个使用手册。
2.ip命令的语法
ip命令的用法如下:
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
其中,OPTIONS是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。目前,ip支持如下选项:
-V,-Version 打印ip的版本并退出。
-s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或者多次,输出的信息将更为详尽。
-f,-family 这个选项后面接协议种类,包括:inet、inet6或者link,强调使用的协议种类。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。
-4 是-family inet的简写。
-6 是-family inet6的简写。
-0 是-family link的简写。
-o,-oneline 对每行记录都使用单行输出,回行用字符代替。如果你需要使用wc、grep等工具处理ip的输出,会用到这个选项。
-r,-resolve 查询域名解析系统,用获得的主机名代替主机IP地址。
OBJECT是你要管理或者获取信息的对象。目前ip认识的对象包括: link 网络设备
addre 一个设备的协议(IP或者IPV6)地址
neighbour ARP或者NDISC缓冲区条目
route 路由表条目
rule 路由策略数据库中的规则
maddre 多播地址
mroute 多播路由缓冲区条目
tunnel IP上的通道
另外,所有的对象名都可以简写,例如:addre可以简写为addr,甚至是a。
COMMAND设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或者list)。有些对象不支持所有这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。
ARGUMENTS是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。我们将在后面的章节详细介绍每个命令的使用,命令的默认参数将使用default标出。
几乎所有的关键词都可以简写为前几个字母。在交互工作时,简写的方式非常方便,但是我们不建议在脚本中使用简写形式。另外,在讲述过程中,所有的“官方”简写方式都会在文章中列出。
3.ip的错误信息
由于以下原因,ip可能会操作失败:
命令行语法错误:一个未知的关键词(an unknown keyword);错误的IP地址格式(incorrectly formated IP addre)。在这种情况下,ip会打印出错误信息然后退出,在错误信息中会包含失败的原因。有时ip也会打印帮助信息。参数不能通过一致性校验。由于用户没有提供足够的信息,造成ip无法从参数中编译出内核请求。内核返回某些系统调用的错误。ip使用perror(3)输出错误信息,因此输出的错误信息包含一段注释以及系统调用号。内核返回RTNETLINK请求错误。这类错误信息以“RTNETLIK answers”开头。
ip的所有操作都是原子操作。例如,如果ip执行失败,它不会系统的任何东西,ip link command例外,它会修改某些设备参数。
我们无法列出所有的错误信息,尤其是语法错误。不过,错误信息的意思都非常明确。下面,我们列举一些经常出现的错误信息:
内核不支持netlink(netlink用于在内核模块和用户之间传递信息),会出现以下错误信息:Cannot open netlink socket: Invalid value 内核不支持RTNETLINK,会出现以下错误信息:Cannot talk to rtnetlink: Connect refusedCannot send dump request: Connect refused 如果在编译内核时没有配置CONFIG_IP_MULTIPLE_TABLES选项。在使用ip规则时会出现和下面的信息类似的错误信息:kuznet@kaise $ ip rule listRTNETLINK error: Invalid argumentdump terminated
4.ip link--配置网络设备
对象 link由网络设备,对应的命令显示以及设备的状态变化组成。
命令 set和show(或者list)
4.1.ip link set--改变设备的属性
缩写:set、s 参数:
dev NAME(default)指定进行操作的网络设备
up/down 起动/关闭设备。例如:ip link set dev eth0 up
arp on/off 改变网络设备的NOARP选项。
如果设备处于UP状态,不允许进行这个操作。不过,内核和ip都不会对在这种情况下的这个操作进行检查。在设备处于运行状态下改变这个选项会造成无法预料的后果。multicast on/off 改变网络设备的MULTICAST选项。
dynamic on/off 改变网络设备的DYNAMIC选项。
name NAME 把设备的名字改为NAME(例如:eth0)。如果设备处于运行状态或者已经配置了地址,建议不要进行这个操作。
txqueuelen NUMBER或者txqlen NUMBER 改变设备传输队列的长度。例如:ip link set dev eth0 txqueuelen 100
mtu NUMBER 改变网络设备MTU(最大传输单元)的值。例如:ip link set dev eth0 mtu 1500
addre LLADDRESS 修改网络设备的MAC地址。例如:ip link set dev eth0 addre 00:01:4f:00:15:f1
broadcat LLADDRESS或者brd LLADDRESS 修改数据链路层广播地址。注意:对于大多数的网络设备(例如:以太网),修改链路层广播地址会对网络造成破坏。因此,如果对此没有很深的理解,最好不要使用这个操作。
peer LLADDRESS 当使用点对点连接时,使用这个操作可以修改对端的数据链路层地址。
注意:ip不能修改PROMISC或者ALLMULTI选项。这两个选项已经比较陈旧,而且也不应该随便修改。
注意:如果同时修改多个参数,任何一个修改失败,ip都会立即取消操作。这种情况可能使系统进入无法预料的状态。为了避免出现这种情况,尽量不要使用ip link set同时修改多个参数,例如:ip link set dev eth0 mtu 1500 txqueuelen 100。
4.2.ip link show--显示设备属性
缩写:show、list、lst、sh、ls、l 参数
dev NAME(default)NAME指定网络设备名称,例如:eth0。如果省略了这个参数,所有的设备属性就都会被列出。
up 只显示处于活动状态网络接口的信息。
输出格式
kuznet@alisa:~ $ ip link ls eth03: eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff:kuznet@alisa:~ $ ip link ls sit05: sit0@NOME: mtu 1480 qdisc noqueue link/sit 0.0.0.0 brd 0.0.0.0kuznet@alisa:~ $ ip link ls dummy2: dummy: mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ffkuznet@alisa:~ $
在显示的信息中,每个引号之前的数字是一个接口索引,用于识别网络接口。这个数字后面是网络接口的名字(例如:eth0、dummy等),它也和网络接口一一对应。不过,在某些情况下,例如:驱动模块被卸载,对应的接口名就会从列表中消失,而其它新创建的接口就会使用相同的名字。系统管理员可以ip link set name修改接口的名字。
接口名可以是别的,或者??#199;@NONE。这意味着这个设备被绑定到其它的设备,例如数据包被发送到这个设备,由这个设备封装,并从master设备发出。如果设备名字是NONE 7.路由表管理 7.1.缩写
route、ro、r 7.2.对象
路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。如果数据包目的地址位于属于路由条目的的范围,以及路由的TOS等于0或者等于数据包的TOS,它就匹配路由条目。如果一个数据包匹配多个路由条目,系统内核将按照以下规则决定选择哪个路由:
注:作者在文中把地址被子网掩码屏蔽后的部分/掩码长度这种表达方式叫做前缀(prefix)。例如:10/8表示网络10.0.0.0,子网掩码长度是8位;10.1/16表示网络10.1.0.0,子网掩码长度是16位;
范围最小的优先匹配,较大的放弃;路由TOS等于数据包TOS的匹配,不等于的放弃;如果经过上面两步的选择,还有数个路由,就选择优先值最高的路由;如果还有数个路由可供选择,就重复进行第一步。
为了简化,我们使用{prefix,tos,preference}来标记每个路由。
7.3.路由属性
路由条目提供IP数据包投递所需的路由信息、数据(例如:输出设备、下一跳的路由器)和一些可选属性(例如:路径的最大传输单元MTU或者源地址等)。这些属性将在后面的章节详细介绍。
7.4.路由类型
路由的设置以及其它的可选属性都依赖于路由类型。最重要的路由类型是unicast路由,这种类型的路由表示到另外主机的真实路由。一般情况下,通常的路由表只有这种类型的路由条目。不过,还存在其它类型的路由,使用的语法也不相同。Linux-2.2理解以下几种类型的路由:
unicast 这种类型的路由描述到目的地址的真实路径。
unreachable 这些目的地址是不可达的。如果发过去的数据包都被丢弃并且收到ICMP信息host unreachable,目的地址就会被标记为不可达。在这种情况下,本地发送者将返回EHOSTUNREACH错误。
blackhole 这些目的地址不可达,而且发过去的数据包都被丢弃。在这种情况下,本地发送者将返回EINVAL错误。
prohibit 这些路由是不可达的。发过去的数据包都被丢弃,而且产生ICMP信息communication administratively prohibited。本地发送者会返回EACCESS错误。
local 目的地址被分配给本机。数据包通过回环被投递到本地。broadcast 目的地址是广播地址,数据包作为链路广播发送。
throw 和策略规则(policy rule)一块使用的控制路由。如果选择了这种路由,就会认为没有发现路由,在这个表中的查询就会被终止。没有找到策略路由就相当于在路由表中没有找到路由,数据包会被丢弃,并产生ICMP信息net unreachable。本地发送者会返回ENETUNREACH错误。
nat 特定的NAT路由。目标地址属于哑地址(或者称为外部地址),在转发前需要进行地址转换。
anycast 目标是anycast地址,被分配给本机。这类地址和本地地址大同小异,不同的是这类地址不能用于任何数据包的源地址。
multicast 使用多播路由。在普通的路由表中,这种路由并不存在。
7.5.路由表
从Linux-2.2开始,内核把路由归纳到许多路由表中,这些表都进行了编号,编号数字的范围是1到255。另外,为了方便,还可以在/etc/iproute2/rt_tables中为路由表命名。默认情况下,所有的路由都会被插入到表main(编号254)中。在进行路由查询时,内核只使用路由表main。
实际上,还有另外一个路由表也一直存在,这个表是不可见的,而且极为重要。这就是表local。这个表保存本地和广播路由。内核会自动维护这个路由表,通常系统管理员没有必要对它进行修改,甚至不必看到。
在使用策略路由(policy routing)时,我们将使用多个路由。在这种情况下,表识别符有很多参数,因此需要使用{prefix,tos,preference}的形式唯一地识别每个路由。
7.6.ip route add--添加新路由
ip route change--修改路由
ip route replace--替换已有的路由
缩写:add、a;change、chg;replace、repl 参数
to PREFIX或者to TYPE PREFIX(default)路由的目标前缀(prefix)。如果TYPE被忽略,ip命令就会使用默认的类型unicast。其它的类型在上一节都有介绍。PREFIX是一个IP或者IPv6地址,也可以跟着一个斜杠和掩码长度。如果没有掩码长度,ip命令就假定是一个单一ip地址。另外,还有一个特殊的PREFIX--default(缺省路由),它等于IPv4的0/0,或者IPv6的::/0。
tos TOS 或者defield TOS 定义服务类型关键词。在进行路由匹配时,内核首先比较数据包的TOS和route的TOS,如果没有和数据包TOS相同的路由,还可以选择TOS等于0的路由。TOS或者是一个十六进制的数字,或者是一个由/etc/iproute2/rt_dsfield文件定义的识别符。
metric NUMBER或者preference NUMBER 定义路由的优先值,NUMBER时一个任意的32位数字。
table TABLEID 路由要加入的表。TABLEID或者是一个数字或者是/etc/iproute2/rt_tables文件定义的一个字符串。如果没有这个参数,ip命令就会把路由加入到表main中,本地(local)、广播(broadcast)和网络地址转换(nat)路由除外。在默认情况下,这些类型的路由都会被加入表local中。
dev NAME 输出设备的名字
via ADDRESS 指定下一跳路由器的地址。实际上,这个域的可靠性取决于路由类型。对于通常的unicast路由,它或者是真正的下一跳路由器地址,或者如果它是BSD兼容模式安装的直接路由,它可以是一个网络接口的本地地址。对于NAT路由,它是转换后的地址。
src ADDRESS 在向目的prefix发送数据包时选择的源地址。
realm REALMID 指定路由分配的realm。REALM可以是一个数字或者/etc/iproute2/rt_realms文件定义的一个字符串。有关realm更为详细的信息请看附录(Route realms and policy propagation, rtacct)。
mtu MTU或者mtu lock MTU 设置到达目的路径的最大传输单元(MTU)。如果没有使用修饰符lock,内核会通过路径最大传输单元发现(Path MTU Discovery)机制更新MTU;如果使用了修饰符lock,内核就不会测试路径的最大传输单元。在这种情况下,发出的所有IPv4数据包DF域都会被设置为0(允许分片),对于IPv6数据包也允许分片。
window NUMBER 设置到目的地址TCP连接的最大窗口值,以字节为单位。使用这个参数可以限制对端发送数据的速率。
rtt NUMBER 估算初始往返时间(Round Trip Time)
rttvar NUMBER 估算初始往返时间偏差(RTT variance)thresh NUMBER 估算慢启动阀值(slow start threshould)
cwnd NUMBER 把拥挤窗口(congestion window)值锁定为NUMBER。如果没有lock标记,这个值会被忽略。
advm NUMBER 设置在建立TCP连接时,向目的地址声明的最大报文段大小(Maximal Segment Size,MSS)。如果没有设置,Linux内核会使用计算第一跳的最大传输单元得到的数值。
nexthop NEXTHOP 设置多路径路由的下一跳地址。NEXTHOP比较复杂,它的语法和以下高层参数类似:
via ADDRESS--表示下一跳路由器;dev NAME--表示输出设备;weight NUMBER--在多路由路径中,这个元素的权重。表示相对带宽或者服务质量。
scope SCOPE_VAL 路由前缀(prefix)覆盖的范围。SCOPE_VAL可以是一个数字,也可以是/etc/iproute2/rt_scope文件定义的一个字符串。如果没有这个参数,ip命令就会根据具体情况猜测:对于经过网关的unicast路由,就设置为global;对于直连的unicast路由和广播路由,就设置为link;对于本地路由,就设置为host。
protocol RTPROTO 本条路由得路由协议识别符。RTPROTO可以是一个数字,也可以是/etc/iproute2/rt_protos文件定义的一个字符串。如果使用时没有提供这个参数,ip命令就使用默认值boot(也就是说,ip命令认为添加路由的人不知道自己做了些什么)。有些协议值有其固定的解释:
redirect--路由是由ICMP重定向加入的;kernel--路由是由内核在自动配置期间加入的;boot--路由是启动过程中加入的。如果一个路由监控程序将要启动,这些路由都会被清除;static--为了覆盖动态路由,由系统管理员手工添加的路由。路由监控程序也会优先考虑这类路由,甚至可能通告给其对端;ra--路由是通过路由发现协议加入的(Router Discovery Protocol)。
其它的值没有保留,系统管理员可以自由分配(或者不分配)给协议标记。至少,路由监控程序应该注意对一些唯一协议值的设置,这些协议值在rtnetlink.h文件或者rt_protos数据库中分配。
onlink 假装和下一跳路由器是直接相连的,即使它没有匹配任何接口前缀(prefix)。equalize 允许把数据包随机从多个路由发出。如果没有这个路由修饰符,内核就会冻结下一跳路由的地址。
示例
设置到网络10.0.0/24的路由经过网关193.233.7.65ip route add 10.0.0/24 via 193.233.7.65修改到网络10.0.0/24的直接路由,使其经过设备dummyip route chg 10.0.0/24 dev dummy加入缺省多路径路由,让ppp0和ppp1分担负载(注意:scope值并非必需,它只不过是告诉内核,这个路由要经过网关而不是直连的。实际上,如果你知道远程端点的地址,使用via参数来设置就更好了)。ip route add default scope global nexthop dev ppp0 nexthop dev ppp1设置NAT路由。在转发来自192.203.80.144的数据包之前,先进行网络地址转换,把这个地址转换为193.233.7.83(回来的转换
10.ip mroute--多播路由缓存管理 10.1.缩写
mroute、mr 10.2.对象
这个命令的操作对象是多播路由缓存条目,这个缓存是由一个用户空间的多播路由监控进程(例如pimd或者mrouted)建立的。
目前,由于受和多播路由引擎接口的限制,还不能通过ip命令修改多播路由对象,因此我们只能查看。
10.3.命令
show或者list 10.?畲笤TL是32netadm@amber:~ # ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32 11.4.ip tunnel show--列出现有的通道
缩写:show、list、sh、ls、l 参数 无
输出格式
kuznet@amber:~ $ ip tunnel ls CiscoCisco: ipv6/ip remote 192.31.7.104 local 192.203.80.142 ttl 32 kuznet@amber:~ $
输出的第一部分是通道的设备名,接着是通道模式。下面就是设置通道时的各个参数。
统计信息
kuznet@amber:~ $ ip-s tunl ls CiscoCisco: ipv6/ip remote 192.31.7.104 local 192.203.80.142 ttl 32 RX: Packets Bytes Errors CsumErrs OutOfSeq Mcasts 12566 1707516 0 0 0 0 TX: Packets Bytes Errors DeadLoop NoRoute NoBufs 13445 1879677 0 0 0 0 kuznet@amber:~ $
以上输出结果里面的数字和使用ip-s link show的输出是一样的,但是每个标志都是特定于通道的。
CsumErrs 对于打开校验和检验的GRE通道,这个数字是由于校验和错误而丢弃的数据包数量。
OutOfSeg 在打开顺序功能的GRE通道内,由于顺序错误而丢弃的数据包数量。
Mcasts 在GRE通道上接收到的多播数据包的数量。
DeadLoop 由于通道是回环到自己而没有传输的数据包数目。
NoRoute 由于到对端没有路由而没有被传输的数据包数目。
NoBufs 由于内核不能分配缓冲区而没有被传输的数据包数目。
12.ip monitor和rtmon--状态监视
ip命令可以用于连续地监视设备、地址和路由的状态。这个命令选项的格式有点不同,命令选项的名字叫做monitor,接着是操作对象:
ip monitor [ file FILE ] [ all | OBJECT-LIST ]
OBJECT-LIST是一些被监控的对象,它可以包括link、addre和route。如果没有给出file参数,ip命令就打开RTNETLINK,在上面监听,并把状态的变化输出到标准输出设备。
如果使用了file参数,ip命令就不是在RTNETLINK上监听,而是打开由file参数指定的包含RTNETLINK信息的二进制文件,把解析的结果显示出来。这种历史文件可以有工具产生。这个工具具有和ip monitor命令的语法类似的命令行。理想的情况是,在网络配置命令起动之前运行rtmon命令(当然,你可以在任意的时间起动rtmon,它会记录从起动开始的状态变化)。你可以在起动脚本中插入以下命令行:
rtmon file /var/log/rtmon.log 如果我们执行如下命令:
[root@nixe0n root]ip route add dev eth0 to 61.133.4.7 via 211.99.114.65[root@nixe0n root]ip route del dev eth0 to 61.133.4.7
然后,我们使用ip monitor命令分析/var/log/rtmon.log会得到如下输出结果:
[root@nixe0n root]ip monitor file /var/log/rtmon.log rTimestamp: Wed Nov 6 20:25:54 2002 733331 us1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0: mtu 1500 qdisc pfifo_fast link/ether 00:01:4f:00:15:f1 brd ff:ff:ff:ff:ff:ffTimestamp: Wed Nov 6 20:25:58 2002 33700 us61.133.4.7 via 211.99.114.65 dev eth0 Timestamp: Wed Nov 6 20:25:59 2002 924124 usDeleted 61.133.4.7 via 211.99.114.65 dev eth0 [root@nixe0n root] 13.rtacct--路由范围和策略传播
在使用OSPF或者BGP协议的路由器上,其路由表可能会很大。如果我们需要对其进行归类或者计算通过每条路由的数据包,就需要保留很多信息。更糟糕的是,如果我们需要区别的不止是数据包的目的地址,还要包括它们的源地址,这个任务就更为复杂了,几乎无法解决。
对于这个问题,Cisco IOS Release 12.0 Quality of Service Solutions Configuration Guide: Configuring QoS Policy Propagation via Border Gateway Protocol提出了一个解决方案,就是把策略从路由协议迁移到转发引擎。基本上,通过BGP的Cisco策略迁移(Cisco Policy Propagation via BGP)就是基于此种方式,它使路由器保留所有和转发引擎关系紧密的RIB(Routing Information Base,路由信息库),以便策略路由规则能够监查所有的路由属性,包括ASPATH的信息和团体(community)字符串。
而Linux把这分为由用户空间监控维护的路由信息库(Routing Infomation Base,RIB),和内核层的转发信息库(Forwarding Infomation Base,FIB)。
这是我们的幸运,因为还有另外的解决方案,而这个方案允许更为灵活的策略和更为丰富的语义。
换句话说,可以在用户空间根据路由的属性把它们归类,例如:BGP路由的ASPATH、团体(community);OSPF路由的标记和它们的范围。而管理员手工添加路由时,也知道它们的属性。按照这个标准划分的集合(我们把它们叫做realm)数量就很少了,因此按照路由的源地址和目的地址进行完全的分类就可以管理了。
因此,每个路由都可以被分配到一个范围(realm)中。一般这是有路由监控进程作的,不过对于静态路由,也可以使用ip route命令手工处理。
在某些情况下(例如路由监控进程不理解realm)为了方便,漏掉的realm可以由路由策略规则补齐。
内核使用如下算法计算每个数据包的源范围(realm)和目的范围(realm):
If route has a realm, destination realm of the packet is set to it.If rule has a source realm, source realm of the packet is set to it.If destination realm was not get from route and rule has destination realm, it is also set.If at least one of realms is still unknown, kernel finds reversed route to the source of the packet.If source realm is still unknown, get it from reversed route.If one of realms is still unknown, swap realms of reversed routes and apply step 2 again.这个过程完成后,我们就知道了数据包的源范围和目的范围。如果某些还是未知,它就会被设置为0(realm unknown)范围(realm)主要还是由TC(Traffic Control)的路由类别(route claifier)使用,我们可以使用路由类别把数据包分配到给不同的流量类(trafffic cla),为数据包计数,以及为它们制定调度策略。
相对于TC,使用realm为进入的数据包计数就简单多了,但这是一个非常有用的应用。内核可以根据realm收集总结数据包统计信息。在用户空间,我们可以使用工具rtacct查看这些信息。例如:
kuznet@amber:~ $ rtacct ruiaRealm BytesTo PktsTo BytesFrom PktsFrom ruia 20576778 169176 47080168 153805 kuznet@amber:~ $
结果表示,这个路由器收到153805个来自ruia地区的数据包,并且向ruia转发了169176个数据包。ruia范围由ASPATH(路径自治系统)在俄罗斯的路由组成。
15.参考
T.Narten, E.Nordmark, W.Simpson.``Neighbor Discovery for IP Version 6(IPv6)'', RFC-2461.S.Thomson, T.Narten.``IPv6 Statele Addre Autoconfiguration'', RFC-2462.F.Baker.``Requirements for IP Version 4 Routers'', RFC-1812.R.T.Braden.``Requirements for Internet hosts--communication layers'', RFC-1122.``Cisco IOS Release 12.0 Network Protocols Command Reference, Part 1'' and ``Cisco IOS Release 12.0 Quality of Service Solutions Configuration Guide: Configuring Policy-Based Routing'',http://www.daodoc.com
Addre: 192.168.1.99
在符号“>”后面输入要查询的IP地址或域名并回车即可。如果要退出该命令,输入exit并回车即可。
finger命令
finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。
该命令的一般格式为:
finger [选项] [使用者] [用户@主机]
命令中各选项的含义如下:
-s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。
-l 除了用-s选项显示的信息外,还显示用户主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
-p 除了不显示.plan文件和.project文件以外,与-l选项相同。
[例]在本地机上使用finger命令。
$ finger xxq
Login: xxq Name:
Directory: /home/xxq Shell: /bin/bash
Last login Thu Jan 1 21:43(CST)on tty1
No mail.No Plan.$ finger
Login Name Tty Idle Login Time Office Office Phone root root *1 28 Nov 25 09:17
ping命令
ping命令用于查看网络上的主机是否在工作,它向该主机发送ICMP ECHO_REQUEST包。有时我们想从网络上的某台主机上下载文件,可是又不知道那台主机是否开着,就需要使用ping命令查看。
该命令的一般格式为:
ping [选项] 主机名/IP地址
命令中各选项的含义如下:
-c 数目 在发送指定数目的包后停止。
-d 设定SO_DEBUG的选项。
-f 大量且快速地送网络封包给一台机器,看它的回应。
-I 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-l 次数 在指定次数内,以最快的方式送封包数据到指定机器(只有超级用户可以使用此选项)。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 不经由网关而直接送封包到一台机器,通常是查看本机的网络接口是否有问题。
-s 字节数 指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
Linux常见命令:屏幕文本编辑器Vi 本章介绍Linux上最常用的文本编辑器Vi。文本编辑器是所有计算机系统中最常使用的一种工具。用户在使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离不开编辑器。
Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。
Vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。
本章中,我们将循序渐进地介绍如何使用Vi来建立、编辑、显示以及处理文件。(注:文中的大写字母为[shift]键+相应的小写字母的组合)Vi简介
Vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。
Vi没有菜单,只有命令,且命令繁多。Vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。
命令行模式
任何时候,不管用户处于何种模式,只要按一下键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
文本输入模式
在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。
末行模式
末行模式也称ex转义模式。
Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如:
:1,$s / A / a / g
则从文件第一行至文件尾将大写A全部替换成小写a。
若在末行模式下输入命令过程中改变了主意,可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使Vi回到命令模式下。
Vi编辑器的三种工作模式之间的转换如图11-1所示
如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。Vi 的进入
用户登录到系统中之后,系统给出提示符“$”。在提示符后键入Vi和想要编辑(或建立)的文件名,便可进入Vi。
[例1] 键入命令:
$ vi example.c
屏幕显示如下:
~
~
~
~
~
~
~
~
~
~
~
~
~
“ example.c” [New File]
如果只键入Vi,而不带文件名,也可以进入Vi。之后在光标处键入文件内容,退出Vi时,只需在退出命令后输入文件名即可。
进入Vi之后,首先进入的就是命令模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。光标停在屏幕第一行首位上(用表示),其余各行行首均有一个“~”符号,表示该行为空行。最后一行也称状态行,显示出当前正在编辑的文件名以及其状态。如本例是[New File],表示example.c是一个新建的文件。如果example.c文件已在系统中存在,那么输入上述命令后,则在屏幕上显示出该文件的内容,并且光标停在第一行的首位,在状态行显示出该文件的文件名、行数和字符数。
[例2] 键入命令:
$ vi example.c 然后键入: #include main(){ int k;for(k=0;k
{ static int x=0;
x++;
printf(“x = %dn”, x);
}
~
~
~
~
“ example.c” [ New File]
注意,在这里我们为了节省篇幅起见,屏幕只显示15行。事实上,初始的显示行数与用户所用终端有关,一般的CRT终端可显示25行。在窗口系统中,显示行数与运行Vi的那个窗口有关。然而我们可以对显示行数进行设置。例如,在能显示25行的CRT终端上,让Vi只显示15行。设置的方法将在本节后面介绍。
当用Vi建立一个新文件时,在进入Vi的命令中也可以不给出文件名,当编辑完文件需要保存数据时,再由用户指定文件名。
进入Vi时,用户不仅可以指定一个待编辑的文件名,而且还有许多附加操作。
如果希望在进入Vi之后,光标处于文件中特定的某行上,可在Vi后加上任选项+n,其中n为指定的行数。
[例3] 键入命令:
$ vi +5 example1.c
后,屏幕显示如下:
#include
main()
{ int k;
for(k=0;k
}
add()
{ static int x=0;
x++;
printf(“x = %dn”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters
光标将位于文件example1.c中的第5行上。
如果希望在进入Vi之后光标处于文件最末行,则只需把命令中附加项“+”后面的数字n省略掉即可。
在进入Vi时,除了可以指定一个光标起始行号之外,还可以在命令中指定一个模式串,此时在进入Vi后,光标就处于文件中第一个与指定模式串相匹配的那行上。[例4] 键入命令:
$ vi +/int example1.c
屏幕显示如下:
#include
main()
{ int k;
for(k=0;k
}
add()
{ static int x=0;
x++;
printf(“x = %dn”, x);
}
~
~
~
~
~
“ example.c” 12 lines, 125 characters
光标将位于文件example1.c中的第3行上。
使用Vi可以同时编辑多个文件,只要在进入Vi的命令中写入所要操作的文件即可,还可以使用通配符。
[例5] 键入命令:
$ vi *.cat
就可以编辑所有后缀为cat的文件了。当然,您还可以使用shell中内置的模式匹配来装载文件,这样会更富技巧性。一旦您在命令行中包含了所有的待编辑文件名,就可以在Vi中方便地移来移去。
退出Vi
当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。
在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。
在末行模式下,输入命令:w
Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。[例6]
:w newfile
此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:
File exists(use!to override)
此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令
:w!newfile
否则可选择另外的文件名来保存当前文件。
在末行模式下,输入命令:q
系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:
No write since last change(use!to overrides)
提示用户该文件被修改后没有保存,然后Vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出Vi时,可使用命令:q!
Vi放弃所作修改而直接退到shell下。
在末行模式下,输入命令:wq
Vi将先保存文件,然后退出Vi返回到shell。
在末行模式下,输入命令:x
该命令的功能同命令模式下的ZZ命令功能相同。
Vi中的行号
Vi中的许多命令都要用到行号及行数等数值。若编辑的文件较大时,自己去数是非常不方便的。为此Vi提供了给文本加行号的功能。这些行号显示在屏幕的左边,而相应行的内容则显示在行号之后。
使用的命令为:在末行方式下输入命令:
:set number
需要说明的是,这里加的行号只是显示给用户看的,它们并不是文件内容的一部分。
在一个较大的文件中,用户可能需要了解光标当前行是哪一行,在文件中处于什么位置,可在命令模式下
vi中将逗号和回车互换的技巧将
aaa,bbb,ccc 替换成 aaa bbb ccc 方法: :%s/,/^M/g ^M是用ctrl-v然后ctrl-m敲出来的将 aaa bbb ccc 替换成 aaa,bbb,ccc
方法: :%s/n/,/
嵌入式Linux学习心得1、Linux命令ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录cd:改变当前操作目录cd /直接跳到根目录 cd ..回到上一级目录 ca......
2013-2014初中美术教师工作总结姚文琪初一一学年已经告一段落,本人在此作一番的总结,以便择优汰劣,取长补短以待今后的教学水平更上一层楼。那现先仔细地回顾这一学期的工作吧......
2013-2014学年度第二学期音体美教研组总结 本学期,根据县局工作意见和学校工作安排,在全组四位老师的共同努力下,积极探索完善教学模式,向课堂要质量,提高学生素质,走科研兴校的体......
ⅹⅹⅹ森林公安局二〇一一年一季度ⅹⅹⅹ总结与二季度ⅹⅹⅹ工作计划纵观二〇一一年一季度ⅹⅹⅹ森林公安局刑事侦查中队开展的刑事侦查工作,总体有以下方面:一、工作环境目前......
内科护理工作总结这一年,内科护理组认真执行及落实本年度护理计划,按医院护理服务质量评价标准的基本要求及标准,完善各项护理规章制度,改进服务流程,改善住院环境,加强护理质量控......
