总结 1-7~1-12

 

1-7-文件权限管理

1-8-rhel7-软件包管理

1-9-文件的归档和压缩

1-10-RHEL7-Linux系统进程管理-

1-11-重定向和文件查找

1-12-find命令的使用

#######################################

1-7-文件权限管理

三种访问控制权限:文件拥有者、文件拥有者同组人员、其他人

文件权限描述信息:ls –l 1.txt  或 ll 1.txt

wps34D0.tmp

-rw-r--r--

其中第一个字符描述文件类型

第2-4个字符描述文件拥有者权限

第5-7个字符描述文件拥有者同组人员权限

第8-10个字符描述其他人权限

文件类型描述有:

- 普通文件、

d 目录,directory

l 链接文件、link

c 字符设备、character

b 块设备、blocks

p 管道设备、pipes

s 套接字文件、pipes

可根据文件类型查找文件,如下:

find / –type s # s是文件类型描述符 /搜索目录

文件的特殊权限:

Linux系统中,文件除了拥有读、写、执行权限外,还有一些特殊权限

可使用命令lsattr(查看)和chattr(修改)特殊权限

也可使用命令chmod命令来修改特殊权限

这里只讲三个:s(SUID、SGID)、SBIT(Sticky)

s(SUID):可执行文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。(符号表示:s,显示在拥有者权限x位置上)

s(SGID):1、设置在文件上面,其效果与SUID相同,只不过是获取文件所属组能使用的全部系统资源。2、设置在目录上,则所有属组用户(即与目录属组相同的用户),在这个目录中创建的文件的属组不是用户同名的组,而是与该目录的属组相同,所以所有属组用户都可以删除这个目录中的文件(符号表示:s,显示在属组权限x位置上)

SBIT(Sticky):作用是防止别人删除掉别人的资料(只针对目录、对文件无效),这个属性,很好的解决了上面的问题。(符号表示:t,显示在其他人权限x位置上)

因为SUID、SGID、Stick占用了x的位置,所以以大小写来区分,其是否有执行权限。小写表示带有执行权限。

文件权限操作命令:chmod

作用:修改文件权限

Usage:chmod [u|g|o]+[rwx] {文件名}

chmod [000-777] {文件名}

注:文件权限描述--->三位数字

r--  ---> 4

-w-  ---> 2

--r  ---> 1

r-xr--r-- ---> 6 4 4 ---> 644

rwxr-xr-x ---> 7 5 5 ---> 755

文件所有权变更:chown

作用:修改文件拥有者和属组

Usage:chown [user:group] {文件名} #同时修改属主和属组

chown [user] {文件名} #修改属主

chown [:group] {文件名}  #修改属组

文件创建时默认权限 umask:

umask设置文件创建时默认权限,它与chmod的效果相反,采用补码的形式

umask设置的是权限补码,chmod设置的是文件权限码

在/etc/profile、$[HOME]/.bash_profile、$[HOME]/.profile中

存在设置umask值的语句

wps34E1.tmp

#######################################

1-8-rhel7-软件包管理

RHEL7中,有三种管理软件包的方式:

1、rpm命令

2、yum命令

3、编译源码安装软件包

rpm命令管理软件包

选项:-ivh ---> 安装  --nodeps #不验证依赖关系

     -Uvh ---> 升级

     -e ---> 卸载

     -qf ---> 查询文件所属安装包

     -qa ---> 查询所有已安装软件包

     -qp ---> 查询软件包是否已安装

     -qi ---> 查询软件包信息

     -qd ---> 显示被标注为文档的文件列表

     -qc ---> 显示被标注为配置文件的文件列表

     -ql ---> 显示软件包中的文件列表

rpm软件包下载地址(推荐):

http://rpmfind.net/
http://rpm.pbone.net/
http://www.rpmseek.com/index.html
http://sourceforge.net

RPM缺点:rpm命令需要自己下载软件包,并且rpm命令不会解决其依赖关系,需要我们手动下载依赖关系包。

yum命令----Yellowdog Updater Modified

(安装软件包时,可分析其依赖关系,并安装依赖包)

yum命令安装软件包时,可以解决其依赖关系问题、自动下载软件包。基于C/S架构

yum源分为本地yum源网络yum源

在RHEL中,需要激活才可以使用网络yum源

(CentOS使用的是免费的YUM源哦)

配置好本地yum源后,才可以使用yum来安装软件包

本地yum配置文件格式如下:

[server_name]  #中括号中不要出现空格、不然会报错

name=server name  #yum源名称

baseurl=file://[filepath]  # yum源路径 [filepath] 是本地yum的路径

enable=[0|1]  # 是否启用yum源 0不启用  1启用

gpgcheck=[0|1] # 使用公钥检验rpm的正确性 0不检验 1检验

配置好yum源后,需要清除yum缓存,并生成软件包信息:

yum clean all #清除缓存

yum list #生成信息

Usage:yum [options] [command] [package ...]

command:

install #安装 update #升级

remove | erase #卸载

list #列出所有软件包 info #查看软件包信息

clean #清除软件包信息 grouplist #查看软件包组

groupinstall #安装软件包组

search string #查找string

deplist       # List a package's dependencies

例如:

yum –y install httpd  #安装apache服务命令

yum deplist httpd #查询apache的依赖关系

源码包--源码包安装流程

安装流程:

1、解压 ---> tar -xf[ j | J | z ]  {filepath}

j ---> tar.bz2 、  J ---> tar.xz 、  z ---> tar.gz

2、./configure #编译 --->

--prefix= #指定安装路径 --user= #指定用户 --group= #指定用户组

#一般解压后,编译程序都在当前目录下configure,若没有找到,可以打开README文件查看。

3、make #生成makefile ---> make –j 4 #四线程

4、make install #安装

-------------------------------------

实验:安装apache服务器(RPM)

#查询软件包是否安装

which httpd

rpm –q httpd

#安装两个依赖包

rpm -ivh /mnt/Packages/mailcap-2.1.41-2.el7.noarch.rpm

rpm -ivh /mnt/Packages/httpd-tools-2.4.6-40.el7.x86_64.rpm

#安装httpd

rpm –ivh /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm

wps34F1.tmp

yum deplist httpd #查询一下软件包依赖关系

wps34F2.tmp

wps34F3.tmp

wps34F4.tmp

wps34F5.tmp

wps3506.tmp

实战:安装nginx服务器(源码包)

上传nginx-1.11.3.tar.gz #安装包

tar zxf nginx-1.11.3.tar.gz -C /usr/src/  #解压包,-C指定路径

useradd -s /sbin/nologin -M nginx #添加nginx用户,维护服务

tail -1 /etc/passwd #检查用户添加结果

cd /usr/src/nginx-1.11.3/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx

echo $?

make -j 4

echo $?

make install

httpd开启状态?!

wps3507.tmp

实战:从光盘中提取二进制包并恢复丢失的文件

-------------------------------------

rpm2cpio - Extract cpio archive from RPM Package Manager (RPM) package.

Usage: rpm2cpio [filename]

Description:rpm2cpio  converts the .rpm file specified as a single argument to a cpio archive on standard out. If a '-' argument is given, an rpm stream is read from standard in.

Example:

# rpm2cpio rpm-1.1-1.i386.rpm
# rpm2cpio - < glint-1.0-1.i386.rpm
# rpm2cpio glint-1.0-1.i386.rpm | cpio –dium

rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm | cpio –idv ./etc/httpd/conf/httpd.conf

-------------------------------------

cpio - copy files to and from archives

三种运行模式:

Copy-out mode “-o” #cpio copies files into an archive.

Copy-in mode “-i” #cpio copies files out of an archive or lists the archive contents.

Copy-pass mode “-p” #cpio copies files from one directory tree to another, combining the copy-out and copy-in steps without actually using an archive.

Usage:

Description:GNU cpio is a tool for creating and extracting archives, or copying files from one place  to  another.   It handles a number of cpio formats as well as reading and writing tar files.

Example:

# ls | cpio -ov > directory.cpio

# find . -print -depth | cpio -ov > tree.cpio

# cpio -iv < directory.cpio #恢复.cpio中的文件

# cpio -idv < tree.cpio #恢复.cpio中的文件

# find . -depth -print0 | cpio --null -pvd new-dir

-------------------------------------

rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm | cpio –idv ./etc/httpd/conf/httpd.conf

wps3508.tmp

######################################

1-9-文件的归档和压缩

归档文件后缀:.tar、.gz、.bz/bz2、.xz、.zip、.rar等

tar命令、zip命令、rar/unrar命令

tar命令:(.gz\.bz2\.bz\.tar\.xz等归档压缩包)

Usage: tar [option...] [FILE]...

Example:

# tar -cf archive.tar foo bar  # Create archive.tar from files foo and bar.
# tar -tvf archive.tar  # List all files in archive.tar verbosely.
# tar -xf archive.tar   # Extract all files from archive.tar.

OPTIONS:(常用选项)

-c 创建 -f指定创建文件 -v显示过程 -x 提取文件 -z .gz结尾文件解压

-j .bz\.bz2结尾文件解压  -J .xz结尾文件解压 -C 指定解压路径

zip、unzip命令:(.zip)

Usage: zip options archive_name file file ...

Example:

zip z file.txt # Add file.txt to z.zip (create z if needed)

zip z * # Zip all files in current dir

zip -r z .  # Zip files in current dir and subdirs also:      

unzip -l foo.zip - list files in short format in archive foo.zip

unzip -t foo      - test the files in archive foo

unzip -Z foo      - list files using more detailed zipinfo format

unzip foo         - unzip the contents of foo in current dir

unzip -a foo     - unzip foo and convert text files to local OS

rar、unrar命令:(.rar)

rar命令linux不默认安装,需到网络上下载安装

http://www.rarlab.com/download.htm(已经配置好,下载后,直接运行即可!)

rarlinux-x64-5.4.0.tar.gz

安装如下:

tar -zxf rarlinux-x64-5.4.0.tar.gz -C /usr/local/

cd /usr/local/rar

make install

Usage:     rar <command> -<switch 1> -<switch N> <archive> <files...>

               <@listfiles...> <path_to_extract\>

file命令:determine file type

Usage: file [OPTION...] [FILE...]

OPTIONS:

-b 不显示文件名 -c 显示命令执行过程(便于排错) -C 检查指定文件有无格式错误

-d 将任何系统测试应用到软件 -z 探测压缩过的文件类型

-i output MIME type strings -L 显示连接指向的文件类型

-s treat special (block/char devices) files asordinary ones

file返回结果及含义:

empty 空文件
English text             #英文正式文件
directory                 #目录文件
assembler program text #汇编语言程序的文本文件
ascii text                #ASCII编码的文本文件
command text              #命令语言编写的命令正文程序
c program                  #c语言正文程序
relocation text          #用于连接的目标文件
executable                #可执行的目标代码文件

Examples:

$ file file.c file /dev/{wd0a,hda}

file.c:   C program text

file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),

                     dynamically linked (uses shared libs), stripped

/dev/wd0a: block special (0/0)

/dev/hda: block special (3/0)

$ file -s /dev/wd0{b,d}

/dev/wd0b: data

/dev/wd0d: x86 boot sector

$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}

/dev/hda:   x86 boot sector

/dev/hda1:  Linux/i386 ext2 filesystem

/dev/hda2:  x86 boot sector

/dev/hda3:  x86 boot sector, extended partition table

/dev/hda4:  Linux/i386 ext2 filesystem

/dev/hda5:  Linux/i386 swap file

/dev/hda6:  Linux/i386 swap file

/dev/hda7:  Linux/i386 swap file

/dev/hda8:  Linux/i386 swap file

/dev/hda9:  empty

/dev/hda10: empty

$ file -i file.c file /dev/{wd0a,hda}

file.c:      text/x-c

file:        application/x-executable

/dev/hda:    application/x-not-regular-file

/dev/wd0a:   application/x-not-regular-file

#######################################

1-10-RHEL7-Linux系统进程管理

三个概念:

程序:一组指令的静态结合

进程:程序的动态模式,一个运行中的程序

线程:轻量级的进程

三者关系:

程序每次启动,都会新建一个进程

每个进程相互独立,拥有自己独立的代码和数据空间,具有并发性和交往性

(相同程序启动的两个进程因为独立的代码和数据空间,所以他们是不一样的)

每个进程运行中,会启动很多线程,但至少有一个主线程,是资源分配的基本单位

(每个线程对应一个进程,共享该进程的代码和数据)

每个线程不能单独执行,但是每个线程都有程序的入口和执行序列以及程序出口。多个进程组成进程才能被执行。

进程的属性:

PID(进程ID)、PPID(父进程ID)、UID(所属用户ID)、GID(所属用户组)、状态(R、S、Z)、优先级(NI)、终端名、占用资源(CPU、MEM)

进程管理工具:

如:ps、top、pgrep、ptree、netstat、kill等命令

ps命令:report a snapshot of the current processes.(静态)

[root@xiaogan122 ~]# rpm -qf `which ps`

procps-ng-3.3.10-3.el7.x86_64

Usage:ps [options]

OPTIONS:

-a 显示所有终端中运行的进程

-u 显示所有用户的进程 -u <UID> 查看指定用户进程

-x 显示没有终端的进程

-p <PID> 显示指定PID的进程

-l 长格式

-e 显示所有进程(包括没有终端的进程)

Examples:

ps -aux #查看全部进程 (#是用BSD的格式来显示进程)

ps -p 1234 #显示进程ID为1234的进程信息

ps -u #查看指定用户进程信息(不写用户则为当前登录用户)

ps -le #查看全部进程 与-aux格式不通 (#是用标准的格式显示进程)

top命令:display Linux processes(动态更新)

[root@xiaogan122 ~]# rpm -qf `which top`

procps-ng-3.3.10-3.el7.x86_64

Usage:top [option]

top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

OPTIONS:

-h -v 查看帮助信息

-b -c -d -H -i -n -o -O -p -s -S -u | -U -w

Examples:

top -p pid #显示进程id等于pid的进程信息

top  #显示全部进程信息

在top命令下一些快捷键:(进入top动态显示界面,按h或?键可进入下面的帮助界面)

wps3519.tmp

pgrep命令:

pgrep, pkill - look up or signal processes

based on name and other attributes

[root@xiaogan122 ~]# rpm -qf `which pgrep`

procps-ng-3.3.10-3.el7.x86_64

Usage:pgrep [Server Name]

pgrep/pkill [options] <pattern>

OPTIONS:[pgrep --help] #to see help

Examples:

pgrep sshd

pstree命令:display a tree of processes

[root@xiaogan122 ~]# rpm -qf `which pstree`

psmisc-22.20-9.el7.x86_64

Usage:pstree [option]

OPTIONS:[pstree --help] #to see help

Examples:

pstree #以树状图显示进程,只显示进程的名字,且相同进程合并显示。

pstree -p #以树状图显示进程,还显示进程PID。

netstat命令:

rpm包:

[root@xiaogan122 ~]# rpm -qf `which netstat`

net-tools-2.0-0.17.20131004git.el7.x86_64

Usage:netstat [options]

OPTIONS:[netstat --help] #to see help

-a # display all sockets (default: connected)

-n # don’t resolve names ( host \ port \ user )

-l # display listening server sockets

-p # display PID/Program name for sockets

-t # to see TCP

-u # to see UDP

Examples:

netstat -anlpt #查看全部TCP连接

netstat -anlpu #查看全部UDP连接

nestat -anlpt | grep httpd #grep结合使用,查看某服务监听端口

kill命令:control process

[root@xiaogan122 ~]# rpm -qf `which kill`

util-linux-2.23.2-26.el7.x86_64

Usage:kill [option] ...

kill [-s signal|-p] [-q sigval] [-a] [--] pid...

kill -l [signal]

OPTIONS:

-l #列出所有信号

-s signal #指定发送的信号代码

-p pid #指定要操作的pid

Examples:

kill -9 5873 #杀死进程pid=5873

kill -s 9 5873 #同上

killall httpd #杀死httpd全部进程

虚拟文件系统  /proc  /sys

Linux系统中,一切皆文件,设备可以通过读写来操作;

/proc 内存中有关系统进程的信息

/sys 有关系统内核以及驱动的信息

cat /proc/cpuinfo #查看当前cpu信息

wps351A.tmp

wps351B.tmp

#开启内核转发功能,如下:

echo "1" > /proc/sys/net/ipv4/ip_forward

LINUX后台进程与前台进程

Linux后台进程:也叫守护进程 ( Daemon ),是运行在后台的一种特殊进程。

守护的意思就是不受终端控制。Linux中大多数服务器都是用守护进程来实现的。

Linux前台进程:用户使用的有终端控制的进程。

进程前后台运行相关指令:fg、bg、jobs、&、ctrl+z

& :用在一个命令最后,可以把这个命令放在后台执行。

ctrl + z : 将一个正在前台执行的命令放到后台,并且暂停。

jobs : 查看当前后台运行进程的数量

fg : 将后台运行的命令调至前台继续运行。Usage: fg %jobnumber

bg : 将一个后台暂停的命令,变成继续执行。Usage: bg %jobnumber

wps351C.tmp

进程优先级管理:

优先级: 内存占用CPU的QOS机制等

优先级取值范围: ( -20,19 )

越小优先级越高,默认优先级是0

renice/nice命令:指定程序的运行优先级

[使用top命令可以查看进程的优先级]

作用:指定程序的运行优先级

Usage:nice -n command #以优先级级别n运行command命令

renice n -pid PID #更改pid为PID的进程优先级为n

Examples:

nice -n 5 vim a.txt #以第5优先级别,运行vim a.txt命令

ps -aux | grep vim #查看vim进程

top -p PID #根据上一条命令查看的pid,查看pid进程信息

renice n -pid PID #更改pid为PID的进程优先级为n

文件控制台的窗口管理:

screen命令: ( screen manager with VT100/ANSI terminal emulation )

screen作用: screen中有会话的概念,用户可以在一个screen绘画中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/ssh连接窗口那样.

执行screen命令,将创建一个执行shell的全屏窗口.可以在其中执行任何shell程序.输入exit即退出该窗口.

在远程连接某些远程主机进行大型维护项目时,可使用screen进行维护,这样,在意外断开远程连接时,不会因为意外断开而终端正在进行的工作!

Usage:

screen [-opts] [cmd [args]]

or: screen -r [host.tty]

Options:screen --help #查看帮助信息

-A 将所有的视窗都调整为目前终端机的大小。

-d <作业名称> 将指定的screen作业离线。

-h <行数> 指定视窗的缓冲区行数。

-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-r <作业名称> 恢复离线的screen作业。

-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s 指定建立新视窗时,所要执行的shell。

-S <作业名称> 指定screen作业的名称。

-v 显示版本信息。

-x 恢复之前离线的screen作业。

-X   #Execute <cmd> as a screen command in the specified session.

-ls或--list 显示目前所有的screen作业。

-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。

实例:

screen -S yourname -> 新建一个叫yourname的session

screen -ls -> 列出当前所有的session

screen -r yourname -> 回到yourname这个session

screen -d yourname -> 远程detach某个session

screen -d -r yourname -> 结束当前session并回到yourname这个session

screen -S sandy -X screen ping www.baidu.com

这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

C-a ? -> 显示所有键绑定信息

C-a c -> 创建一个新的运行shell的窗口并切换到该窗口

C-a n -> Next,切换到下一个 window

C-a p -> Previous,切换到前一个 window

C-a 0..9 -> 切换到第 0..9 个 window

Ctrl+a [Space] -> 由视窗0循序切换到视窗9

C-a C-a -> 在两个最近使用的 window 间切换

C-a x -> 锁住当前的 window,需用用户密码解锁

C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。

C-a w -> 显示所有窗口列表

C-a t -> Time,显示当前时间,和系统的 load

C-a k -> kill window,强行关闭当前的 window

C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vim 一样

    C-b Backward,PageUp

    C-f Forward,PageDown

    H(大写) High,将光标移至左上角

    L Low,将光标移至左下角

    0 移到行首

    $ 行末

    w forward one word,以字为单位往前移

    b backward one word,以字为单位往后移

    Space 第一次按为标记区起点,第二次按为终点

    Esc 结束 copy mode

C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

使用screen:

需要安装screen软件包

yum -y install screen

wps351D.tmp

实例:

wps351E.tmp

#######################################

1-11-重定向和文件查找

重定向的含义:

在实际的Linux维护中,改变输入输出内容的方向(不是用默认的标准输入输出设备,即重定向).

重定向命令符号: > ( 覆盖输出 ) >> ( 追加输出 )  < ( 输入 )

文件描述符:0 1 2

文件描述符是一个简单的整数.用以表示每一个被进程所打开的文件

根据被打开的文件顺序,第一个被打开的文件是0,第二个是1,以此类推.

查看当前Linux的默认文件描述符 ---> ulimit -n

用户通过操作系统处理信息的过程中,使用的交互设备文件如下:

wps353E.tmp

在Linux系统中,在一个程序运行时,会打开很多文件,

其中默认打开前三个文件,

以此为标准输入文件、标准输出文件、标准错误文件

标准输入文件   STDIN   文件描述符为0    默认为键盘

标准输出文件  STDOUT   文件描述符为1    默认为显示器

标准错误文件  STDERR   文件描述符为2    默认为显示器

STDIN  标准输入 默认的设备是键盘 文件编号为:0

命令将从标准输入文件中 读取 在执行过程中的 需要的 输入数据.

数据来源于文件

STDOUT 标准输出 默认的设备是 显示器 文件编号为:1

命令执行后的输出结果,发送到标准输出文件.

结果输出到文件

STDERR 标准错误 默认的设备是显示器 文件编号为:2

命令将执行期间的各种错误信息发送到标准错误文件.

错误信息发送到文件

标准输入,标准输出和标准错误默认使用键盘和显示器作为关联设备

与操作系统进行交互完成最基本的输入,输出操作.

实例:

输出重定向: > (覆盖重定向)  >> ( 追加重定向 )

echo "ni hao! " > a.txt

echo "hello world! " >> a.txt

wps353F.tmp

输入重定向: < ( 指定重定向输入文件 )

passwd lisi --stdin <password.txt

wps3540.tmp

标准错误重定向:

ls memory 2>err.log

ls memroy 2>/dev/null #/dev/null

wps3541.tmp

标准错误与标准输出同时定向到一个文件:

&> 混合输出 ( 不分正确的还是错误的 )

2>&1 将标准错误输出到标准输出( 将标准错误输出到标准输出文件 )

wps3542.tmp

管道的作用:

前面的输出作为后面的输入(可以将两条命令连接起来)

wps3543.tmp

常用文件查找命令:

tee \ which \ whereis \ locate \ find \ grep

tee命令:

作用:read from standard input and write to standard output and files

Usage:tee [OPTION]... [FILE]...

options:

-a --append #对给出的文件进行追加操作,而不是覆盖

-i #忽略中断信号

实例:

tee a.txt #编辑a.txt文件,若没有则新建(已覆盖方式)

tee -a a.txt #对a.txt追加内容,并将追得的内容显示到屏幕上

wps3544.tmp

which命令: 查找二进制可执行文件的绝对路径

whereis命令:查找本地二进制可执行文件、源码及帮助的路径

locate命令: #结合本地数据库,查找文件

注:在使用本地数据库查找新建文件时,是查找不到的,这是需要使用命令:

updatedb #更新数据库

grep命令:#过滤信息

-v  反转

-i  忽略大小写

^#  以#开头的行

#$  以#结尾的行

^$  空行

#######################################

1-12-find命令的使用

find命令: #在目录结构中,搜索文件,并执行特定的操作

find命令提供了相当多的查找条件,功能很强大

Usage:find pathname -options[-print]

pathname要搜索的路径

Options:

-print 输出(有时必须有,有时可有可无,有时必须无)

-name #根据文件名查找

-perm #根据文件权限查找

-prune #忽略某文件或目录

-depth #在指定目录中查找后,进入其子目录查找,有-depth时,-prune选项失效

-user #根据文件属主查找

-group #根据文件属组查找

-nouser -nogroup #查找没有属主或属组的文件( 可能是文件的属组或属组被删除了 )

-mtiome -n/+n #根据文件修改时间查找,还可根据atime \ ctime 查找

                 #-n n天内的文件  +n n天前的文件(不是未来事件哦)

-type [b,d,c,p,l,f...] #根据文件类型查找

-size #根据文件长度查找

-fstype #在某个文件系统中查找

-mount #不跨越挂载点查找

-follow #若查找到的是链接文件,则会跟随到其源文件

实例:

find / -name a.txt #在根目录下,查找文件名为a.txt的文件

find命令中选项-path和-prune的使用

1. 在当前目录下查找所有txt后缀文件

    find ./ -name "*.txt"

2.在当前目录下的dir0目录及子目录下查找txt后缀文件

    find ./ -path "./dir0*" -name "*.txt"

3.在当前目录下的dir0目录下的子目录dir00及其子目录下查找txt后缀文件

    find ./ -path "*dir00*" -name "*.txt"

4.在除dir0及子目录以外的目录下查找txt后缀文件

    find ./ -path "./dir0*" -a -prune -o -name "*.txt" -print

说明:-a 应该是and的缩写,意思是逻辑运算符‘与’(&&); -o应该是or的缩写,意思是逻辑运算符‘或’(||), -not 表示非.

命令行的意思是:如果目录dir0存在(即-a左边为真),则求-prune的值,-prune 返回真,‘与’逻辑表达式为真(即-path './dir0*' -a -prune 为真),find命令将在除这个目录以外的目录下查找txt后缀文件并打印出来;如果目录dir0不存在(即-a左边为假),则不求值-prune ,‘与’逻辑表达式为假,则在当前目录下查找所有txt后缀文件。

5.在dir0、dir1及子目录下查找txt后缀文件

    find ./ \( -path "./dir0*" -o -path "./dir1*" \)  -a -name "*.txt" -print

6.在除dir0、dir1及子目录以外的目录下查找txt后缀文件

    find ./ \( -path "./dir0*" -o -path "./dir1*" \) -a -prune -o -name "*.txt" -print

注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,所以需要用反斜杠'\'进行转意(即'\'转意字符使命令行认识圆括号)。同时注意'\(','\)'两边都需空格。

+1. 在所有以名为dir_general的目录下查找txt后缀文件

find ./ -path "*/dir_general/*" -name "*.txt" -print

posted @ 2016-09-11 14:52  小甘丶  阅读(569)  评论(0编辑  收藏  举报