六、网络管理与相关应用;
七、vi/vim编辑器;
八、Shell编程
六、网络管理与相关应用
# arp -a | awk '{print $4}' //得到网卡的 MAC地址
# dd if=/dev/zero bs=4096 count=1048576 | ssh [user@ip](mailto:user@ip) 'cat > /dev/null' //不浪费磁盘的情况下测试网络速度(通过 ssh 发送 4 GB 数据到远程主机,但不会占用任何磁盘空间)
# dmesg | grep eth //显示每个网卡的硬件配置信息
# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all //关闭ping
# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all //重启ping
# ethtool eth0 //显示或改变网卡设置(参考:man ethtool)
# ifconfig //查看当前有效网络接口信息
# ifconfig -a //查看当前所有网络接口信息
# ifconfig eth0 //查看指定网络接口eth0信息
# ifconfig eth0 192.168.1.11 //设置eth0接口IP地址(标准掩码)(相当于动态修改IP)
# ifconfig eth0 192.168.1.11 netmask 255.255.255.128 //设置eth0接口IP地址及子网掩码
# ifconfig eth0 hw ether 000C1254D321 //更改网卡物理地址
# ifconfig lo //查看lo状态
# ifdown eth0 //禁用eth0网络接口
# ifdown lo //关闭本地回环网络接口
# ifup eth0 //启用eth0网络接口
# ifup lo //启动本地回环网络接口# ip ad sh //显示IP地址等信息
# iptables -L // 查看防火墙设置
# iptraf //可交互式IP网络监控工具# mii-tool -v //查看网卡有关信息
# netconfig //设置网络环境
# netstat -antp // 查看所有已经建立的连接
# netstat -apt //显示所有TCP应用程序所使用的端口号,并显示使用此端口号的进程
# netstat -lntp // 查看所有监听端口
# netstat -s // 查看网络统计信息
# netstat -tulnp //目前系统上已在监听的网络连接及其PID
# ping 10.52.19.187 //检测到10.52.19.187之间是否连通
# ping -c 5 10.52.19.187 //向10.52.19.187发送5个分组报文
# ping -s 6553 -c 5 10.52.19.187 //向10.52.19.187发送5个分组、每组大小为6553字节的报文(注:最大分组报文不能超过65507字节)
# ping -c 8 -i 3 -s 1024 -t 25 10.52.19.187 //向10.52.19.187以3秒间隔、包大小1024字节、IP生存期25、8个包发送报文
# route -n // 查看路由表
# tracepath 10.52.19.189 //显示连接到10.52.19.189的路由
# traceroute -n 10.52.19.190 //对到达10.52.19.190的路由进行跟踪,且使用IP地址表示每一跳主机
# ss //显示网络套接字信息,它允许显示类似netstat一样的信息
# wget 192.168.20.148 //从网站192.168.20.148下载资料
动态增加IP
# traceroute 211.148.192.136 //检测到目的IP经过的路由信息
# hostname //查看主机名称
# hostname luo //设置主机名称为 luo
# ping 192.168.1.10 //Ping主机192.168.1.10
# ifconfig eth0 add 10.52.19.147
# ifconfig eth0:0 broadcast 10.52.19.255
DNS域名
# nslookup 待解析域名(或IP)
# nslookup 211.148.192.136 //反向解析IP---域名
# nslookup [www.163.com](http://blog.chinaunix.net/link.php?url=http://www.163.com%2F) //解析指定的域名---IP
# route add default gw 192.168.1.1 //添加默认网关为192.168.1.1
# route del default gw 192.168.1.1 //删除默认网关为192.168.1.1
NFS服务
# exportfs -auv //停止输出所有共享目录
# exportfs -av //输出启用所有共享目录
# exportfs -rv //重新输出共享目录
# mount -t nfs 192.168.2.10:/luo /wei //在客户机上挂载共享目录到/wei
# service iptables stop //关闭防火墙
# service nfs start //启动nfs服务
# service portmap start //启动portmap服务
# showmount -a //显示NFS服务器的客户与被挂载目录
# showmount -d //显示NFS服务器被挂载的目录
# vi /etc/exports //修改共享配置文件(加共享目录)
showmount -e 192.168.2.10 6 //在客户上查看服务器共享目录
配置文件
vi /etc/hosts vi /etc/network //修改主机名称配置文件
vi /etc/rc.local //修改mac地址配置文件
vi /etc/resolv.conf //修改DNS配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0 //修改网卡配置文件
vi /var/spool/cron/username //修改cron任务配置文件
vi /var/spool/mail //修改邮件配置文件
七、vi/vim编辑器
也可建立vi到vim的符号连接(即实际调用的是vim)
# mv /bin/vi /bin/vi.bak
# ln -s /usr/bin/vim /bin/vi
进入vi的命令:
vi 直接进入编辑并创建新文件
vi filename 编辑文件(不存在则创建文件),并将光标置于第一行首
vi +n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
vi +/pattern filename 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename 在上次正用vi编辑时发生系统崩溃,恢复文件
vi file1....filen 打开多个文件,依次进行编辑
vi -o aaa bbb 水平窗口打开aaa,bbb两个文件
vi -O aaa bbb 垂直窗口打开aaa,bbb两个文件(Ctrl+W两次可在多个文件间切换)多文本编辑的按键::n 编辑下一个文件:N 编辑上一个文件:files 列出目前这个vi的打开的所有文件多窗口情况下的按键功能::sp [filename] 打开一个新窗口,如果有加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示)
[ctrl]+w+j[ctrl]+w+↓ 按键的按法是:先按下[ctrl]不放,再按下w后放开所有的按键,然后再按下j(或向下箭头键),则光标可移动到下方的窗口[ctrl]+w+k[ctrl]+w+↑ 同上,不过光标移动到上面的窗口[ctrl]+w+q 其实就是:q结束离开。例如,想要结束下方的窗口,那么利用[ctrl]+w+↓移动到下方窗口后,按下:q即可离开,也可以按下[ctrl]+w+q
块选择的按键意义:v 字符选择,将光标经过的地方反白选择
V 行选择,将光标经过的行反白选择
Ctrl + v 块选择,可以用长方形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除
恢复命令:
u 恢复最后一个指令之前的结果. 继续最后一个指令的执行结果
ctrl+r 撤销恢复
U 恢复光标该行之所有改变
移动光标命令:
h 光标左移一个字符
l 光标右移一个字符
space 光标右移一个字符
Backspace 光标左移一个字符
k或Ctrl+p 光标上移一行
j或Ctrl+n 光标下移一行
Enter 光标下移一行
w或W 光标右移一个字至字首
b或B 光标左移一个字至字首
e或E 光标右移一个字至字尾
) 光标移至句尾
( 光标移至句首
} 光标移至段落开头
{ 光标移至段落结尾
nG 光标移至第n行首
n+ 光标下移n行
n- 光标上移n行
n$ 光标移至第n行尾
H 光标移至屏幕顶行
M 光标移至屏幕中间行
L 光标移至屏幕最后行
0 (注意是数字零)光标移至当前行首
$ 光标移至当前行尾
翻屏命令:
Ctrl+u 向文件首翻半屏
Ctrl+d 向文件尾翻半屏
Ctrl+f 向文件尾翻一屏
Ctrl+b 向文件首翻一屏
nz 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部
插入文本、复制与粘贴:
i 在光标前插入
I 在当前行首插入
a 在光标后插入
A 在当前行尾插入
o 在当前行之下新开一行
O 在当前行之上新开一行
r 替换当前字符
R 替换当前字符及其后的字符,直至按ESC键
s 从当前光标位置处开始,以输入的文本替代指定数目的字符
S 删除指定数目的行,并以所输入文本代替之
ncw或nCW 修改指定数目的字
nCC 修改指定数目的行
yy p 复制当前行,并粘贴到下一行nyy n为数字。复制光标所在的向下n行,例如20yy,则是复制20行y1G 复制光标所在行到第一行的所有数据yG 复制光标所在行到最后一行的所有数据y0 复制光标所在的那个字符到该行行首的所有数据y$ 复制光标所在的那个字符到该行行尾的所有数据
shift + i 在该行之首插入字符
shift + a 在该行末尾输入字符
shift + r 改写自光标位置及后面的所有内容
shift +o 在光标之上新增一行输入字符
删除命令:
ndw或ndW 删除光标处开始及其后的n-1个字
d0 删至行首(为数字0)
d$ 删至行尾shift + d 剪切至行尾
dd 删除一行
ndd 删除自光标开始的n行
s 删除光标所在之字符,并进入输入模式直到《ESC》
S 删除光标所在之该行资料,并进入输入模式直到《ESC》
x或X 删除一个字符,x删除光标后的,而X删除光标前的 nx n为数字,连续向后删除n个字符。如,要连续删除10个字符,则:“10x”
Ctrl+u 删除输入方式下所输入的文本
搜索及替换命令:
/pattern 从光标开始处向文件尾搜索pattern
?pattern 从光标开始处向文件首搜索pattern
n 在同一方向重复上一次搜索命令
N 在反方向上重复上一次搜索命令
:s/p1/p2/ 替换当前行第一个p1为p2
:s/p1/p2/g 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g 将文件中所有p1均用p2替换
: 1,$s/old/new/g 将文件中所有的『old』改成『new』: 1,$s/old/new/gc 将文件中所有的『old』改成『new』,并在改前提示用户确认
: 10,20s/^/ / 将第10行至第20行资料的最前面插入5个空格
: %s/^m//g 删除文件中所有的^M符号
选项设置:
all 列出所有选项设置情况
term 设置终端类型
ignorance 在搜索中忽略大小写
list 显示制表位(Ctrl+I)和行尾标志($)
number 显示行号
report 显示由面向行的命令修改过的数目
terse 显示简短的警告信息
warn 在转到别的文件时若没保存当前文件则显示NO write信息
nomagic 允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan 禁止vi在搜索到达文件两端时,又从另一端开始
mesg 允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令:
:n1,n2 co n3 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3 将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d 将n1行到n2行之间的内容删除
:e filename 打开文件filename进行编辑
:e! dd 强制关闭当前文件(不保存)打开新文件dd
: e! 放弃修改重新编辑
:q! 不保存文件并退出vi
:r fff 在当前位置读入fff文件
:set nonu 不显示行号
:set nu 显示行号
:w 保存输入的内容到当前文件
:w eee 另存为eee文件
:wq 保存并退出
:x 保存当前文件并退出
:n1,n2 w eee 将文件中n1行至n2行的内容保存成eee文件:!command 暂时离开vi到命令行模式下执行command的显示结果。例如,“:! ls /home”即可在vi当中查看/home下面以ls输出的文件信息
寄存器操作:
"?nyy 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中vim操作环境(不建议修改/etc/vimrc文件;建议手动修改~/.vimrc文件)
八、shell编程
# grep $LOGNAME /etc/passwd //显示当前登录用户使用的shell
# sh //启动bsh(为Bourne Shell的简称---伯恩shell)
# bash //启动bash(为Bourne Again Shell的简称)
# csh //启动C Shell
# type [-tpa] name //bash shell的内置命令。
type:不加任何参数时,type会显示出name是外部命令还是bash内置命令
-t :当加入-t参数时,type会将name以下面这些字眼显示出它的意义:
file:表示为外部命令
alias:表示该命令为命令别名所设置的名称;
builtin:表示该命令为bash内置的命令功能。
-p :如果后面接的name为外部命令时,才会显示完整文件名;
-a :会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias
# cp/var/spool/mail/root /etc/crontab \> /etc/fstab /root
//将三个文件复制到root目录下(如果命令串太长的话,可以用两行来输出)。
“\[Enter]”为转义符,
“>”为系统自动出现的,不需要输入。
# source ~/.bashrc //将主文件夹的~/.bashrc的设置读入目前的bash环境中
# . ~/.bashrc //将主文件夹的~/.bashrc的设置读入目前的bash环境中
# ll -d/etc/cron* //找出/etc/下面以cron为开头的文件名
# ll -d/etc/????? //找出/etc/下面文件名刚好是五个字母的文件名
# ll -d/etc/*[0-9]* //找出/etc/下面文件名含有数字的文件名
# ll -d/etc/[^a-z]* //找出/etc/下面文件名开头非为小写字母的文件名
# cp -a /etc/[^a-z]*/tmp //将上例找到的文件复制到 /tmp中
# last | cut -d ' ' -f1 | sort //将输出的数据仅取账号,并加以排序
# last | cut -d ' ' -f1 | sort | uniq //将输出的数据仅取账号,排序后仅取出一位
# last | cut -d ' ' -f1 | sort | uniq -c
//将输出的数据仅取账号,排序后仅取出一位并显示每个账号登录的总次数
# last | grep [a-zA-Z]| grep -v ‘wtmp’| wc -l //显示登录系统的总人数
# last | tee last.list | cut -d “ “ -f1 //将last的输出存一份到last.list文件中
# ls -l/home | tee ~/homefile | more
//将ls的数据存一份到~/homefile,同时屏幕也有输出信息
# ls -l/ | tee -a ~/homefile | more //加上-a参数则能将信息累加
# cp/etc/passwd /root/passwd &&unix2dos /root/passwd
# file/etc/passwd /root/passwd
# cat/root/passwd | tr -d ‘\r’ > /root/passwd.linux
# ll /etc/passwd /root/passwd*
//将/etc/passwd转存成dos断行到/root/passwd中,再将^M 符号删除。\r指的是dos的断行字符 ^M
# cat -A /etc/man.config
# cat/etc/man.config | col -x | cat -A | more
//利用cat -A 显示所有特殊按键,最后以 col将[tab]转成空白。
//上面看到的^I符号就是tab,如此一来,[tab]按键会被替换成为空格键,输出就美观多了
# mancol > /root/col.man
# vi/root/col.man
# mancol | col -b > /root/col.man //将col的man page转存成为/root/col.man的纯文本文件
通配符与特殊符号 意义
* 代表『 0 个到无穷多个』任意字符
? 代表『一定有一个』任意字符
[ ] 同样代表『一定有一个在括号内』的字符(非任意字符)。
例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ] 若有减号在中括号内时,代表『在编码顺序内的所有字符』。
例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ] 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,
例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
bash 环境中的特殊符号 内容
# 批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
\ 跳脱符号:将『特殊字符或通配符』还原成一般字符
| 管线 (pipe):分隔两个管线命令的界定(后两节介绍);
; 连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
~ 用户的家目录$ 取用变量前导符:亦即是变量之前需要加的变量取代值
& 工作控制 (job control):将命令变成背景下工作
! 逻辑运算意义上的『非』 not 的意思!
/ 目录符号:路径分隔的符号
>, >> 数据流重导向:输出导向,分别是『取代』与『累加』
<, << 数据流重导向:输入导向
' ' 单引号,不具有变量置换的功能
" " 具有变量置换的功能!
` ` 两个『 ` 』中间为可以先运行的命令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的组合!
基础正则表达式字符 (characters)
^word意义:待查找的字符串(word)在行首范例:查找行首为 # 开始的那一行,并列出行号
grep -n '^#' regular_express.txt word$ 意义:待查找的字符串(word)在行尾范例:将行尾为 ! 的那一行列印出来,并列出行号
grep -n '!$' regular_express.txt . 意义:代表一定有一个任意字符的字符范例:查找的字符串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee),亦即 e 与 e 中间“一定”仅有一个字符,而空格符也是字符
grep -n 'e.e' regular_express.txt \ 意义:转义字符,将特殊符号的特殊意义去除范例:查找含有单引号 ' 的那一行
grep -n \' regular_express.txt * 意义:重复零个到无穷多个的前一个 RE(regular)字符范例:找出含有 (es) (ess) (esss) 等等的字符串,注意,因为 * 可以是 0 个,所以 es 也是符合带查找字符串。
另外,因为 * 为重复“前一个 RE 字符”的符号, 因此,在 * 之前必须要紧接著一个 RE 字符喔。例如任意字符则为 “.*”
grep -n 'ess*' regular_express.txt [list] 意义:从字符集合的 RE 字符里面找出想要选取的字符范例:查找含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [] 当中代表一个待查找的字符,
例如“ a[afl]y ”代表查找的字符串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思
grep -n 'g[ld]' regular_express.txt [n1-n2] 意义:从字符集合的 RE 字符里面找出想要选取的字符范围范例:查找含有任意数字的那一行。
需特别留意,在字符集合 [] 中的减号 - 是有特殊意义的,他代表两个字符之间的所有连续字符。但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确)。
例如所有大写字符则为 [A-Z] grep -n '[A-Z]'
regular_express.txt [^list] 意义:从字符集合的 RE 字符里面找出不要的字符串或范围范例:查找的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时,代表的意义是“反向选择”的意思。
例如,我不要大写字符,则为 [^A-Z]。
但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来查找,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是“非大写字符”的意思, 因为每一行均有非大写字符,
例如第一行的 "Open Source" 就有 p,e,n,o等小写字符
grep -n 'oo[^t]' regular_express.txt \{n,m\} 意义:连续 n 到 m 个的前一个 RE 字符,若为 \{n\} 则是连续 n 个的前一个 RE 字符,若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符范例:在 g 与 g 之间有2个到3个的o存在的字符串,亦即 (goog)(gooog)
grep -n 'go\{2,3\}g' regular_express.txt
# dmesg | grep -n -color=auto‘eth’
//用dmesg列出内核信息,
//再以grep找出内含eth的那些行,并显色、加上行号
# dmesg | grep -n -A3 -B2 -color=auto ‘eth’
//承上,在关键字所在行的前两行与后三行也一起找出来显示
# test -e /pa/lamprj && echo "exist" || echo "Not exist"
//检查/pa/lamprj目录是否存在
文件测试的标志与意义:
关於某个文件名的“文件类型”判断,
如 test -e filename 表示存在否
-e 该文件名是否存在?(常用)
-f 该文件名是否存在且为文件(file)(常用)
-d 该文件名是否存在且为目录(directory)(常用)
-b 该文件名是否存在且为一个 block device 设备
-c 该文件名是否存在且为一个 character device 设备
-S 该文件名是否存在且为一个 Socket 文件
-p 该文件名是否存在且为一个 FIFO (pipe) 文件
-L 该文件名是否存在且为一个连结文件关於文件的权限检测,
如 test -r filename 表示可读否 (但 root 权限常有例外)
-r 检测该文件名是否存在且具有“可读”的权限
-w 检测该文件名是否存在且具有“可写”的权限
-x 检测该文件名是否存在且具有“可执行”的权限
-u 检测该文件名是否存在且具有“SUID”的属性
-g 检测该文件名是否存在且具有“SGID”的属性
-k 检测该文件名是否存在且具有“Sticky bit”的属性
-s 检测该文件名是否存在且为“非空白文件” 两个文件之间的比较,
如:test file1 -nt file2
-nt (newer than)判断 file1 是否比 file2 新
-ot (older than)判断 file1 是否比 file2 旧
-ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。
主要意义在判定两个文件是否均指向同一个 inode 关於两个整数之间的判定,
例如 test n1 -eq n2 -eq 两数值相等 (equal)
-ne 两数值不等 (not equal)
-gt n1 大於 n2 (greater than)
-lt n1 小於 n2 (less than)
-ge n1 大於等於 n2 (greater than or equal)
-le n1 小於等於 n2 (less than or equal) 判定字串的数据
test -z string 判定字串是否为 0,若 string 为空字串,则为 true
test -n string 判定字串是否非为0,若 string 为空字串,则为 false
注:-n 亦可省略 test str1 = str2 判定 str1 是否等於 str2 ,若相等,则回传 true
test str1 != str2 判定 str1 是否不等於 str2 ,若相等,则回传 false
多重条件判定,
例如:test -r filename -a -x filename -a 两个条件同时成立!
例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true
-o 任何一个条件成立!
例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true !
反相状态,
如 test ! -x file ,当 file 不具有 x 时,回传 true