以下是小编为大家准备的linux命令详解网络配置、sysctl命令参数(共含10篇),仅供参考,大家一起来看看吧。同时,但愿您也能像本文投稿人“gsdgf”一样,积极向本站投稿分享好文章。
【简 介】
懂得网络配置命令是一般技术人员必备的技术,经过一段时间的研究和学习,总结了一些常用的命令和示例以便日后查阅.
懂得网络配置命令是一般技术人员必备的技术,经过一段时间的研究和学习,总结了一些常用的命令和示例以便日后查阅.
传统的在1--3点,ip高级路由命令在4--12点,两者部分可以通用,并达到同样的目的,但ip的功能更强大,可以实现更多的配置目的,
首先,先了解传统的网络配置命令:
1. 使用ifconfig命令配置并查看网络接口情况
示例1: 配置eth0的IP,同时激活设备:
# ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up
示例2: 配置eth0别名设备 eth0:1 的IP,并添加路由
# ifconfig eth0:1 192.168.4.2
# route add –host 192.168.4.2 dev eth0:1
示例3:激活(禁用)设备
# ifconfig eth0:1 up(down)
示例4:查看所有(指定)网络接口配置
# ifconfig (eth0)
2. 使用route 命令配置路由表
示例1:添加到主机路由
# route add –host 192.168.4.2 dev eth0:1
# route add –host 192.168.4.1 gw 192.168.4.250
示例2:添加到网络的路由
# route add –net IP netmask MASK eth0
# route add –net IP netmask MASK gw IP
# route add –net IP/24 eth1
示例3:添加默认网关
# route add default gw IP
示例4:删除路由
# route del –host 192.168.4.1 dev eth0:1
示例5:查看路由信息
# route 或 route -n (-n 表示不解析名字,列出速度会比route 快)
3.ARP 管理命令
示例1:查看ARP缓存
# arp
示例2: 添加
# arp –s IP MAC
示例3: 删除
# arp –d IP
4. ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,
例如:ifconfig、route等,
上面的示例完全可以用下面的ip命令实现,而且ip命令可以实现更多的功能.下面介绍一些示例:
4.0 ip命令的语法
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
4.1 ip link set--改变设备的属性. 缩写:set、s
示例1:up/down 起动/关闭设备。
# ip link set dev eth0 up
这个等于传统的 # ifconfig eth0 up(down)
示例2:改变设备传输队列的长度。
参数:txqueuelen NUMBER或者txqlen NUMBER
# ip link set dev eth0 txqueuelen 100
示例3:改变网络设备MTU(最大传输单元)的值。
# ip link set dev eth0 mtu 1500
示例4: 修改网络设备的MAC地址。
参数: address LLADDRESS
# ip link set dev eth0 address 00:01:4f:00:15:f1
4.2 ip link show--显示设备属性. 缩写:show、list、lst、sh、ls、l
-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。
示例:
# ip -s -s link ls eth0
eth0: mtu 1500 qdisc cbq qlen 100
link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
2449949362 2786187 0 0 0 0
RX errors: length crc frame. fifo missed
0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
1、查看IP:Ifconfig
2、配置IP的方法:
A、这种方法立即生效,但是重启将不会保存,(除了这个方法的其它方法都可以保存下来)
Ifconfig eth0 1.1.1.1 netmask 255.0.0.0 up
Ifconfig eth0:1 1.1.1.3 up //设置一个网卡多个IP的方法(在设置虚拟主机时有用到)
激活网卡:Ifconfig eth0 up
关闭网卡:Ifconfig eth0 down
动态获取IP:Ifconfig etho –dynamic
Dhclient
修改Mac值:先关闭网卡:Ifconfig eth0 down
再修改MAC值:Ifconfig eth0 hw ether 112233445566
再激活网卡:Ifconfig eth0 up
B、Netconfig或者Setup,但只能设置Eth0网卡
C、Neat:打开图形窗口进行设置
D、配置文件设置:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
注意:配置完后重启网卡Service network restart出现失败时,用第四种方法检查配置文件中的Bootup是否为None,如果是DHCP一般会出错的。
3、配置网关:
查看网关:route
添加默认路由:
route add –net 0.0.0.0 netmask 0.0.0.0 gw 192.168.0.1
删除默认路由:
route del –net 0.0.0.0 netmask 0.0.0.0 gw 192.168.0.1
Linux路由配置:
1、首先开启路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward (1为打开路由功能,0为关闭路由功能)
(在这个实验里只要开启路由功能就OK了)
2、其它路由设置:
A、添加路由信息:
route add –net 10.0.0.1 netmask 255.0.0.0 gw 192.168.0.1
或者route add –net 10.0.0.1 netmask 255.0.0.0 dev eth0 (通过本机的第一个网卡出去)
删除路由条目:只要把上面的Add改为Del就可以了
B、用Zebra配置路由(配置就跟Cisco的是一样的命令):
1)设置登录密码:
Vi /etc/zebra/zebra.conf
password abc #设置连接时的密码
enable password 123 #设置特权密码
2)开启服务
service zebra start
3)建立要配置的路由协议文件
如用Rip协议:touch /etc/zebra/ripd.conf
4)开启Rip协议:service ripd start
5)进入Zebra:
方法一、Telnet 127.0.0.1 2601 ##记得端口是2601
如果没有设置密码,默认情况下是不允许连接的,适合于远程登录
方法二、Vtysh ##不用密码也可以进入,如果有密码还会显示出来,但只适用于本地登录,
6)配置路由:就跟在Cisco路由器里是一样的就略了
7)退出:quit(退出之前记得先保存一下)
命 令:usermod
功能说明:修改用户帐号,
语 法:usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s
补充说明:usermod可用来修改用户帐号的各项设定。
参 数:
-c<备注> 修改用户帐号的备注文字。备注>
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。有效期限>
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。缓冲天数>
-g<群组> 修改用户所属的群组。群组>
-G<群组> 修改用户所属的附加群组。群组>
-l<帐号名称> 修改用户帐号名称。帐号名称>
-L 锁定用户密码,使密码无效。
-s
-u
-U 解除密码锁定。
usermod 不 允 许 你 改 变 正 在线 上 的 使 用 者 帐 号 名 称 。 当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执 行 任 何 程 序。 你 需 手 动 更 改 使 用 者 的 crontab 档 。 也 需 手 动 更 改 使 用 者 的 at 工 作 档 。 采 用 NIS server 须 在 server 上 更 动 相 关 的 NIS 设 定 。
应用举例:
1、将 newuser2 添加到组 staff 中
# usermod -G staff newuser2
2、修改 newuser 的用户名为 newuser1
# usermod -l newuser1 newuser
3、锁定账号 newuser1
# usermod -L newuser1
4、解除对 newuser1 的锁定
# usermod -U newuser1
命 令: userdel
功能说明:删除用户帐号,
语 法:userdel [-r][用户帐号]
补充说明:userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
参 数:
-f 删除用户登入目录以及目录中所有文件。
userdel很简单,只有一个参数可选 -r ;如果加参数-r ,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除;比如我们现在有个用户jb51,其家目录位于/var目录中,现在我们来删除这个用户;
userdel jb51 注:删除用户jb51,但不删除其家目录及文件;
userdel -r jb51 注:删除用户jb51,其家目录及文件一并删除;
警告: 请不要轻易用-r参数;他会删除用户的同时删除用户所有的文件和目录,切记;如果用户目录下有重要的文件,在删除前请备份;
其实也有最简单的办法,但这种办法有点不安全,也就是直接在/etc/passwd中删除您想要删除用户的记录;但最好不要这样做,/etc/passwd 是极为重要的文件,可能您一不小心会操作失误;
其相似命令groupdel 是用来删除用户组的;
语法格式:groupdel 用户组
groupdel admin
假如删除的时候忘记带r参数 以后想删除这个用户的文件 可以用下面这条命令
find / --nouser -exec rm - rf {} \
删除所有 用户不存在而遗留的文件(因为用户已被删除,其文件的拥有者为其UID,参数nouser用于删除此类文件)
名称:halt
使用权限:系统管理者
使用方式:halt [-n] [-w] [-d] [-f] [-i] [-p]
说明:若系统的 runlevel 为 0 或 6 ,则关闭系统,否则以 shutdown 指令(加上 -h 参数)来取代
参数:
-n : 在关机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d) -f : 强迫关机,不呼叫 shutdown 这个指令
-i : 在关机之前先把所有网络相关的装置先停止
-p : 当关机的时候,顺便做关闭电源(poweroff)的动作
范例:
halt -p 关闭系统后关闭电源,
halt -d 关闭系统,但不留下纪录。
linux常用关机命令及其区别:
在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各种关机命令。
1.shutdown
shutdown命令安全地将系统关机。
有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失o使系统处于不稳定的状态o甚至在有的系统中会损坏硬件设备。
而在系统关机前使用shutdown命令o系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结o即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的o还可能重
启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档o而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。
shutdown执行它的工作是送信号〔signal〕给init程序o要求它改变runlevel。Runlevel 0被用来停机〔halt〕orunlevel 6是用来重新激活〔reboot〕系统o而runlevel 1则是被用来让系统进入管理工作可以进行的状态r这是预设的o假定没有-h也没有-r参数给shutdown,
要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作o你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。
shutdown 参数说明:
[-t] 在改变到其它runlevel之前o告诉init多久以后关机。
[-r] 重启计算器。
[-k] 并不真正关机o只是送警告信号给每位登录者〔login〕。
[-h] 关机后关闭电源〔halt〕。
[-n] 不用inito而是自己来关机。不鼓励使用这个选项o而且该选项所产生的后果往往不总是你所预期得到的。
[-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数o但是可以输入一个用来解释的讯息o而这信息将会送到每位使用者。
[-f] 在重启计算器〔reboot〕时忽略fsck。
[-F] 在重启计算器〔reboot〕时强迫fsck。
[-time] 设定关机〔shutdown〕前的时间。
2.halt—-最简单的关机命令
其实halt就是调用shutdown -h。halt执行时o杀死应用进程o执行sync系统调用o文件系统写操作完成后就会停止内核。
参数说明:
[-n] 防止sync系统调用o它用在用fsck修补根分区之后o以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。
[-w] 并不是真正的重启或关机o只是写wtmp〔/var/log/wtmp〕纪录。
[-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
[-f] 没有调用shutdown而强制关机或重启。
[-i] 关机〔或重启〕前o关掉所有的网络接口。
[-p] 该选项为缺省选项。就是关机时调用poweroff。
3.reboot
reboot的工作过程差不多跟halt一样o不过它是引发主机重启o而halt是关机。它的参数与halt相差不多。
4.init
init是所有进程的祖先o它的进程号始终为1o所以发送TERM信号给init会终止所有的用户进程p守护进程等。shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机oinit1为重启。关于init可以长篇大论o这里就不再叙述。另外还有telinit命令可以改变init的运行级别o比如otelinit -iS可使系统进入单用户模式o并且得不到使用shutdown时的信息和等待时间。
使用权限:所有使用者
命令:chsh
用法:shell>>chsh
说明:更改使用者 shell 设定
范例:
shell>>chsh
Changing fihanging shell for user1
Password: [del]
New shell [/bin/tcsh]: ### [是目前使用的 shell]
[del]
shell>>chsh -l ### 展示 /etc/shells 档案内容
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
推荐阅读:用chsh命令选择shell
1 我想知道我机器安装了哪些shell?
两种方法可以查看:
第一种:
[rocrocket@jb51.net ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
第二种:
[rocrocket@jb51.net ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
其实chsh -l也是来查看这个文件,
2 我想知道我当前正在使用的shell是哪个阿?
[rocrocket@jb51.net ~]$ echo $SHELL
/bin/bash
注意SHELL一定要是大写,
可以看到,我目前使用的shell是/bin/bash
3 执行了zsh之后,我查看当前shell类型仍然是/bin/bash呢?
请注意,我们虽然执行了zsh,但是所谓“当前的shell”是一个大环境的概念,是针对一个已登录的用户而言的。而我们执行zsh只是启动了一个zsh的解释器程序而已,并没有改变大环境。如果想改变“当前的shell”,那么还是要使用chsh才可以。
4 我想把我的shell改成zsh!
[rocrocket@jb51.net ~]$ chsh -s /bin/zsh
Changing shell for rocrocket.
Password:
Shell changed.
[rocrocket@jb51.net ~]$
使用chsh加选项-s就可以修改登录的shell了!
你会发现你现在执行echo $SHELL后仍然输出为/bin/bash,这是因为你需要重启你的shell才完全投入到zsh怀抱中去。
5 chsh -s到底是修改了哪里?
秘密告诉你吧。chsh -s其实修改的就是/etc/passwd文件里和你的用户名相对应的那一行。现在我来查看下:
[rocrocket@jb51.net ~]$ cat /etc/passwd|grep ^rocrocket
rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
看!你可以发现输出内容的最后部分已经变成了/bin/zsh了!下次你重启的时候,linux就会读取这一命令来启动你的shell了!
好了,我要恢复正常工作,把shell修改会我熟悉的/bin/bash了!
[rocrocket@jb51.net ~]$ chsh -s /bin/bash
Changing shell for rocrocket.
Password:
Shell changed.
wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出,
语法:wc [选项] 文件…
说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
该命令各选项含义如下:
- c 统计字节数。
- l 统计行数。
- w 统计字数。
这些选项可以组合使用。
输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。
行数、字数、字节数、文件名
如果命令行中没有文件名,则输出中不出现文件名。
例如:
$ wc - lcw file1 file2
4 33 file1
7 52 file2
11 11 85 total
省略任选项-lcw,wc命令的执行结果与上面一样
示例:
wc命令用来计算一个文件或者指定的多个文件中的行数,单词数和字符数,
如:
wc filename
第一列显示行数,第二列显示单词数,第三列显示字符数。
wc 有四个参数可选,分别是l,c,m,w
wc -l filename 报告行数
wc -c filename 报告字节数
wc -m filename 报告字符数
wc -w filename 报告单词数
今天看到的命令是:ls -l|wc -l 用来统计当前目录下的文件数
功能说明:将文本文件内容加以排序,
语 法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]结束栏位>起始栏位>分隔字符>输出文件>
补充说明:sort可针对文本文件的内容,以行为单位来排序。
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件>将排序后的结果存入指定的文件。输出文件>
-r 以相反的顺序来排序。
-t<分隔字符>指定排序时所用的栏位分隔字符。分隔字符>
+<起始栏位>-<结束栏位>以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。结束栏位>起始栏位>
--help 显示帮助。
--version 显示版本信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面通过几个例子来讲述Sort的使用。
用Sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。
$ cat text
vegetable soup
fresh vegetables
fresh fruit
lowfat milk
$ Sort text
fresh fruit
fresh vegetables
lowfat milk
vegetable soup
用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机,
下例中用户把排序后的文件内容保存到名为result的文件中。
$ Sort text>result
以第2个字段作为排序关键字对文件example的内容进行排序。
$ Sort +1-2 example
对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。
$ Sort -r -o outfile +1.0 -1.1 example
Sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给Sort进行排序,排序关键字是第6个至第8个字段。
$ ls - l | Sort +5 - 7
$ ps -e -o “ comm pid time”|Sort -d //按照command的首字母的字母顺序排序
Sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并,然后用管道操作把合并后的文本行输入给命令Sort,Sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中。
$ cat veglist fruitlist | Sort >clist
本文章来给大家介绍linux sed用法,sed命令来处理、编辑文本文件,他有大量的各种参数下面我来介绍一下,
利用script来处理文本文件。
语 法:sed [-hnV][-e
补充说明:sed可依照script的指令,来处理、编辑文本文件。
参 数:
-e
-f
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
基本sed编辑命令:
sed编辑命令
p 打印匹配行
= 显示文件行号
a 在定位行号后附加新文本信息
i 在定位行号后插入新文本信息
d 删除定位行
c 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
常用命令参数
sed '1,3d' file //删除1-3行
sed '/[Aa]bc/p' file //打印包含Abc或者abc的行
sed '/ABC/d' //删除包含ABC的行
sed '/ABC/!d' //不删除包含ABC的行
sed '5,$d' //从第五行到最后一行全部删除
sed 1q //显示第一行
sed 's/$/.../g' //每行的最后面添加 ...
sed 's/d.(sk)/1&/g' //满足d*sk的单词,在单词前添加sk sed 's/<[^>]*>//g' //去除html标签
sed '/ABC/a123' //在包含ABC的行后面添加一行数值为123的行
sed '/ABC/i123' //跟a不同的是i是插入当前行的前面
sed '/ABC/c123' //包含ABC的行将更改为123
sed '/ABC/{n;s/123/ABC/g}' //精确匹配包含ABC的下一行,将123全部替换成ABC
sed '/ABC/{s/A/a/}' //在包含ABC的行将A替换成a
sed -e '/ABC/h' -e '$g' //将包含ABC的行复制,在最后一行添加.
sed -e '/ABC/{h;d}' -e '/123/G' //将包含ABC的行复制并删除,在包含123的行后添加. g等于在当前行覆盖,G是在符合条件的行后新增加一行. sed 's/^/ /g' //每行前面增加一个空格
sed 's/.(.)$/*1/' //将倒数第二位换成*
sed '/ABC/!s/1/*/g' //在不包含ABC的行里,将所有的1替换成*
sed 's/1|2|3/*/g' //在GNU里将不管是1或2或者是3替换成*
sed -i ‘/Root/s/no/yes/’ /etc/ssh/sshd_config sed在这个文里Root的一行,匹配Root一行,将no替换成yes.
将 包含now 的行 替换为 带时间戳 以及 8080 变量请求数
sed -i “/now/cnow$time_stamp 8080 request=$web1tomcat” /var/www/html/munin/web1-2.html
在某行的位置插入一行
如果只是在一个文档后面追加一行,那很简单,
>>就可以搞定。不过如果是在指定的某一行里插入。
sed -i “8 s/^/alias vi='vim'/” /root/.bashrc
就是在第8行插入 alias vi='vim'
在第一行前插入文本
sed -i '1 i插入字符串' filename
在最后一行插入
sed -i '$ a插入字符串' filename
在匹配行前插入
sed -i '/pattern/ i “插入字符串”' filename
在匹配行后插入
sed -i '/pattern/ a “插入字符串”' filename
find一些常用参数的一些常用实例和一些具体用法和注意事项,
1.使用name选项:
文件名选项是find命令最常用 的选项,要么单独使用该选项,要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式 引起来。 不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.log的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
find ~ -name “*.log” -print
想要在当 前目录及子目录中查找所有的‘ *.log‘文件,可以用:
find . -name “*.log” -print
想要的当前 目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
find . -name “[A-Z]*” -print
想 要在/etc目录中查找文件名以host开头的文件,可以用:
find /etc -name “host*” -print
想要查找 $HOME目录中的文件,可以用:
find ~ -name “*” -print 或find . -print
要想让系统高负荷运行, 就从根目录开始查找所有的文件。
find / -name “*” -print
如果想在当前目录查找文件名以一个个 小写字母开头,最后是4到9加上.log结束的文件:
命令:
find . -name “[a-z]*[4-9].log” - print
输出:
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find . -name “[a-z]*[4-9].log” - print
./log2014.log
./log2015.log
./test4/log2014.log
[root@localhost test]#
2.用 perm选项:
按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
如 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
[root@localhost test]# find . -perm 755 - print
.
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/dep loy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
[root@localhost test]#
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-005相当于555,
命令:
find . -perm -005
输出:
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find . -perm - 005
.
./test4
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf /service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
./test3
[root@localhost test]#
3.忽略某个目录:
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有 你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了- depth选项,那么-prune选项就会被find命令忽略。如果希望在test目录下查找文件,但不希望在test/test3目录下查找,可以 用:
命令:
find test -path “test/test3” -prune -o -print
输出:
[root@localhost soft]# find test -path “test/test3” -prune -o - print
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service< /p>
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
tes t/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@localhost soft]#
4 .使用find查找文件的时候怎么避开某个文件目录:
实例1:在test 目录下查找不在test4子目录之内的所有文件
命令:
find test -path “test/test4” -prune -o -print
输出:
[root@localhost soft]# find test
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
< p>test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test /scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@localhost soft]# find test -path “test/test4” -prune -o - print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/ service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@localhost soft]#
说明:
find [-path ..] [expression]
在路径列表的后面的是表达式
- path “test” -prune -o -print 是 -path “test” -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果
-path “test” 为真,则求值 -prune , - prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假,
如果 -path “test” -a -prune 为假 ,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例 可以用伪码写为:
if -path “test” then
-prune
else
实例2:避开多个 文件夹:
命令:
find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
输出:
[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test /scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@localhost soft]#
说 明:
圆括号表示表达式的结合。 \表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
实例3:查找某一确定文件,-name等选项加在-o 之后
命令:
find test \(-path test/test4 -o -path test/test3 \) -prune -o -name “*.log” -print
输出:
[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -name “*.log” -print
test/log2014.log
test/log2015.log
test/log2013.log
test/log2012.log
[root@localhost soft]#
5.使用user和nouser选项:
按文件属主查找文件:
实例1:在$HOME目录中查找文件属主为peida 的文件
命令:
find ~ -user peida -print
实例2:在/etc目录下查找文件属主为peida的文件:
命 令:
find /etc -user peida -print
说明:
实例3:为了查找属主帐户已经被删除的文件,可以使用- nouser选项。在/home目录下查找所有的这类文件
命令:
find /home -nouser -print
说明:
这样 就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你 完成相应的工作。
6.使用group和nogroup选项:
就像user和nouser选项一样,针对文件所属于的用户组, find 命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
find /apps -group gem - print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样 的文件:
find / -nogroup-print
7.按照更改时间或访问时间等查找文件:
如果希望按照更改时间来查找 文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时 就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距 今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
find / -mtime -5 - print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
find /var/adm -mtime +3 - print
8.查找比某个文件新或旧的文件:
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可 以使用-newer选项。
它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
实例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件
命令:
find -newer log2012.log ! -newer log2017.log
输出:
[root@localhost test]# ll
总计 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log
-rw-r--r-- 1 root root 0 11-16 14:43 log2017.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr -x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find -newer log2012.log ! -newer log2017.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@localhost test]#
实例2:查找更改时间在比log2012.log文件新的文件
命令:
find . -newer log2012.log -print
输出:
[root@localhost test]# find -newer log2012.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@localhost test]#
9.使用type选项:
实例1:在/etc目录下查找所有的目录
命令:
find /etc -type d -print
实例2:在当前目录下查找除目录以外的所有类型的文件
命令:
find . ! -type d -print
实例3:在/etc目录下查找所有的符号链接文件
命令:
find /etc -type l -print
10.使 用size选项:
可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。 以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
在按照文件长度查找文件时,一般使用这 种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
实例1:在当前目录下查找文件 长度大于1 M字节的文件
命令:
find . -size +1000000c -print
实例2:在/home/apache目录下查找文件 长度恰好为100字节的文件:
命令:
find /home/apache -size 100c -print
实例3:在当前目录下查找长 度超过10块的文件(一块等于512字节)
命令:
find . -size +10 -print
11.使用depth选项:
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个 原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
实例1 :find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
命令:
find / -name “CON.FILE” -depth -print
说明:
它将首先匹配所有的文件然后再进入子目录中查找
12.使 用mount选项:
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
实例1 :从当前目录开始查找位于本文件系统中文件名以XC结尾的文件
命令:
find . -name “*.XC” -mount -print
查看全套教程:www.bianceng.cn/OS/Linux/201301/35075.htm
★ CAD命令手册