一、Linux基础入门和架构了解

第一章入门


一、虚拟机准备工作

1、仅主机模式:

保证guest可以和host(宿主机)通讯的。保证ip地址在一个网段里。宿主机安装完毕后(vmware),会自动生成两块网卡,vmnet1和vmnet8,其中vmnet1的作用就是在设置guest主机网卡类型为仅主机模式。

 

2、nat模式:

在保证仅主机模式下又可以与真实主机通讯的方式,需要将guest1,6及vmnet1的网卡进行nat映射到真实网卡上,然后通过真实网卡与真实交换机连接进行通讯的方式。 

缺点:外部主机不能访问内部虚拟机,不适用于虚拟机对外提供服务的情况。

二、linux历史和版本追溯

linux 发行商: 

   类似的有bebian,redhat,slackware等,当然目前流行的centos是redhat的发行分支,而ubantu是debian的一个分支,总之,这些发行机构最开始都没有具备linuxe的研发能力,真实对linux的安装过程进行相应的二次开发,方便终端用户的linux系统安装。由此可知,发行商的发行版本号与linux的内核版本号并不一样,所以在选择linux的时候,同样要注意内核版本号。

228DBA44728649E3877CA7D943969AC0\"

计算机是由硬件组成的,而要使这些硬件能够工作,内核来完成,内核的作用就是通过内置的指令集来驱动各种硬件,并为开发人员提供开发接口,开发人员通过开发程序来完成进一步应用程序的设计,而应用程序是否可以运行需要内核的指令集支持,并且默认情况下,在一个平台开发的程序,只可以在这个平台使用,因此出现了跨平台编程软件,而编程软件里面内置了同内核交互的函数,开发人员只需要按照编程语言的规则编辑就可以实现内核功能的调用,简言之,应用程序实际上就是对内核的功能调用。

操作系统可以说最初就是一个内核,后来不断的扩展增加了很多功能,成了内核+应用程序的复合体。

由于操作系统在一个主机上安装完毕后,会依据现有硬件情况安装相应的驱动,如果硬件变化,特别是cpu变化,导致指令集不同,会造成内核无法读取cpu的指令集,系统崩溃的现象。

综上所述,硬件-内核-操作系统-应用程序,都是要一一对应的,不匹配会造成错误。

第二章 操作系统架构详解 

一、linux基础

1、linux基本法则: 

        1、一切皆文件 

        2、从多单一目的的小程序组成。 

        3、组合小程序完成复杂任务。 

        4、尽可能避免捕捉用户接口、为了方便脚本编程以实现自动化执行。 

         5、使用文本文件保存程序的配置数据,使用一个文本编辑器即可完成系统及服务配置工作。 

2、用户接口:

 CLI接口(command line interface): shell外壳:sh 、bash csh、zsh tcsh

GUI接口(graph user interface):gnome,kde、xfce图形界面。

3、终端类型: 

虚拟终端:通过登录主机后,进行不同切换fn+f1等方式获得的不同终端称为虚拟终端。表现为tty1、tty2 

伪终端:远程终端称为伪终端、通过ip地址链接,比如/dev/pts/0,工具有ssh、telnet等。 

物理终端:控制台(console) 表现为/dev/console。 

串行终端:通过串行口链接的方式。表现为/dev/ttyS1。 

3、启动图形终端:

条件:安装系统时安装了startx的图形界面,第一次启动图形界面的时候使用startx,以后可以通过ctrl+alt+f7来完成切换。

启动多个图形界面: startx -- :2(3/4/5/6等) 

F87850BF2F5D40C88462B42567CD0621\"

4、输入输出

 cpu如何得知io设备什么时候提出访问要求,一般有一下几种:

1、poll盲等待,每隔一定时间查看io是否有请求。

2、interrupt中断,io有要求的时候提出中断请求,要求响应。而由硬件产生的中断称为硬中断,而由软件发起的中断称为软中断。


5、文件系统

文件系统存在的意义是什么呢?

系统安装完毕后需要查找响应的文件,如果没有对文件进行相应的索引操作,类似图书馆里的图书目录,那么系统查找起文件来是相当困难的,所以提出了文件系统的概念,就是为系统提供文件的安装,查找,和使用的。创建文件系统就是将一块磁盘分成很多的小格子(block)来存放文件,并对每个小格子进行标注(inode),来方便文件的存取。cpu读取数据的时候也是要求读硬盘的那个扇区来完成的。 

简言之,文件系统就是对存储在磁盘上的数据进行索引、查找、存储的方法。

6、变量

有名称的内存的空间,也就是内存地址。 

7、常用命令大杂烩

查看用户的环境变量:printenv 

查看命令属于内部命令还是外部命令(命令类型):type 命令名 

命令的类型: 

 内部命令:有shell程序自带的命令。 

 外部命令:程序本身不在shell里,在一个独立的目录下,需要在该目录下使用或者通过path指向。  

给变量赋值:变量名= 数值 

对于不同的数值,表示方法不同 ,如果数值是字符串,建议用单引号括起来。 

修改提示符信息:PS1    \\u:当前用户名   \\h:主机名 \\H:FQDN,完整主机名。 \\W:当前目录的基础名 \\w: 完整路径名。 

例如:$PS1="[\\t@\\h \\w ]$"

shell是用户与系统进行交互通讯的程序,所以在系统启动的时候就已经启动为用户服务了,通过type $SHELL可以看到当前使用的shell类型。而shell通过$PATH变量来查找命令位置。echo $PATH 

8、参数和选项

linux命令选项:调整命令的作用方式。 

  短选项:多个选项用空格分割: -l -h -d 

                合并使用:-lhd 

  长选项:--directory 一般不能合并。 

参数:命令的作用对象 

  ll -h \\etc(\\etc是参数,-h是选项) 

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

常用命令: 


关闭、开启系统

shutdown

-h 设置关闭时间

立即关机

shutdown -h now

指定关闭时间

shutdown -h 14:22

设置三分钟后关机

shutdown -h 3


-r:重启系统

设置2分钟后重启

shutdown -r 2

poweroff:强制立即关机,需要已经做好数据保存并且没有其他用户在使用。

reboot:同样是强制立即重启。

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

帮助命令

man

-k :针对命令的特性进行查找

查找具有network功能的命令

man -k network

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

历史命令和用户别名

history

-c 清空历史记录

alias

设置别名

alias gong=‘ll -a’

取消别名

unalias gong


永久设置:添加命令到/etc/profile文件

说明

/etc/profile:定义全局(所有用户)用户环境信息,类似windows的全局配置文件

/etc/bashrc:仅对使用bash脚本的用户使用此配置文件

~/bash_proflie:仅对本用户生效

~/.bashrc:本地用户使用shell情况生效


查看错误代码信息

peeor

[root@37-test ~]# perror 111
OS error code 111: Connection refused

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

文件链接命令ln

软连接:类似快捷方式,-s

硬链接:源文件的“副本”,使用相同的存储区域,但i节点不同。默认选项

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

文件操作


创建文件touch

指定文件时间戳-d

touch -d ‘1/21/12 12:11’test.txt

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

创建目录mkdir

-p:创建多级目录

mkdir -p /etc/a/b/c/d

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

移动和重命名mv

复制文件cp

-R:递归复制多级目录及文件

-p:复制时保留原权限

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

删除文件rm

-r:递归删除目录及目录下的内容

-f:强制删除,不需要询问。

rm -rf /var/log/www/

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

查看文件类型file

linux不想windows一样带有文件扩展名,所有文件类型通常直接看不到,通过file可以查看,常见文件类型有:二进制文件、

设备文件、链接文件、shell脚本文件等多种类型。

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

同文件内容相关命令


查看文本文件内容cat

-v:显示文件同时显示控制字符。

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

从文本末尾查看tail(head)

-n:指定查看的行数

-f:动态显示文件内容的变化,常用于监控日志。

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

文件权限和目录配置


绝对目录:从根目录开始的目录结构

相对目录:从当前目录开始的目录结构

.:当前目录

..:上级目录

~:家目录

-:前一个工作目录


改变当前工作目录cd

   切换到其他用户的家目录:cd ~用户名

   切换到刚才进入的目录:cd - 

查看当前工作目录pwd

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

历史命令history

history保存命令的条数取决于$history

history的命令会保存在用户家目录里的.bash_history隐藏文件里,通过$HISTFILE来定义。 

此文件保存的最大数量有变量$HISTFILESIZE指定。 

history n :表示显示指定数量的最近命令历史记录

history -c :清空历史命令。 clear 

history -d 命令编号:删除指定命令 delect 

history -a 保存地址:保存历史命令到指定的文件目录中。append(追加) 


bash调用history历史命令的技巧:

!数字:调用历史命令。 

!!:执行上一条历史记录的命令。 

!string:执行命令历史记录中最近一次一string开头的命令。

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


获取命令帮助信息。 

 内置命令:help command 

                  例如: help ls 

外部命令:command --help 

man命令位置:/usr/share/man 

应用程序的帮助手册一般都会在/usr/share/man目录下存放,用户在使用man命令查看某一个命令的使用方法时,会调用里面的压缩文件手册。

[root@localhost ~]# whatis ls

ls                   (1)  - list directory contents

ls                   (1p)  - list directory contents

[root@localhost ~]# ll /usr/share/man/man1p/ls.1p.gz 

-rw-r--r--. 1 root root 8156 2月  22 2013 /usr/share/man/man1p/ls.1p.gz


man  

   手册有章节,一般为1-9, 

   不同命令的手册可能在不同的章节里,如果简单的使用man ls 不一定能找到相应的内容,通过man n ls指定需要查看的章节来看手册,当然如果并不知道某一条命令在那个章节里,可以通过whatis ls的方式查看该命令的手册细节。whatis是通过一个数据库来进行查找的,当然如果数据库没有进行及时更新,可以通过makewhatis命令来手动更新数据库。

注意:man能够为出用户手册外,同样可以为库、系统调用提供帮助。 

    一般情况下,章节按以下分类: 

          1、用户命令 

          2、系统调用 

          3、库调用 

          4、设备文件 

          5、配置文件 

          6、游戏 

          7、杂项 

          8、管理命令

帮助中的格式字符串: 

[]:表示可以省略 

<>:必须使用 

|:二选其一 

...:同类内容可以出现多次。 

{a|b}:二选其一 

man的使用方法: 

翻屏: 空格键,向下翻一屏。 

b:向上翻一屏。 

回车键:向下翻一行。 

k:向上翻一行。 

ctrl+d:向下翻半屏。 

ctrl+u:向上翻半屏。 

字符串搜索:(适用于vi、man、help等查找)

 /string:搜索关键字。向下搜索 

?string:搜索关键字。向上搜索 

 n:表示搜索下一个。next 

 N:搜索上一个。

退出: 

 q:退出 

ctrl+z:退出

info命令:获取在线帮助信息。此命令仅在man命令无法获取足够信息的情况下使用,当然此命令要求联网操作。 

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

定时关机shutdown

shutdown +m :指定关闭时间(多少分钟后) 

[root@localhost ~]# shutdown +10


Broadcast message from root@localhost.localdomain

(/dev/pts/0) at 0:24 ...


The system is going down for maintenance in 10 minutes!

shutdown 12:12:指定关闭时间,具体时间 

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


bash的重要特性

     命令在第一次使用时会查找PATH路径,并将结果换成下来,当第二次使用时通过缓存进行查看。通过命令hash来进行管理。 

 -d:删除指定的缓存命令 delete

 -r:清空缓存 clear 

特性一:命令补全功能。 

 通过tab按键可以依据命令开头寻找并补全或者显示所以可以搜索到的一某一个字符开头的所有命令。并且bash同款可以完成路径补全的功能,通过输入不完整的路径名,进行tab补全操作。 

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


linux系统文件系统的基础特性: 

1、文件名区分大小写。 

2、所有文件都在根目录下/ 

3、所有文件都已/作为分隔符。 

4、每个文件都可以使用除/以外的任意字符。最长不能超过255字符。 

每个绝对路径都包括两部分,基名和目录名 

 基名:basename  绝对路径 

[root@localhost ~]# basename /etc/libreport/plugins/ureport.conf 

ureport.conf

 目录名:dirname 绝对路径

[root@localhost ~]# dirname /etc/libreport/plugins/ureport.conf 

/etc/libreport/plugins

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



date命令讲解

    显示设置时间和日期

date +formate

        %F:只显示日期

        %s:时间戳计时法(从1970开始)到现在经过的秒数。

        %T:时间

        %u:周

date [mmddhhmm]:date 060511202000.33       2000年5月6日11:20:33秒


date --set=“20150906 10:29:11” 设置日期和时间



date +%H-+%M-+%S  更改显示时间的格式为-分割。 


linux有两个时钟:系统时钟和硬件时钟

 硬件时钟:主板bios时钟。 clock  hwclock

 系统时钟:linux date 

设置硬件时钟以系统时间为准:hwclock -w 

设置系统时间以硬件时间为准:hwclock -s 


ntp协议:通过网络同步本地系统时间。通过ntpdate server来指定时间服务器。


who:显示登陆到当前系统的用户。 

whoami:判断当前终端上登陆的用户。 

which:显示指定命令的完整路径。 

linux文件系统层级结构标准(FHS) 

 用来规范linux系统下各个目录如何进行使用,保证软件开发人员和用户能够方便快捷的使用linux系统。 

/bin /sbin :系统启动或者运行时必须的、核心二进制命令 

/usr/bin /usr/sbin:系统运行中,用户为完成特定操作可能用到的命令 

/lib:共享库文件和内核模块的存放位置。 重新加载库文件使用ldconfig命令

/etc:用于存放系统及安装程序的配置文件。 

/usr: 

/usr/bin,/usr/sbin :安装程序的执行命令程序。 

/usr/lib,/usr/lib64:安装程序的库文件 

/usr/share/man,/usr/share/doc:安装程序的帮助文件 

/dev:device上的简称,所有设备的设备文件都放在这里,(仅有元数据,没有数据) 

/proc:系统的硬件虚拟信息显示。 

/sys:硬件信息虚拟文件系统接口 

/boot:系统启动,加载时用到的静态文件。 

/mnt:挂载临时设备 

/media:挂载移动设备 

/srv:服务用到的数据。 

/tmp:临时文件 

/var:经常发生变化的目录,日志文件缓存数据。 

/misc :备用目录 

/opt:第三方程序安装目录(过去) 

/usr/local:第三方安装目录(目前) 

应用程序的组成部分: 二进制程序,库文件,配置文件,用户手册 

文件管理类命令:


文件类型

  普通文件:-

  目录文件:d(directory)

  链接文件:硬链接 :-

                   软连接:l

  压缩文件:gz

  设备文件:

                  字符设备文件:c(character)(线性设备查找时需要从前往后找) 

                   块设备文件:b(block)(随机设备)

 命名管道:(p)pipe

 套接字文件:s(sock)

       

mkdir和rmdir都有 -p选项,但用法是不同的,mkdir -p是递归建立文件夹,先建立父文件夹然后在建立子文件夹,如果是rmdir表示删除子文件夹的时候如果父文件夹为空,则一并删除,如果不为空则保留。

rmdir -p:删除单传(只有一个子目录)目录路径中的目录   


{}:表示或的关系从{}选择。

   /tmp{x,y} 表示为:/tmp/x和/tmp/y 

  

理解:mkdir -pv /tmp/{x,y}/{z,m} 

练习:创建/tmp/     a_b,c_b,a_d,c_d 

            mkdir -pv  {a,c}_{b,d} 

练习二: 在/tmp/mylinux目录下创建一下目录: 

81C8D581C9BE4BF3ACDDE6F1100F3EF7\"

 mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/networking-scripts},lib/module,lib64,proc,sbin,sys,tmp,usr/{bin,lib,lib53,local/{bin,lib,lib64,sbin},sbin},var/{lock,log,run}} 

ls

常用选项: 

-l:显示文w件的详细属性 

     第一位:文件类型 

     第二位到9位:权限 r:读,w:写 x:执行。 

     .:文件有隐藏属性,通过lsattr命令可以查看。 

    数字:表示此文件被硬链接的次数。 

    属主:owner,文件所有者 

    属组 :group,文件所属的组。 

    数字:文件大小,字节。-h(human  ),便于认读的方式,m

    时间:修改时间。 

    文件名 

-a:显示所有属性 

-d:进行时指定目录的自身属性。通常与-l使用。 

-r:逆序显示(assic字母表) 

-R:递归显示目录及子目录。(recursive) 

-i:列出文件的节点号

-R:递归列出所有子目录

touch 

cp 

-p:连同文件属性一起复制

-r:递归复制

-s:软连接复制

-h:硬链接复制

-i:对覆盖问题,进行提示

-u:对新的文件进行更新

mv 

rm

-f:强制删除

-r:递归删除

-i:交互操作

取得路径的文件名或目录名

basename :取得文件名

dirname:取得目录名

查看元数据属性:stat

文本编辑器:vi nano 

stat:显示文件的元数据(文件属性及文件内容的附属特性) 

 modify:表示文件内容的改变 

change:表示文件元数据属性的改变,包括大小、文件名、权限等。 

touch:改变时间戳及创建文件 

-a :修改读取时间 

-m:修改modify时间,无论怎样change时间均会改变。 

cat:连接并显示文件内容(concatenation) 

将数据打散并可以在网络上传输的格式称为数据流。

-E:显示文本编辑中的行结束符,比如回车符。

-n : 显示行号

-v:显示所有非打印字符。


tac:逆序显示文件内容同cat相反。


本地终端下可以通过shift+pageup,shift+pagedown来进行翻屏,此方法并不太灵活可以参考more,less来完成翻屏工作。 more不能向上翻屏,而less可以上下翻屏。

查看文件部分内容通过tail(尾部),head(头部)来完成。 

-n来指定显示的行数。 

-f常常用来监控日志文件,查看不断变化的文件的尾部信息。 

命令总结:shutdown、date、reboot、halt、poweroff、which、who、man、info、whatis、makewhatis、whoami、hwclock、ntpdate、touch、stat、、file、cat、tac、more、less、head、tail、mkdir、rmdir、cd、pwd、type、hash 

bash特性之命令别名和命令引用 

如果原命令和alias同名的话, 

方法: 

    通过命令的绝对路径来执行、 

    \\命令名来执行。 

alias ALIAS=COMMAND (别名=原命令) 

通过命令定义的alias只作用于当前shell环境下,在其他shell环境中不可用,即使用户名相同。 

即生效范围:当前会话,如果重新登录alias是不会生效的,一般情况下通过命令产生的效果都是临时的,如果需要重启有效,一般要求使用配置文件进行更改。 

unalias:撤销别名设置 

-a:撤销所有命令别名 

bash支持的引用: 

反引号:引用一个命令的执行结果。·· 

创建一个以时间来命名的文件: touch file-`date +%H-%M-%S`.txt 


$( ):同样可以达到反引号的效果,比如:touch file-$(date +%H-%M-%S).txt 

bash特性之文件通配符: 

   *:任意长度的任意字符 

           p*d  :pad paad pd pdsd 

?:匹配任意单个字符。 

[]:匹配指定范围内的任意字符。ls a[0-9]b 显示中间只包括数字的a b文件 

                                                 ls a[0-9a-z]b显示所以非数字及特殊字符的文件。 

[^]:表示指定范围的任意字符取反(不包括指定字符): ls a[^0-9a-z]b 

特殊表示法表示字符集合: 

[:space:]:表示所有空白字符(集合),包括空格 ,如果只表示一个空格,需要再加一个[]:[[:space:]] 

[:punct :]:表示所有的标点符号

[:lower:]:表示所有的小写字符 

[:upper:]:表示所有的大写字母 

[:digit:]:表示所有的数字 

[:alnum:]:表示所有的字符 

[:alpha:]:表示所有字母 

练习: 

    1、显示/var目录下所有已1开头,以一个小字母结尾,且中间出现一位数字的文件和目录 

              ll /var/l*[[:digit:]]*[[::lower]] 

     

    2、显示/etc/目录下,以任意一位数字开头,且以非数字结尾的目录和文件。 

              ll /etc/[[:digit:]]*[^[:digit:]] 

   

    3、显示/etc目录下,以非字母开头,后面跟一个字母及其他任意长度字符的文件及目录。 

               ls -d /etc/[^[:alpha:]][[:alpha:]]* 

     4、在/tmp/mylinux目录中创建一testdir大头后跟当前日期和时间的空目录。如:testdir-14-07-03--9-14-22 

                   mkdir /tmp/mylinux/testdir-$(date +%Y-%m-%d-%H-%M-%S ) 

echo 输出指定内容 

   -e:输出转义字符的含义 

文件管理命令: 

   cp :复制命令, 

   cp src dest , 

   如果目的文件不存在,则创建文件,如果目的文件存在则覆盖, 

   如果源不止一个文件,则目的必须是目录且必须存在。 

   如果源是目录则必须使用 -r 选项。 

练习: 

        复制/etc目录下,所有以p开头,以非数字结尾的文件和目录到/tmp/mytest目录中。 

                     mkdir /tmp/mytest{1,2,3} 

                      cp /etc/p*[^[:digit:]] /tmp/mytest1 

        复制/etc目录下,所有已.d结尾的文件或目录到/tmp/mytest2目录中。 

                       cp -r -f  /etc/*.d /tmp/mytest2 

        复制/etc/目录下,所有以l或m、n开头,以.config结尾的文件到/tmp/mytest3目录中。 

                       cp -r -f /etc/[l,m,n]*.config /tmp/mytest3 

  -P:复制符号链接文件本身,而不是其所指向的文件的内容。 

       通常情况下,默认cp在copy链接文件的时候会将链接文件做指向的被链接文件内容copy到链接文件里,并将结果copy到目的文件夹。 

  -p:相当于--preserve=mode,ownership,timestamps 

解释:小写-p是说在copy文件到目的的时候将原文件的文件属主,属组(ownership),时间戳(timestamps),权限(mode)一同copy过去,不进行替换,可以通过--preserve选项在单独选择需要保留的部分。 

比如:只copy文件的权限而其他属性可以更改。

          cp --preserve=mode /etc/init.d/sshd /tmp/ 

-a:相当于 -dR --preserve=all 常用于文件的归档(archive)。 

-i: 提供交互式询问。 

-f:强制执行,不进行交互操作。(force) 

     文本编辑器: 

                  nano 

                  wc:文本统计工具 

                          打印指定文件的的大小、行数、单词数,文件目录 

                       -l:仅显示行数。 

                      -w:仅显示单词数。 

                      -c:显示文件字节数。 

                  cut:剪出文件的指定行。 

                          delimiter(分割字符) -d 用于指定分隔符,如  cut -d : -f 1,4 /etc/passwd 

                          -f :指定要显示的字段。    m,n:第m和n列  m-n:m至n列 

                           

                  sort:文件内容排序 

                          -f:忽略大小写

                          -t:指定分隔符 

  -o:输出重定向到指定文件中。

                          -k:指定分割后进行排序比较的字段。 

                          -n:比较数值大小,排序按数值大小进行。 

                          -u:排序时去除重复行。 

[root@localhost ~]# more sorttest |sort -f -u -n -k 3 -t:

GONGBING:huzhou:1222

lijian:hunan:1233

zhangtian:tianjin:4223

liguang:nanjing:5122

gongbing:nihao:12141


                  uniq:所谓重复行是指连续的两个行内容相同,才能称为重复,间隔行内容相同不叫重复。 

                        -d:仅显示重复的行 

                        -u:仅显示不重复的行 

                        -c:仅显示行的重复次数。 

练习:  

          1、显示当前系统上每个用户的shell。 

                     cut -d ‘:’-f1,7 /etc/passwd 

          2、显示当前系统上所有用户使用的各种shell。 

                      cut -f7 /etc/passwd |sort |uniq  

          3、取出/etc/inittab文件的第七行。 

                      head -n 7 /etc/passwd | tail -n 1 

          4、取出/etc/password文件中第七个用户 的用户名 

                      head -n 7 /etc/passwd |tail -n 1 |cut -d ':' -f 1 

          5、统计/etc/目录下以大小写p开头的文件的个数。 

                      ls -d /etc/[pP]* |wc -l 

                      ls /etc |grep '^[p|P].*' |wc -l 

bash特性之输入、输出重定向和管道 

     程序: 

              数据来源:输入源 

              数据目标:输出源 

              标准输入:0(默认是键盘) 

              标准输出:1(默认是显示器) 

              错误输出:2(默认是显示器) 

输出重定向: 

           1、>覆盖输出到指定位置 

           2、>>追加输出到指定位置。 

           3、&>合并重定向 

           4、command >posttion 2> posttion 选择性重定向,可以将正确的和错误的分别进行重定向到不同文件中,默认重定向的文件内容为空。 

tr:字符串查找替换(删除),只可以通过重定向使用,不可以直接对文件操作。 

     删除时需要-d选项。 

     比如:tr ‘123’‘abc’

输入重定向: 

   1、<指定输入的文件夹来作为前面程序的数据输入源。 

用户及权限 

文件权限:默认并不开发执行权限。 

目录权限: 

              r:可以对目录执行ls命令、但不允许使用-l,并且不能使用cd进入到目录。 

              w:可以在目录中创建文件。 

              x:可以使用ls-l,且可以使用cd命令 

      管理员:0 

      系统用户是:1-499 

      普通用户:500+ 

权限:rwx 

 文件: 

           r:查看文件内容 

           w:修改文件内容 

           x:执行程序 

文件夹: 

          r:查看目录内容  

          w:可以在目录中创建和删除文件 

          x:可以用cd到此目录中,以及使用ls -l显示目录中的文件的元数据信息。 

用户访问文件时的权限匹配模型: 

       1、检查运行此程序的属主及其正在访问的文件的属主是否相同 

             如果相同,以属主权限访问。 

      否则: 

       2、检查运行此程序的属主是否属于属组, 

               =,以属组权限访问 

       否则 

       3、以其他用户的身份访问。 

用户管理: 

             用户账户信息:/etc/passwd 

             用户密码及设定:/etc/shadow 

             组账户信息:/etc/group 

             组的密码信息:/etc/gshaow 

/etc/passwd文件:whatis passwd 查看passwd命令的相关帮助文件分类。 

             account:password:uid:gid:gecos:directory:shell 

    

            用户可以加入多个组,password如果为星号表示密码在shadow文件中。 

            基本组:gid 

            额外组: 

            GECOS:注释信息 

            directory:家目录 

             shell:环境shell 

/etc/group文件: 

           groupname:password:gid:user-list 

             user_list:属于此组的用户账户之间用,分割。 

useradd:添加创建用户账户信息。 

              -u:设置uid号码 

              -g:设置用户的基本组     useradd -g 506 user5 

              -G:所属的附加组 

              -c:注释信息。 

              -d:指定家目录 的路径 

              -s:用来指定用户使用的shell版本,且shell必须是/etc/shells文件中存在的类型。 

     

               -r:创建系统用户(1-499)。 

groupadd:创建用户组 

               -g:创建组id 

                -r:创建系统组 

passwd:设置密码 

                 普通用户只能修改自己账户的密码 

             -l:锁定账户   passwd -l username,实际上就是在/etc/shadow的密码前加两个‘!!’ 

            -u:解锁账户

/etc/shadow文件格式说明: 

          用户名:密码:最后一次修改时间(相对时间(linux元年)):密码最小生存时间:密码最大生存时间:密码过期警告时间区间:密码非活动期限:账户过期期限:保留区域 

userdel:删除用户 

    -r:删除用户的同时删除家目录,此选项危险,谨慎使用。 

groupdel:删除组 

    如果改组内还有其他用户,则用户不会被删除,而组被删除后用户的组id还是以前用户组的id。 

usermod:修改用户账户信息。 

 -G:修改用户的附加组,默认情况下会将用户从一个组移动到另一个组,如果要求用户同时属于多个组使用 -a(append)追加选项。 

 -c:修改注释 

 -d:修改家目录,需要同时使用 -m选项才能保证创建,并将用户原有家目录的文件移动到新的位置。 

-l login_name:修改用户名,但是家目录的名称还是以原来的用户名命名。 

-L:锁定用户 

-U:解锁用户

chsh:修改用户的shell环境。 

chfn:修改用户的注释信息。 

chage:修改用户属性信息。例如密码时限, 

查看用户信息: 

 id username:查看用户信息,uid、gid、groupname 

       -Gn:显示用户所属组的名称,如果没有n是数字显示。 

  

finger:详细显示用户信息,包括登陆时间。 

who、whoami 

切换用户:su-switch user 

 -l:完全切换,l可以省略 

-c:‘command’,以指定用户来运行command命令,并显示结果。 

用户切换进入其他组: 

     1、进入用户环境 su - username 

     2、切换组:newgrp   newgroup  

     3、显示状态:id 

     4、退出:exit 

练习: 

       1、创建用户gongbing,其id为2200,基本组为distro,组id为3300,附加组为peguin 

                            groupadd -g 3300 distro 

                            useradd -u 2200 -g distro -G gentoo gongbing 

                     

       2、创建用户gentoo,其命名为:gentoo,默认shell为/bin/tcsh 

                        useradd -c gentoo -s /bin/tcsh gentoo 

       3、修改龚兵的uid为4400,基本组为linux,附加组为distro和gentoo 

                         usermod -u 4400 -g linux  -G distro,gentoo 

       4、给gentoo添加密码,并设定其密码最短使用期限为2天,最长为60天,警告为3天,非活动期限为7天。 

                          passwd -n 2 -x 60 -w 3 -i 7 gentoo 

                          passwd gentoo 

加密方法: 

     对称加密:加密解密使用同一个秘钥 

     公钥加密(非对称加密):加密解密使用一对秘钥,传输过程中能够保证数据的安全性,但是不能保证用户身份的正确。 

        公钥:公开的,用于加密 

        私钥:保密的,用于解密。 

 CA:证书颁发机构 

       用于验证用户身份,只有身份正确才能保证通讯的正确性,如果在与对方通讯过程中不能确定对方身份,即使加密安全也是没有 意义的。 

单向加密:提取数据的唯一特征码(md5、sha系列、)md5定长输出128位、sha1定长输出160位。 

     特征:长度固定、不可逆、蝴蝶效应(修改任意字符,整个加密变化) 

数字签名: 

        就是首先对数据进行单向加密(md5、sha算法),加密后产生一个特征码,此特征码可以保证数据的完整性,因为其特征码不可逆,不   能被修改,但是如果黑客将数据重新进行md5运算并生产一个特征码,最终用户并不会知道这个是不是真实有效的,因此需要对数据所有者的身份进行验证,验证的方法就是非对称加密,来对特征码进行私钥加密,对方收到后只能用加密者的公钥进行解密,来判断这个数据是由指定用户发送过来的,而非篡改的数据,最终既保证了数据的完整性也保证了用户身份的可验证,这个过程称为数字签名。  

默认情况下像/etc/shadow文件内的密码应该是:如果密码相同,加密结果应该也是相同的,但是为了保证安全,系统会为密码随机增加一个字符串,保证机密性。 

网络命令

1、ifconfig:查看、设置网卡及ip网络相关参数

        选项和参数:

                选项:up、down、mtu、netmask、broadcast

                        a、显示指定接口网络信息                            

                                        ifconfig eth0

                        b、暂时修改网卡ip地址及信息

                                        ifconfig eth0 192.168.100.1 netmask 255.255.255.0 mtu 8000

                        c、一个网卡设置多个ip地址

                                        ifconfig eth0:0 192.168.100.2 netmask 255.255.255.0 

                        d、关闭网卡

                                        ifconfig eth0 down

名词解释:

RX:网卡接收到的数据情况

       packets:包数量             

       errors:错误包的个数

       dropped:丢弃的包

TX:网卡发送的数据情况

collisions:数据包冲突情况

txqueuelen:数据传输的缓冲区大小


2、ifup、ifdown:关闭、开启网络接口

3、route:查看、配置路由表

基本格式:route add|del [-net|-host] [network|ipaddr] netmask [mask] [gw|dev]

选项:

         -n:使用ip显示路由表信息,速度快。

         --ee:显示详细信息。

实例:

a、显示路由表信息

route -n -ee

b、添加一条主机路由,指定寻找主机192.168.100.3从eth0接口出去

route add -host 192.168.100.1 netmask 255.255.255.0 gw 192.168.1.9

c、添加一条网络路由,指定去往192.168.100.0从eth0出去

route add -net 192.168.100.0 netmask 255.255.255.0 eth0

d、添加默认路由

route add default gw 192.168.1.9

GATEWAY:如果显示为0.0.0.0和*,表示直连路由,如果是具体的ip地址,表示需要路由器转发。

4、ip:综合强大的网络配置命令,整合了其他几个命令的功能。

nmap:network exploration tool and security

用来检测系统安全性

扫描类型:

-sT:扫描tcp数据包已建立的链接

-sS:扫描tcp数据包带有syn卷标的数据

-sU:以udp的数据包格式进行扫描

-sO:以ip的协议进行主机扫描

-sP(ping扫描):只对指定的地址范围进行扫描,并指出做出响应的主机,可以判断哪些主机是存活的。

BingGongtekiMacBook-Pro:~ binggong$ nmap -sP 10.40.0.0/24


Starting Nmap 7.12 ( https://nmap.org ) at 2016-10-12 09:48 CST

Nmap scan report for 10.40.0.1

Host is up (0.0010s latency).

Nmap scan report for 10.40.0.3

Host is up (0.0013s latency).


-sL(列表扫描):只进行反向域名解析工作。

BingGongtekiMacBook-Pro:~ binggong$ nmap -sL 8.8.8.8


Starting Nmap 7.12 ( https://nmap.org ) at 2016-10-12 09:49 CST

Nmap scan report for google-public-dns-a.google.com (8.8.8.8)

Nmap done: 1 IP address (0 hosts up) scanned in 0.01 seconds

参数:

-pT:使用tcp里头的ping扫描,可以获知目前计算机的个数。

-p:以端口进行扫描

-p0:高强度扫描,包括端口、版本、系统信息。

[root@37-test ~]# nmap -p0 10.40.0.199


Starting Nmap 5.51 ( http://nmap.org ) at 2016-10-12 09:55 CST

Nmap scan report for 10.40.0.199

Host is up (0.00030s latency).

PORT  STATE  SERVICE

0/tcp closed unknown

MAC Address: 90:B1:1C:3F:D5:41 (Unknown)


Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds


nmap识别的六种端口状态:

1、open

表明应用程序正在通过该端口接收tcp、udp的报文。

2、close

此端口并非真正意义上的关闭,nmap可以访问并能获取部分信息,只是应用程序没有在此端口上。

3、filtered

包过滤阻止了nmap发送报文到此端口,所以nmap无法确定该端口是否开放。

4、unfiltered

未被过滤的端口意味着端口可以访问,但nmap不能确定他是开放还是关闭。在ack扫描时会出现此状态。

5、open|filtered

6、closed|filtered

hosts:以主机的ip地址进行扫描。

-iL:从列表中输入,多个地址时用空格分开。

—exclude:指定排除扫描的地址范围,地址之间用逗号分隔

-O:启动操作系统检测

--osscan-guess:推测操作系统检测结果

--osscan-limit:针对指定的目标进行操作系统检测

实例:

1、扫描本机的tcp、udp端口

nmap -sTU localhost

2、扫描通过icmp局域网内有多少主机

nmap -sP 192.168.1.0/24

3、查看远程主机详细信息

nmap -O --osscan-guess 10.40.0.200

计划任务:

crontab

由crond进程调度执行,是按照指定时间定期完成某项工作或者任务。

任务调度分类:

   系统任务调度

           日志清理、缓存数据到磁盘,调度任务配置文件在/etc/crontab文件中。

[ root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
mailto:表示发送消息给指定用户,如果为空,表示不发送。
home:表示执行命令或者脚本时使用的主目录。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

5FF2BB6509D74D5EA2C507762BCFA7FC\"

   用户任务调度

         默认计划任务文件保存在/var/spool/cron目录下,其文件名和用户名相同。

安装crontab

      yum install crontabs

启动crontab服务

       /bin/service crond start 

5.使用实例

实例1:每1分钟执行一次command

命令:

* * * * * command

 

实例2:每小时的第3和第15分钟执行

命令:

3,15 * * * * command

 

实例3:在上午8点到11点的第3和第15分钟执行

命令:

3,15 8-11 * * * command

 

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

命令:

3,15 8-11 */2 * * command

 

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

命令:

3,15 8-11 * * 1 command

 

实例6:每晚的21:30重启smb 

命令:

30 21 * * * /etc/init.d/smb restart

 

实例7:每月1、10、22日的4 : 45重启smb 

命令:

45 4 1,10,22 * * /etc/init.d/smb restart

 

实例8:每周六、周日的1 : 10重启smb

命令:

10 1 * * 6,0 /etc/init.d/smb restart

 

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb 

命令:

0,30 18-23 * * * /etc/init.d/smb restart

 

实例10:每星期六的晚上11 : 00 pm重启smb 

命令:

0 23 * * 6 /etc/init.d/smb restart

 

实例11:每一小时重启smb 

命令:

* */1 * * * /etc/init.d/smb restart

 

实例12:晚上11点到早上7点之间,每隔一小时重启smb 

命令:

* 23-7/1 * * * /etc/init.d/smb restart

 

实例13:每月的4号与每周一到周三的11点重启smb 

命令:

0 11 4 * mon-wed /etc/init.d/smb restart

 

实例14:一月一号的4点重启smb 

命令:

0 4 1 jan * /etc/init.d/smb restart

实例15:每小时执行/etc/cron.hourly目录内的脚本

命令:

01   *   *   *   *     root run-parts /etc/cron.hourly

说明:

run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

四、使用注意事项

1. 注意环境变量问题

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

1)脚本中涉及文件路径时写全局路径;

2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2. 注意清理系统用户的邮件日志

每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。

例如,可以在crontab文件中设置如下形式,忽略日志输出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

3. 系统级任务调度与用户级任务调度

系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

4. 其他注意事项

新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\\%Y\\%m\\%d’。

at:一次性定时计划

在指定时间内执行一个特定任务,并且只执行一次,需要开启atd进程。

at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:

HH:MM

ex>at 04:00

在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。

HH:MM YYYY-MM-DD

ex>at 04:00 2009-03-17

强制规定在某年某月的某一天的特殊时刻进行该项任务

HH:MM[am|pm] [Month] [Date]

ex>at  04pm March 17

也是一样,强制在某年某月某日的某时刻进行该项任务

HH:MM[am|pm] + number [minutes|hours|days|weeks]

ex>at now + 5 minutes

ex>at 04pm + 3 days

就是说,在某个时间点再加几个时间后才进行该项任务。

使用实例:

实例1:三天后的下午 5 点锺执行 /bin/ls

命令:

at 5pm+3 days

输出:

[root@localhost ~]# at 5pm+3 days

at> /bin/ls

at> 

job 7 at 2013-01-08 17:00

[root@localhost ~]#

说明:

实例2:明天17点钟,输出时间到指定文件内

命令:

at 17:20 tomorrow

输出:

[root@localhost ~]# at 17:20 tomorrow

at> date >/root/2013.log         

at> 

job 8 at 2013-01-06 17:20

[root@localhost ~]#

说明:

实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务

命令:

atq

输出:

[root@localhost ~]# atq

8       2013-01-06 17:20 a root

7       2013-01-08 17:00 a root

[root@localhost ~]#

说明:

实例4:删除已经设置的任务

命令:

atrm 7

输出:

[root@localhost ~]# atq

8       2013-01-06 17:20 a root

7       2013-01-08 17:00 a root

[root@localhost ~]# atrm 7

[root@localhost ~]# atq

8       2013-01-06 17:20 a root

[root@localhost ~]#

说明:

实例5:显示已经设置的任务内容

命令:

at -c 8

输出:

[root@localhost ~]# at -c 8

#!/bin/sh

# atrun uid=0 gid=0

# mail     root 0

umask 22此处省略n个字符

date >/root/2013.log

[root@localhost ~]#


atd 的启动

命令:

/etc/init.d/atd start 

/etc/init.d/atd restart 

备注:配置一下启动时就启动这个服务,免得每次重新启动都得再来一次

命令:

chkconfig atd on

输出:

[root@localhost /]# chkconfig atd on

[root@localhost /]#

5.2 at 的运行方式

既然是计划任务,那么应该会有任务执行的方式,并且将这些任务排进行程表中。那么产生计划任务的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的计划任务,并将这个计划任务以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。

不过,并不是所有的人都可以进行 at 计划任务。为什么? 因为系统安全的原因。很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序, 这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。 所以,除非是你认可的帐号,否则先不要让他们使用 at 命令。那怎么达到使用 at 的可控呢?

我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后, at 的工作情况是这样的:

先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 命令了。

如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。

透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

后台执行命令:&
主要作用是为用户提供用户界面来做其他的事情,因为默认情况下在一条命令未完成之前是会占用用户界面的,所以有了后台执行命令的方法,将长期占用界面的命令放到后台去执行,可以使用命令后面加&的方式。

比如: ls &

后台命令不挂起:nohup

默认情况下后台命令在当前用户退出系统后,会停止或者挂起,所有为了让用户在执行命令并退出系统后,后台命令仍可以执行,就可以采用nohup命令,保证用户退出后继续执行后台命令。

查看后台进程情况jobs


find命令

强大的文件查找命令,可以通过文件名、文件的权限、文件路径、属组、属主、文件类型等相关属性来查找制定的文件。

基本格式:find [path ] -options -prints -exec|-ok {} \\;

! optins :表示排除选项类型的查询。

-mount:忽略远程挂载的文件

-o:将不同参数链接起来and


options常用的有下选项: 
      -name:按照名字查找 
      -perm:安装权限查找 

                    -007:其中的-表示包含007属性的文件当然也包括047了。简言之就是 匹配结果最小为-后面的权限。

                    +007:匹配其中权限中的任意一个即可。

                    

        find -perm mode , 表示严格匹配,也就是你的文件权限位转换成对应的十进制数字与mode一模一样,那么匹配成功,需要注意的是如果mode给的数字不足3位,那么前面自动添0(严格的说是不足4位,原因就是前面所说的setuid,setgid,稍后解释)

        find -perm -mode , 表示mode中转换成二进制的1在文件权限位里面必须匹配,比如mode=644那么转换成二进制为110 100 100,而被查找的文件的权限位也可以被转换成一个二进制数,两者在位上为1的部分必须完全匹配,而0则不管。例如被查找的文件的权限为转换成二进制数是111 111 111那么这个比如被匹配,而假如是100 100 100那么则不会匹配。所以这个'-'的作用归结起来就是匹配比mode权限更充足的文件(找不到什么词语来形容了)

         ind -perm +mode , 与 -mode的区别是+mode只需其中的任意一个1的部分被匹配,-mode是所有1的部分都必须被匹配,同样+mode也不管0位


      -prune:不再当前指定的目录下查找 
      -user:文件属主来查找 
      -group:文件所属组来查找 
      -nogroup:查找无有效所属组的文件 
      -nouser:查找无有效属主的文件 
      -type:按照文件类型查找 

        -m(a)time:以修改(访问)时间为查询依据

                  n:第几天修改的内容

                 +n:第n天前的修改搜索

                 -n:第n天内的搜索修改


1、按名字查找 
      在当前目录及子目录中,查找大写字母开头的txt文件 
       $ find . -name '[A-Z]*.txt' -print   

      在/etc及其子目录中,查找host开头的文件 
      $ find /etc -name 'host*' -print   

      在$HOME目录及其子目录中,查找所有文件   
      $ find ~ -name '*' -print 

      在当前目录及子目录中,查找不是out开头的txt文件   
      $ find . -name "out*" -prune -o -name "*.txt" -print 

2、按目录查找   

      在当前目录除aa之外的子目录内搜索 txt文件   
      $ find . -path "./aa" -prune -o -name "*.txt" -print   

      在当前目录及除aa和bb之外的子目录中查找txt文件   
      $ find . \\( -path "./aa" -o -path "./bb" \\) -prune -o -name "*.txt" -print   

      在当前目录,不再子目录中,查找txt文件 
      $ find . ! -name "." -type d -prune -o -type f -name "*.txt" -print 

3、按权限查找   
      
      在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件   
      $ find . -perm 755 -print 

4、按类型查找   

      在当前目录及子目录下,查找符号链接文件   
      $ find . -type l -print 

5、按属主及属组   

      查找属主是www的文件   
      $ find / -user www -type f -print   

      查找属主被删除的文件 
      $ find / -nouser -type f -print   

      查找属组mysql的文件 
      $ find / -group mysql -type f -print   

      查找用户组被删掉的文件 
      $ find / -nogroup -type f -print 

6、按时间查找   

      查找2天内被更改过的文件 
       $ find . -mtime -2 -type f -print   

      查找2天前被更改过的文件 
      $ find . -mtime +2 -type f -print   

      查找一天内被访问的文件 
      $ find . -atime -1 -type f -print   

      查找一天前被访问的文件 
      $ find . -atime +1 -type f -print   

      查找一天内状态被改变的文件 
      $ find . -ctime -1 -type f -print   

      查找一天前状态被改变的文件 
      $ find . -ctime +1 -type f -print   

      查找10分钟以前状态被改变的文件 
      $ find . -cmin +10 -type f -print 

7、按文件新旧   
      
      查找比aa.txt新的文件 
      $ find . -newer "aa.txt" -type f -print   

      查找比aa.txt旧的文件 
      $ find . ! -newer "aa.txt" -type f -print   

      查找比aa.txt新,比bb.txt旧的文件 
      $ find . -newer 'aa.txt' ! -newer 'bb.txt' -type f -print 

8、按大小查找   

      查找超过1M的文件 
      $ find / -size +1M -type f -print   

      查找等于6字节的文件 
      $ find . -size 6c -print   

      查找小于32k的文件 
      $ find . -size -32k -print 

9、执行命令   
      
      查找del.txt并删除,删除前提示确认 
      $ find . -name 'del.txt' -ok rm {} \\;   

      查找aa.txt 并备份为aa.txt.bak 
      $ find . -name 'aa.txt' -exec cp {} {}.bak \\;



本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1895561,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值