LInux学习(一)

文章目录

Linux 系统识别

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

一、四种基本文件系统

linux有四种基本文件系统类型:
–普通文件:如文本文件、c语言源代码、shell脚本等,可以用cat、less、more、vi等来察看内容,用mv来改名;
–目录文件:包括文件名、子目录名及其指针,可以用ls列出目录文件;
–链接文件:是指向一索引节点的那些目录条目,用ls来查看时,链接文件的标志用l开头,而文件后以"->"指向所链接的文件;
–特殊文件:如磁盘、终端、打印机等都在文件系统中表示出来,常放在/dev目录内;
可以用file命令来识别。
在这里插入图片描述

1.1、文件路径

linux系统中,所有的文件与目录都是由根目录**/**开始,不是以/开头的就是相对路径;
.:表示当前目录,也可以用./表示;
…:表示上一级目录,也可以用…/表示;
~:代表用户自己的宿主目录;

/ :根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。

/bin:系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。

/boot:这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等等。

/dev 在Linux系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。

/etc 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有root有权力修改。

/home 这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时, 默认的用户家目录都会规范到这里来。

/lib:系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库, 以及在/bin或/sbin底下的指令会呼叫的函式库而已。 什么是函式库呢?妳可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程序的执行之意。

/media:media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。

/mnt:如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。 在古早时候,这个目录的用途与/media相同啦!只是有了/media之后,这个目录就用来暂时挂载用了。

/opt 这个是给第三方协力软件放置的目录。

/root 系统管理员(root)的家目录。

/sbin:Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他用户最多只能用来『查询』而已。 放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序。

/srv srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。

/tmp 这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。
/lost+found 这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。

/proc 这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。

/sys 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。

1.2、四种交互作用的形态

可分享的(shareable)不可分享的(unshareable)
不变的(static)/usr (软件放置处)/etc (配置文件)
/opt (第三方协力软件)/boot (开机与核心档)
可变动的(variable)/var/mail (使用者邮件信箱)/var/run (程序相关)
/var/spool/news (新闻组)/var/lock (程序相关)

上表中的目录就是一些代表性的目录,该目录底下所放置的数据在底下会谈到,这里先略过不谈。 我们要了解的是,什么是那四个类型?
可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

二、目录详解

2.1、/

处于Linux文件系统树形结构的最顶端,我们称它为Linux文件系统的root,它是Linux文件系统的入口。所有的目录、文件、设备都在/之下,它是Linux文件系统最顶层的唯一的目录;
        一般建议在根目录下面只有目录,不要直接存放文件;根目录是linux系统启动时系统第一个载入的分区,所以启动过程中用到的文件应该都放在这个分区中,其中/etc、/bin、/dev、/lib、/sbin这5个子目录都应该要与根目录连在一起,不可独立成为某个分区;
/bin:存放所有用户都可以使用的linux基本操作命令;(目录中多是可执行的二进制文件)
/dev:设备文件目录,虚拟文件系统,主要存放所有系统中device的相关信息,不论是使用的或未使用的设备,只要有可能使用到,就会在/dev中建立一个相对应的设备文件;设备文件分为2种类型:        字符设备文件和块设备文件(目录中基本上都是设备文件,如硬盘设备文件/dev/sda)
        /dev/console:系统控制台,也就是直接和系统连接的监视器;
        /dev/hd:IDE设备文件;
        /dev/sd:sata、usb、scsi等设备文件;
        /dev/fd:软驱设备文件;
        /dev/tty:虚拟控制台设备文件;
        /dev/pty:提供远程虚拟控制台设备文件;
        /dev/null:所谓"黑洞",所有写入该设备的信息都将消失,如当想要将屏幕上的输出信息隐藏起来时,只要将输出信息输入到/dev/null中即可;

2.3、/home

默认存放用户的宿主目录(除了root用户)
        /home/~/.bashrc:提供bash环境中所需使用的别名;
        /home/~/.bash_profile:提供bash环境所需的变量;一般先执行.bashrc后,才会再执行.bash_profile;
        /home/~/.bash_history:用户历史命令文件,记录用户曾经输入过的所有命令;(默认为1000条,可以通过HISTSIZE变量更改)
        /home/~/.bash_logout:当用户注销的同时,系统会自动执行.bash_logout文件,如果管理员需要记录用户注销的一些额外记录、动作或其他信息,就可以利用这个机制去完成;

2.4、/lost+found

当系统在运行时,有时会无法避免宕机、断电或不正常重启动,在这样的情况下,当系统重新启动时,发现某些文件写入未完成或其他问题产生,一般会使用fsck进行文件修复,而这些被修复或救回的文件,就会被放在这个目录下,只要是一个文件系统,系统就会自动在该文件系统所在的目录下建立"lost+found"目录。

2.5、/misc

自动挂载服务目录,对应autofs服务;

2.6、/proc

虚拟文件系统,此目录是kernel加载后,在内存里面建立的一个虚拟目录,有专属的文件系统,主要提供系统一些实时的信息,此目录下不能建立和删除文件;(某些文件可以修改)
        /proc主要作用可以整理为:
        --整理系统内部的信息;
        --存放主机硬件信息;
        --调整系统执行时的参数;
        --检查及修改网络和主机的参数;
        --检查及调整系统的内存和性能;
        /proc下常用的信息文件有:
        /proc/cpuinfo:cpu的硬件信息,如类型、厂家、型号和性能等
        /proc/devices:记录所有在/dev目录中相关的设备文件分类方式
        /proc/filesystems:当前运行内核所配置的文件系统
        /proc/interrupts:可以查看每一个IRQ的编号对应到哪一个硬件设备
        /proc/loadavg:系统"平均负载",3个数据指出系统当前的工作负载
        /proc/dma:当前正在使用的DMA通道 
        /proc/ioports:将目前系统上所有可看到的硬件对应到内存位置的分配表的详细信息呈现出来
        /proc/kcore:系统上可以检测到的物理内存,主机内存多大,这个文件就有多大
        /proc/kmsg:在系统尚未进入操作系统阶段,把加载kernel和initrd的信息先记录到该文件中,后续会将日志信息写入/var/log/message文件中
        /proc/meminfo:记录系统的内存信息
        /proc/modules:与lsmod命令查看到的模块信息完全一致
        /proc/mtrr:负责内存配置的机制
        /proc/iomem:主要用于储存配置后所有内存储存的明细信息
        /proc/partitions:这个文件可以实时呈现系统目前看到的分区
        /proc/数字目录:数字目录很多,它们代表所有目前正在系统中运行的所有程序
        /proc/bus:有关该主机上现有总线的所有信息,如输入设备、PCI接口、PCMCIA扩展卡及USB接口信息
        /proc/net目录:存放的都是一些网络相关的虚拟配置文件,都是ASCII文件,可以查看(与ifconfig、arp、netstat等有关)
        /proc/scsi:保存系统上所有的scsi设备信息(包括sata和usb设备的信息)
        /proc/sys目录:存放系统核心所使用的一些变量,根据不同性质的文件而存放在不同的子目录中,可以通过/etc/sysctl.conf文件设置和更改其默认值;变量时实时的变更,有很多设置很象是开关,设置后马上生效;
        /proc/tty:存放有关目前可用的正在使用的tty设备的信息
        /proc/self:存放到查看/proc的程序的进程目录的符号连接,当2个进程查看proc时,这将会是不同的连接;主要便于程序得到它自己的进程目录;
        /proc/stat:系统的不同状态信息;
        /proc/uptime:系统启动的时间长度;
        /proc/version:系统核心版本;

2.7、/sbin

系统管理相关的二进制文件存放在这个目录下,一些可执行文件普通用户只具备较小的权限;(多数管理命令默认只有管理员可以使用)
/srv:默认为空,主要用于存放一些软件的配置文件,某些软件可能会把配置文件默认存放在这个目录下,多数都是/etc目录下,此目录没有被具体的定义;
/tftpboot:远程启动tftpserver的根目录,这个目录只有安装了tftp-server软件后才会产生;

2.8、/usr

安装除操作系统本身外的一些应用程序或组件,一般可以认为linux系统上安装的应用程序默认都安装在此目录中;
        /usr/bin:一般用户有机会使用到的程序,或者该软件默认就是要让所有用户使用才会放在该目录中;
        /usr/sbin:一些系统有可能会用到的系统命令,与/sbin比起来,都是一些较次要的文件;
        /usr/etc:自行安装或非系统主要的配置文件目录;
        /usr/games:只要是电脑游戏相关的软件,就都安装到这个目录;
        /usr/include:存放的文件都是一些系统中用户所会使用到的C语言header文件,保存的都是".h"的文件;
        /usr/kerberos:kerberos是一种安全机制,让用户可以直接使用支持kerberos机制系统上的部分资源;
        /usr/lib:存放一些函数库、执行文件及连接文件,特别的是,存放在这里面的文件都是不希望直接被用户或shell脚本所使用的文件,在/usr/lib中有非常多的子目录,每一个软件都有其各自所需的函数库;
        /usr/libexec:这个目录下的文件及文件夹应该都可以放置在/usr/lib下;
        /usr/local:linux系统中安装的共享软件程序最好的方式是安装在/usr/local下,按照linux标准目录结构,新建立的软件都应该放在/usr/local下;
                /usr/local/bin:存放软件执行文件的目录;
                /usr/local/sbin:同样存放软件执行文件的目录,但此目录专门针对系统所使用的文件;
                /usr/local/lib:软件相关的函数库;
                /usr/local/share:当文件性质不好归属时就会放在此,man手册就放在这个目录下;
                /usr/local/src:所安装软件的源代码放置在此;
        /usr/share:此目录都是一些共享信息,最常被用到的就是/usr/share/man这个目录,/usr/share里的信息时跨平台的;
        /usr/share/doc:放置一些系统帮助文件的地方;
        /usr/share/man:manpage的文件存放目录,也是使用man查看手册页时查询的路径;
        /usr/src:主要储存内核源代码的文件;
        /usr/X11R6:存放一些X windows系统的相关文件;

2.9、/boot

存放开机启动加载程序的核心文件;(如kernel和grup)
        config-2.6.18-164.el5:系统kernel的配置文件,内核编译完成后保存的就是这个配置文件;
        lost+found:说明/boot是一个独立的ext3文件系统;
        vmlinuz-2.6.18-164.el5:系统使用kernel,非常重要;
        grub:多系统启动管理程序grub的目录,里面存放的都是grub在启动时所需要的画面、配置及各阶段的配置文件;其中grub.conf是grub的配置文件;
        symvers-2.6.18-164.el5.gz
        initrd-2.6.18-164.el5.img:此文件是linux系统启动时的模块供应主要来源,initrd的目的就是在kernel加载系统识别cpu和内存等核心信息之后,让系统进一步知道还有那些硬件是启动所必须使用的;
        System.map-2.6.18-164.el5:是系统kernel中的变量对应表;(也可以理解为是索引文件)        

2.10、/etc

主机、系统或网络配置文件存放目录;
        简单的将/etc目录分为以下几类:
        --基本文件:所有直接放在/etc目录下的文件归类为基本文件;
                aliases:用于设置邮件别名;
                auto.*:代表的是一系列autofs服务所需要的配置文件,这个服务主要是让管理员可以事先定义出一些网络、本机或光驱等默认的路径;
                auto.master:负责规划目录的分配与使用,目前默认提供三种自动挂载模式;
                auto.misc:文件中的配置都以实体连接本机的磁盘驱动器为主;
                auto.net:并不是一个配置文件,而是一个脚本文件,在使用上其实不须做任何调整;;
                auto.smb:与auto.net一样,都是以个脚本文件;
                bashrc:用户登录功能配置,全局配置,对所有用户生效,主要配置别名;
                profile:与系统环境配置或初始化软件的相关配置,全局配置,对所有用户生效,主要配置变量;
                DIR_COLORS:用于配置ls命令的颜色,主要针对tty登录的用户;
                DIR_COLORS.xterm:用于配置ls命令的颜色,主要针对xterm登录的用户;
                fstab:系统启动时自动挂载文件系统的配置文件;
                inittab:启动时系统所需要的第一个配置文件;也即是init进程的配置文件;
                issue:用户本机登录时,看到的欢迎信息;
                issue.net:用户网络登录时,看到的欢迎信息;
                ld.so.conf:包含ld.so.conf.d/*.conf配置;主要是ld.so.conf.d/*.conf目录的作用;
                localtime:系统所使用的时区对应的配置文件;对应的时区文件都存在于/usr/share/zoneinfo/
                motd:登录成功的用户显示的信息对应的配置文件;
                mtab:可以当做是检查当前文件系统挂载情况的配置文件;与mount命令结果一致;
                prelink.conf:定义哪些执行文件和函数库是需要预先连接的;
                securetty:主要是login程序在使用的,只要是列在该文件中的接口,就表示是可以使用的接口,相反,若从列表中删除,则无法使用该接口;
                shells:记录目前系统所拥有shell种类的路径,通过cssh命令使用;
                sudoers:sudo命令对应的配置文件,用于配置权限的分配方式;
                sysctl.conf:主要是帮助用户配置/proc/sys目录下所有文件的值,与sysctl命令对应;
                syslogd.conf:是syslogd服务的配置文件
                host.conf:主机名解析配置文件,主要说明解析的方式及顺序;
                hosts:主机名解析配置文件,主要列出所有需要本地解析的主机名与IP地址的对应关系;
                hosts.allow和hosts.deny:linux网络安全机制TCP Wrapper对应的配置文件;
                nsswitch.conf:主要记录系统应如何查询主机名、密码、用户组、网络等,或是查询顺序的编排;
                resolv.conf:记录DNS服务器地址,用于DNS域名解析;
                services:定义了网络服务的默认端口号;
                xinetd.conf:xinetd的主配置文件,目的是为xinetd.d下的所有子服务建立一个标准的规范使其可以遵循;
                anacrontab:属于一种任务计划软件的配置文件,anacrontab软件和crond其实有点相辅相成,crond负责任务计划,而anacrontab则是负责以"间隔多久"为主要的目标;
                at.deny:该文件属于拒绝列表,只要被记录在其中的用户,就无法使用at所提供的任务计划服务;
                at.allow:与at.deny刚好相反;
                crontab:crontab的主配置文件,crond默认会执行的文件可以参考此配置文件;
                cron.deny:该文件属于拒绝列表,只要被记录在其中的用户,就无法使用crond所提供的任务计划服务;
                cron.allow:与cron.deny刚好相反;
                exports:是NFS服务的主配置文件,主要目的就是将本机的目录共享到网络上,供其他人使用;
                group与gshadow:用户组配置文件,group主要保存用户组信息,gshadow主要保存群组密码;
                login.defs:设置系统在建立账号时所参考的配置;
                passwd:主要保存系统用户账号的信息;
                shadow:linux系统通常包经过"hash"处理后的密码存储在这个文件中;
                protocols:通信协议对应端口号的一个对照表,包含协议名称、协议号码、注释等;
                wgetrc:wget程序对应的配置文件,其中有quota、mail header、重传文件的预设次数、firewall和proxy等相关设置;
                init.d:RHEL中所有服务的默认启动脚本都存放在这里;这个是链接文件,链接到/etc/rc.d/init.d;
                csh.cshrc和csh.login: 用户启动c shells执行的初始化配置文件;
                printcap:linux系统中打印机设备对应的配置文件;
        --服务器目录:如samba、http、vsftpd等服务器配置相关目录;
                cups:linux下的打印机服务器,目录下存放的是打印机服务的配置文件;
                dnsmasq.d:dnsmasq是一种DNS的"轻薄机种",转为区域或小型网络所设计,拥有比一般DNS更为方便简易的配置;
                httpd:apache网页服务器的配置文件所在目录;
                mail:Mail Server组件的主要配置目录,如sendmail;
                ntp:网络时间服务器的配置目录,其主要配置文件为/etc/ntp.conf;
                openldap:目录明显是LDAP的配置目录,软件名称为OpenLDAP;
                postfix:postfix组件所提供的主要配置文件目录;
                samba:文件共享服务samba的主要配置文件目录;
                smrsh:这是sendmail为了限制用户可使用的命令设计的程序,将原本用户所使用的/bin/sh替换为/usr/sbin/smrsh;
                snmp:简单网络管理软件的配置文件目录,存在snmpd.conf主配置文件;
                squid:这是linux下的代理服务器squid的配置文件目录,主配置文件是squid.conf;
                ssh:SSH服务的主要配置目录,主配置文件是sshd_config;
                vsftpd:vsftpd服务器的主要配置目录,主配置文件是vsftpd.conf;
                xinetd.d:xinetd是一个管理多个服务的daemon,这个目录下列出的服务都是由xinetd进程管理的,其主配置文件是/etc/xinetd.conf;
        --系统目录:如sysconfig、xen或网络配置等与系统运行相关的目录;
                blkid:此目录所存放的其实是一个块设备ID的临时文件,主要是记录系统中所有区块设备的标签名称、硬件的唯一识别码、文件系统的格式等基本信息;
                bluetooth:linux下使用蓝牙设备所需的配置文件;启动蓝牙检测的主要服务仍是/etc/rc.d/init.d/bluetooth,该程序使用的是hcid.conf配置文件;
                cron.X:cron.X的目录都是给cron软件存放其需要任务计划的文件所使用的,按任务计划时间的长短及配置特性分为cron.d、cron.daily、cron.hourly、cron.monthly、cron.weekly五个主要目录;
                dbus-1:D-BUS的主要配置目录,D-BUS也是一种IPC交流的方式;
                default:这里是存放一些系统软件默认值的目录,存放某些软件执行时的基本参数;
                firmware:这个目录所存放的东西是非常底层的信息,是CPU所需的microcode的实体文件;
                foomatic:与打印机相关的配置目录,实现打印一对多的方式,在foomatic中,可以记录多条打印机数据,让用户只在使用前先行配置所有需要使用的打印机即可;
                hal:全名Hardware Abstraction Layer,是linux一种管理硬件的机制,它会帮所有的应用程序或用户搜集所有PCI及USB等硬件信息,因此,用户可以很简单并实时地通过HAL的方式取得硬件的相关数据;
                isdn:ISDN服务的主要配置目录,里面包含可拨号的用户、电话、联机方式等;
                ld.so.conf.d:这个目录是ldconfig所使用的,更准确的说,它是由/etc/ld.so.conf文件所决定的;ldconfig命令的目的在于将系统中的一些函数库预先存放到内存中,让系统使用时可以比以往通过硬盘的读取速度来的更快,这样可以大幅提高系统性能,尤其当要重复读取时更明显;ldconfig要将哪些函数库丢到内存中,则须看/etc/ld.so.conf文件中所记录的信息;
                logrotate.d:此目录对系统管理员来说,是十分重要的一个目录,因为目录中的文件,记录了如何定期备份系统所需要备份的系统或软件日志文件及备份方式,目录是由logrotate组件所提供的,而里面所有文件是由各软件各自产生的;其主要配置文件是/etc/logrotate.conf;                
                logwatch:logrotate主要是实现如何备份日志文件,这个目录就是记载如何分析日志文件并告诉用户的软件logwatch的配置目录;
                lsb-release.d:LSB是一个由很多人所执行的项目,其目的是将所有的Linux发行版定义为一些共同的标准;
                lvm:这个目录是LVM的基本配置文件,但配置或操作一般都只需要通过LVM提供的命令,而不会用到这个目录,除非要使用到很高级的配置才会更改此文件;
                makedev.d:MAKEDEV软件对应的配置文件目录,MAKEDEV主要用来产生设备文件,也就是说,在/dev目录下的文件都由这个命令产生的,此目录下的文件主要是针对设备文件的定义或属性,目录中存在的设备文件可以由MAKEDEV来创建,否则需要使用mknod命令了;
                modprobe.d:是modprobe命令的住配置目录,一般系统启动默认要加载的模块放在/etc/modprobe.conf中;
                netplug和netplug.d:这两个目录和网络接口的联机与否由直接关系,因为主要是控制联机时的接口操作;
                opt:此目录原本是定义为存放所有额外安装软件的主机配置文件,但目前并没有被使用到,此目录为空;
                pcmcia:这是PCMCIA的配置文件目录,PCMCIA是笔记本电脑不可或缺的接口,需要即插即用的方式,此接口使用较少;
                pm:由pm-utils组件所提供的目录,pm-utils是一套电源管理的工具软件,其中/usr/lib/pm-utils也是主要目录之一;
                ppp:ppp相关的配置文件都放在这个目录中;
                profile.d:这个目录存放的是系统部分的软件配置,但会按不同的shell执行不同的文件,默认所使用的bash会直接执行该目录下所有扩展名为.sh的文件;
                rc.d:主要用来定义在每一个执行阶段必须要执行哪些系统服务或程序,在目录中主要分为三个重要的部分:
                        --rc.sysinit:系统一开始启动时所遇到的第一个文件,此脚本文件记录服务启动之前所需准备的所有事情,包括启动时看到的欢迎画面;
                        --rcX.d:在rc.sysinit文件之后所要执行的,X是系统启动时的initdefault值,值为几则会转到那个目录下,并执行其中的所有文件,在此目录中,文件一律都由两个英文字母开始K和S,K代表kill,S代表Start;
                        --rc.local:系统初始化过程中最后一个执行的脚本文件,可以将需要开机启动的程序或脚本放置在这个脚本文件中,以实现自动运行的目的;
                readahead.d:是readahead程序的主要配置目录,为了加速操作系统的使用速度,readahead_early和readahead_later这两个进程在系统加载时,直接将日常所需要的一些文件,全部先放到硬盘的高速缓存中;
                redhat-lsb:都lsb-release.d目录都是由程序redhat-lsb所提供的;
                rwtab.d:这个目录是一个在启动时会去参考的目录,主要的文件在/etc/rwtab;这是一个系统初期的备份机制;
                sane.d:这是在系统下要使用扫描仪所需的配置目录,主要配置文件是sane.conf,sane为了方便用户在各式的扫描仪连接时都可以使用,因此,在这一目录中放置了很多种不同类型扫描仪的硬件信息,让系统在检测到扫描仪时可以直接使用;
                setuptool.d:这个目录是"setup"系统配置工具的主要配置目录;
                skel:用于初始化用户宿主目录的配置目录,当建立一个用户时,会把此目录下的所有文件复制一份到用户的宿主目录,作为用户的初始化配置;
                sysconfig:非常重要的系统配置文件的存放目录,里面放置了大量系统启动及运行相关的配置文件;
                sysconfig/network-scripts/ifcfg-eth0:网卡eth0对应的配置文件,设置内容包括设备名称、IP地址、广播地址、网关地址、网段、开机是否激活等参数
                udev:udev程序本身是一套设备的管理机制,udev通过sysfs的文件系统,可以正确地掌握目前系统上存在的硬件设备,以及针对每一个硬件设备做出不同的判断与执行;
                yum和yum.repos.d:这两个都是yum的配置目录,是一套在linux下可以自动帮助用户安装、更新、移除等的管理组件,可用来替代rpm包管理方式,主配置文件是/etc/yum.conf;yum是更新方式及外挂程序的配置目录,yum.repos.d是存放定期更新组件内容的信息;
        --安全性目录:如selinux或pam.d等管理系统安全性的目录;
                audit:这个目录所代表的是一种和目录名称一致的audit安全机制,主要以服务的方式协助管理员持续监控各文件被存取的情况;目录下的audit.rules文件主要是定义一些必要的监控规则;
                pam.d:此目录是Linux-PAM的所有配置文件,配合/lib/security目录中所有觉得函数库,提供Linux下的应用程序认证的机制;
                pam_pkcs11:PAM机制中的一种登录模块,可以让用户通过smart card做登录的操作;
                pki:PKI是一种公开密钥的管理方式,通过这样的管理模式,可以让所有网络传输有更多保障;
                racoon:这个目录是由ipsec-tools组件所提供的,ipsec的主要目的是让系统实现VPN的网路技术,在racoon目录的主配置文件racoon.conf中,定义在ipsec操作中所需要的加密算法种类以及其他细节的配置;
                security:与pam.d目录相辅相成,pam.d中的所有PAM的规则都要用到/lib/security下的PAM函数库,而/etc/security目录中,就是针对这些函数库,提供以配置文件的方式进行细节配置,对希望调整系统安全性部分增加了非常大的方便性;
                selinux:selinux是一个很新的安全性方案,它是一种针对各种文件、目录、设备或daemon等在linux所需使用到的安全性机制,而且其安全性的数据时直接记录在文件系统中;
                wpa_supplicant:这个目录被归类到安全性目录中,是因为其属于无线中安全认证的部分,存在wpa_supplicant.conf配置文件,用户可以在这个目录中加入已知可登陆的AP;
        --X Windows目录:如X11或gdm管理X windows启动或使用上的配置目录;
                alternatives:linux下可辨识扩展名的"文件类型"选项,可以针对同一类型的文件,选出一个默认用户所要使用的程序去执行;/etc/alternatives目录下有所有目前已经定义的程序名称,都以软链接的方式存在,里面每一个文件其实都有定义好的默认执行程序,可以使用alternatives命令查看及修改配置;
                fonts:这个目录就是fontconfig软件的最主要配置目录,其中/etc/fonts/fonts.conf就是对应的配置文件,/etc/fonts目录下的配置都是以XML的方式配置的;
                gconf:这一目录是GConf2的组件所建立的,GConf的作用就是提供GNOME下的应用程序注册的机制,有些类似于windows下的regedit;
                gdm:全名为GNOME Display Manger,也就是协助X Windows启动的管理软件,在GDM中的主配置文件是custom.conf,在X windows下可以利用gdmsetup命令对这个文件进行配置;
                gnome-vfs-2.0:GNOME VFS机制,让GNOME的系统可以知道每一种文件格式要如何开启或浏览,而所有的配置都需要有相对应的函数库;
                gtk-2.0:由gtk+组件提供的目录,主要是提供X Windows窗口的颜色、按钮或图案,包含软件选项的画面、选项的按钮、滚动轴的样式等;
                kde:KDE Desktop Manager的主要配置目录;主配置文件是kdmrc;
                NetworkManager:此目录的目的是让用户不需要做任何操作和配置,只要用户曾经登陆过无线AP,系统就可以记录下来,以后再次登陆时就可以方便的登陆;
                pango:pango是一套协助GTK+将字体描绘出来的函数库,不论任何的字体或语言,都可以通过pango描绘出来;
                rhgb:系统在进入X Windows之前,有一个前置配置的图形接口,这个接口就是rhgb,其主要目的是让系统启动变得漂亮;
                scim:是Linux下目前很好用的输入法;
                sound:GNOME下有许多的应用软件,很多都会有其特殊的声音,这个目录中存放所有声音的命令路径;
                X11:X windows的核心配置目录;该目录下比较重要的文件有prefdm(判断X windows使用哪一个Display Manager)、主配置文件xorg.conf(定了X windows所需使用的键盘、鼠标、显卡等相关硬件设备,重点是关于显卡的配置)、xinit子目录(里面都是一些X windows资源相关的配置)
                xdg:X windows上的菜单画面,就是从这里出来的,所有在X windows中使用的菜单文字及分类,都可以在这个目录下做配置,其下的子目录menu,可以通过配置里面的文件自定义应用程序、系统管理、外观等菜单内容                        
        --其他目录:针对单一特殊软件的配置或未能按以上分类方式则放在此目录中;
                a2ps.cfg和a2ps-site.cfg:用于将一份文件格式转换为postscript的格式,在某些打印机或要将文件输出成一份标准格式的文件时,它会被用到;
                alsa:主要任务在于提供linux声音及声音的功能,并试着让其性能达到最佳化;
                ghostscript:在linux下要读取Adobe格式文件(如pdf),最方便的方式就是使用ghostscript命令,这个目录主要用于设置在显示时使用哪种字体作为默认字体;
                gre.d:GRE是Mozilla注册的一种机制,目录中的配置文件gre.conf会注明所使用的Mozilla软件的路径和版本;
                iproute2:iproute2是一套非常强大的网络管理软件,iproute2提供的功能有很多种,此目录中存放一些网络的基本配置值;
                java:这个目录是由jpackage-utils软件提供的,这个目录是这个软件的主要配置目录,除此之外还有maven、jvm、jvm-common都是由jpackage-utils软件产生的,jpackage是一个专门为了提供java程序与函数库所存在的软件;
                mgetty+sendfax:主要用于使用linux架构一台fax server,可以使用mgetty.config来配置需要有关传真接收和发送的操作;
                php.d:主要存放的各软件(如dbase、ldap、mysql等)与php相关的配置文件;
                reader.conf.d:存放smart card配置文件的目录,由程序pcsc-lite提供,这个程序的主配置文件是/etc/reader.conf;
                dumpdates:存放dump命令的执行日期,dump命令可以对ext2/ext3文件系统进行检查备份;

2.10、/lib

需要共享的函数库与kernel模块,系统kernel启动所使用的函数库,或者当执行一些在/bin和/sbin中的命令时使用的函数库;

2.11、/media

移动存储设备默认挂载点;(如光盘)

2.12、/mnt

临时挂载用的设备挂载点;(如磁盘分区,网络共享)

2.13、/opt

额外所安装的应用程序目录,有些软件包我们可以将它安装在该目录中;(一般为空,某些应用软件安装需要这个目录)

2.14、/root

管理员root的宿主目录

2.15、/sys

虚拟文件系统,被建立在内存中,是在2.6版的kernel之后才被加入到正式的文件系统中,以分类的方式将系统的信息存放在这个目录中,以方便linux用户通过不同的分类找出系统相关的信息;

2.16、/tmp

临时文件存放区域;(默认被设置了粘滞位)

2.17、/var

动态文件或数据存放目录,默认日志文件都存放在这个目录下,一般建议把此目录单独划分一个分区;
/var/account:是linux系统下的审核机制(psacct)对应的目录;
/var/cache:该目录下的文件时所有程序所产生的缓存数据,也就是当应用程序启动时,会将数据留一份在这个目录中;
/var/empty:默认是sshd程序用到的这个目录,当建立ssh连接,ssh服务器必须使用该目录下的sshd子目录
/var/ftp:ftp服务器软件一般默认会将匿名登陆的用户的宿主目录;
/var/gdm:gdm所使用的目录,里面存放一些系统当前所占用的console记录及通过gdm执行的X windows记录,只有通过gdm窗口的日志才会存放在此;
/var/lib:该目录下存放很多与应用程序名称同名的子目录,每个子目录下都是应用执行的状态信息;
/var/lock:每个服务一开始都会在这个目录下产生一个该服务的空文件,主要是避免服务启动冲突;
/var/log:常用目录,专门用来存放所有日志文件的目录,里面存放很多系统、软件、用户等相关的日志信息;里面有一些文件是比较常用的;
    lastlog:记录用户最后一次登录的信息,使用lastlog命令读取;
    message:记录系统的几乎所有信息,主要包括启动信息,syslogd服务记录的信息等;
    wtmp:记录所有用户登陆及注销的信息,使用last命令读取;
    secure:记录登录系统访问数据的文件,如ssh pop3 telnet ftp等都会记录在此文件中
/var/log/httpd/access_log:httpd访问日志
/var/log/httpd/error_log:httpd错误日志
     btmp:记录失败的用户登录
     utmp: 纪录当前登录的每个用户
     xferlog:ftp会话日志
     boot.log:记录开机或一些服务启动时所显示的启动和关闭信息
/var/log/maillog或/var/log/mail/*:记录邮件访问或往来的用户信息
      cron: 记录crontab例行性服务的内容
       dmesg:开机引导日志信息
       sudolog:纪录使用sudo发出的命令
       sulog: 纪录使用su命令的使用
/var/named:bind软件实现的DNS服务器的区域数据文件都存放在这个目录下;
/var/nis和/var/yp:都是NIS服务机制所使用的目录,nis主要记录所有网络中每一个client的连接信息;yp是linux的nis服务的日志文件存放的目录;
/var/run:此目录中的大部分文件都记载目前系统正在执行程序的PID值,每一个文件都是以个独立的PID记录;此目录下存放一个特殊文件utmp,此文件记录目前谁在使用系统,必须使用utmpdump命令才能看到其中的内容;
/var/spool:里面主要都是一些临时存放,随时会被用户所调用的数据;打印机、邮件、代理服务器等假脱机目录存放在该目录下;
/var/tmp:专门为了一些应用程序在安装或执行时,需要在重启后使用的某些文件时,能将该文件暂时存放在这个目录中,完成后再行删除;
/var/www:apache网页服务器的宿主目录;

三、命令集合

1、xargs

1.1、命令简介

xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。因为以空格作为分隔符,所以有一些文件名或者其他意义的字符串内含有空格的时候,xargs可能会误判。简单来说,xargs的作用是给其他命令传递参数,是构建单行命令的重要组件之一。
之所以要用到xargs,是因为很多命令不支持使用管道|来传递参数,例如:

find /sbin -perm +700 | ls -hl         # 这个命令是错误,因为标准输入不能作为ls的参数
find /sbin -perm +700 | xargs ls -hl   # 这样才是正确的
1.2、命令格式
xargs [OPTIONS] [COMMAND]
1.3、选项参数
-0, --null
  #如果输入的stdin含有特殊字符,例如反引号 `、反斜杠 \、空格等字符时,xargs将它还原成一般字符。为默认选项
-a, --arg-file=FILE
  #从指定的文件FILE中读取输入内容而不是从标准输入
-d, --delimiter=DEL
  #指定xargs处理输入内容时的分隔符。xargs处理输入内容默认是按空格和换行符作为分隔符,输出arguments时按空格分隔
-E EOF_STR
  #EOF_STR是end of file string,表示输入的结束
-e, --eof[=EOF_STR]
  #作用等同于 -E 选项,与 -E 选项不同时,该选项不符合POSIX标准且EOF_STR不是强制的。如果没有EOF_STR则表示输入没有结束符
-I REPLACE_STR
  #将xargs输出的每一项参数单独赋值给后面的命令,参数需要用指定的替代字符串REPLACE_STR代替。REPLACE_STR可以使用{} $ @ 等符号,其主要作用是当xargs command后有多个参数时,调整参数位置。
  例如备份以 txt 为后缀的文件:find . -name "*.txt" | xargs -I {}  cp {} /tmp/{}.bak
-i, --replace[=REPLACE_STR]
  #作用同 -I 选项,参数 REPLACE_STR 是可选的,缺省为 {}。建议使用 -I 选项,因为其符合 POSIX
-L MAX_LINES
  #限定最大输入行数。隐含了 -x 选项
-l, --max-lines[=MAX_LINES]
  #作用同 -L 选项,参数 MAX_LINES 是可选的,缺省为 1。建议使用 -L 选项,因为其符合 POSIX 标准
-n, --max-args=MAX_ARGS
  #表示命令在执行的时候一次使用参数的最大个数
-o, --open-tty
  #在执行命令之前,在子进程中重新打开stdin作为/dev/TTY。如果您希望xargs运行交互式应用程序,这是非常有用的
-P, --max-procs=MAX_PROCS
  #每次运行最大进程;缺省值为 1。如果MAX_PROCS为 0,xargs将一次运行尽可能多的进程。一般和-n或-L选项一起使用
-p, --interactive
  #当每次执行一个argument的时候询问一次用户
--process-slot-var=NAME
  #将指定的环境变量设置为每个正在运行的子进程中的唯一值。一旦子进程退出,将重用该值。例如,这可以用于初始负荷分配方案
-r, --no-run-if-empty
  #当 xargs 的输入为空的时候则停止xargs,不用再去执行后面的命令了。为默认选项
-s, --max-chars=MAX_CHARS
  #命令行的最大字符数,指的是xargs后面那个命令的最大命令行字符数,包括命令、空格和换行符。每个参数单独传入xargs后面的命令
--show-limits
  #显示操作系统对命令行长度的限制
-t, --verbose
  #先打印命令到标准错误输出,然后再执行
-x, --exit
  #配合 -s 使用,当命令行字符数大于 -s 指定的数值时,退出 xargs
--help
  #显示帮助信息并退出
--version
  #显示版本信息并退出
1.4、举例说明
1.4.1、将 Shell 的特殊字符反引号还原为一般字符。
echo '`0123`4 5678' | xargs -t echo
echo `0123`4 5678 
`0123`4 5678

如果直接进行如下操作,会报无法找到命令 01234 的错误,因为反引号在 Shell 中会将 01234 作为一个命令来执行,但是 01234 不是一个命令。-t 表示先打印命令,然后再执行。值得收藏!Linux系统常用命令速查手册

echo `01234` 5678
-bash: 01234: command not found
1.4.2、设置 xargs 读入参数时的结束标识,以逗号结束。这里要注意结束标志必须要是单独的字段,即以空格或者换行符分隔的字段。
echo 01234 , 5678 | xargs -E ","
01234
1.4.3、使用 rm、mv 等命令同时操作多个文件时,有时会报 “argument list too long” 参数列表过长的错误,此时可以使用 xargs 来解决。xargs 将标准输入的字符串分隔后,作为参数传递给后面的命令。例如,给当前目录的所有文件添加后缀名。
ls | xargs -t -i mv {} {}.bak

# 选择符合条件的文件
ls | grep -E "201703|201704|201705" | xargs -I {} mv {} {}.bak
1.4.4、设置命令行的最大字符数。参数默认一个一个单独传入命令中执行。
echo "01234 5678923" | xargs -t -s 11
echo 01234 
01234
echo 5678923 
5678923
1.4.5、设置标准输入中每次多少行作为命令的参数,默认是将标准输入中所有行的归并到一行一次性传给命令执行。
echo -e "01234\n5678911\n01234" | xargs -t -L 2 echo
echo 01234 5678911
01234 5678911
echo 01234 
01234
1.4.6、将文件内容以空格分隔合并为一行输出。
# 列出文件内容
cat test.txt
a b c d e v
f g h i j f
k l m n o g
# 多行输入合并为一行输出
cat test.txt | xargs
a b c d e v f g h i j f k l m n o g
1.4.7、与ps、grep、awk和kill结合,强制终止指定进程。
ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9

2、od

1.命令简介

od(Octal Dump)命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的显示方式是八进制。
常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出,不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
hexdump命令也可以参考的,它是以十六进制输出,个人感觉hexdump命令没有od命令强大。

1.2 命令格式
od [OPTION]... [FILE]...
1.3、选项参数说明
-A RADIX
  --address-radix=RADIX
 #选择以何种基数表示地址偏移
-j BYTES
  --skip-bytes=BYTES
 #跳过指定数目的字节
-N BYTES
  --read-bytes=BYTES
 #输出指定字节数
-S [BYTES]
  --strings[=BYTES]
 #输出长度不小于指定字节数的字符串,BYTES 缺省为 3
-v
  --output-duplicates
 #输出时不省略重复的数据
-w [BYTES]
  --width[=BYTES]
 #设置每行显示的字节数,BYTES 缺省为 32 字节
-t TYPE
  --format=TYPE
 #指定输出格式,格式包括 a、c、d、f、o、u 和 x,各含义如下:
  a:具名字符;比如换行符显示为 nl
  c:可打印字符或反斜杠表示的转义字符;比如换行符显示为 \n
  d[SIZE]:SIZE 字节组成一个有符号十进制整数。SIZE 缺省为 sizeof(int)
  f[SIZE]:SIZE 字节组成一个浮点数。SIZE 缺省为 sizeof(double)
  o[SIZE]:SIZE 字节组成一个八进制整数。SIZE 缺省为 sizeof(int)
  u[SIZE]:SIZE 字节组成一个无符号十进制整数。SIZE 缺省为 sizeof(int)
  x[SIZE]:SIZE 字节组成一个十六进制整数。SIZE 缺省为 sizeof(int)
  SIZE可以为数字,也可以为大写字母。如果 TYPE[doux] 中的一个,那么SIZE 可以为C = sizeof(char),S = sizeof(short),I = sizeof(int),L = sizeof(long)。如果 TYPE 是 f,那么 SIZE 可以为 F = sizeof(float),D = sizeof(double) ,L = sizeof(long double)
--help
 #在线帮助
--version
 #显示版本信息
1.4 实例说明
1.4.1、设置第一列偏移地址以十进制显示。
od -Ad testfile
#偏移地址显示基数有:d for decimal, o for octal, x for hexadecimal or n for none。
1.4.2、od 不显示第一列偏移地址。
od -An testfile
1.4.3、以十六进制输出,默认以四字节为一组(一列)显示。
od -tx testfile
1.4.4、以十六进制输出,每列输出一字节。
od -tx1 testfile
1.4.5、显示ASCII字符和ASCII字符名称,注意换行符显示方式的区别。
#显示ASCII字符
[b3335@localhost]$ echo lvlv|od -a
0000000   l   v   l   v  nl
0000005

#显示ASCII字符名称
[b3335@localhost]$ echo lvlv|od -tc
0000000   l   v   l   v  \n
0000005
1.4.6、以十六进制显示的同时显示原字符。
[b3335@localhost]$ echo lvlv|od -tcx1
0000000   l   v   l   v  \n
         6c  76  6c  76  0a
0000005
1.4.7、指定每行显示512字节。
od -w512 -tx1 testfile
1.4.8、od 命令输出时去除列与列之间的空格符。

当我们需要将文件内容显示为十六进制,需要输出连续的单个字节,每个字节以十六进制显示。这时我们可以通过od命令将文件以单个字节为一组,十六进制输出在同一行,并去除每个字节之间的空格。目前还不知道怎么通过指定od命令的相关选项去除列与列之间的空格,也许od命令本身并不支持。我的做法是:

(a)使用-An不输出偏移地址;
(b)使用-v输出时不省略重复的数据;
(c)使用-tx1以单个字节为一组按照十六进制输出,-w1每列输出一个字节;
(d)最后通过管道传递给 awk 的标准输入,通过awk不换行输出所有行,拼接为一行输出。

具体命令如下:

od -An -w1 -tx1 testfile|awk '{for(i=1;i<=NF;++i){printf "%s",$i}}'

3、sed

1.命令简介

sed是一种流编辑器,也是文本处理中非常好的工具,配合正则使用更强大处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,完成后输出到屏幕,接着处理下一行。文件内容并没有改变,除非使用-i选项。sed主要用来编辑一个或多个文件,简化对文件的反复操作或者用来编写转换程序等。

sed功能同awk、grep 类似,在Linux中被称为“三剑客”,可见其中的功能强大所在,
sed简单,对列处理的功能要差一些,awk功能复杂,对列处理的功能比较强大,grep 是过滤的文件。

1.2 命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
1.3、选项参数说明
-e #以指定的指令来处理输入的文本文件
-n #取消默认输出(如果和p命令同时使用只会打印发生改变的行)
-h #帮助
-V #显示版本信息
##后面追加的动作参数
a #在当前行下面插入文本
i #在当前行上面插入文本
c #把选定的行改为新的文本
d #删除,删除选择的行
D #删除模板块的第一行 
s #替换指定字符
h #拷贝模板块的内容到内存中的缓冲区
H #追加模板块的内容到内存中的缓冲区
g #获得内存缓冲区的内容,并替代当前模板块中的文本 
G #获得内存缓冲区的内容,并追加到当前模板块文本的后面 
l #列表不能打印字符的清单
n #读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N #追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p #打印匹配的行
P #(大写)打印模板的第一行
q #退出Sed
b #lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
r #file 从file中读行
t #label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T #label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
w #file 写并追加模板块到file末尾**
W #file 写并追加模板块的第一行到file末尾**
! #表示后面的命令对所有没有被选定的行发生作用** 
= #打印当前行号码**
# #把注释扩展到下一个换行符以前**
1.3.1 替换命令
g #表示行内全面替换(全局替换配合s命令使用)
p #表示打印行 
w  #表示把行写入一个文件 
x #表示互换模板块中的文本和缓冲区中的文本 
y #表示把一个字符翻译为另外的字符(但是不用于正则表达式) 
1  #子串匹配标记 
& #已匹配字符串标记
1.3.2 常用正则表达
^ #匹配行开始 
$ #匹配行结束
. #匹配一个非换行符的任意字符
* #匹配0个或多个字符
[] #匹配一个指定范围内的字符
[^]  #匹配一个不在指定范围内的字符 
(..) #匹配子串
&  #保存搜索字符用来替换其他字符
< #匹配单词的开始
>  #匹配单词的结束
x{m} #重复字符x,m次
x{m,} #重复字符x,至少m次 
x{m,n} #重复字符x,至少m次,不多于n次
1.4 实例说明
1.4.1、替换操作
#从第一个空格开始全局替换成-,只不过文本中只有一个空格
[root@ly001 ~]# echo "hello world" |sed 's/ /-/1g'
hello-world 
1.4.2、删除操作
#删除空白行
[root@ly001 ~]# sed '/^$/d' filename 
#删除第二行
[root@ly001 ~]# sed '2d' filename 
#删除第二直到未尾所有行
[root@ly001 ~]# sed '2,$d' filename 
#删除最后一行
[root@ly001 ~]# sed '$d' filename 
#删除以test开头行
[root@ly001 ~]# sed '/^test/'d filename 
1.4.3、匹配替换
[root@ly001 ~]# echo "hello world" |sed 's/w+/[&]/g'
[hello] [world]
#w+匹配每一个单词,&表示匹配到的字符串
[root@ly001 ~]# echo "hello world" |sed 's/w+/"&"/g'
"hello" "world"
#子串匹配替换
[root@ly001 ~]# echo AAA bbb |sed 's/([A-Z]+) ([a-z]+)/[2] [1]/'
[bbb] [AAA]

##### 1.4.4、选定范围
#所有在=0到max范围内的行都会被打印出来
[root@ly001 ~]# sed -n '/= 0/,/max/p' svnserve.conf
#min-encryption = 0
#max-encryption = 256
1.4.5、sed多点编辑功能(-e)
[root@ly001 ~]#cat -n test 
1  this is a test file
2  welcome
3  to
4  here
5  hello WORLD
6
7  linux centos6.8
8  redhat
#如果两条命令功能一样,那么就需要用到下面的参数
[root@ly001 ~]# sed -e '2,6d' -e 's/linux centos6.8/Linux Centos6.8/' test
this is a test file
Linux Centos6.8
redhat

[root@ly001 ~]# sed --expression='s/linux centos6.8/Linux Centos6.8/' --expression='s/to/TO/' test**
this is a test file
welcome
TO
here
hello WORLD
Linux CenTOs6.8
redhat
1.4.6、读入与写入
[root@ly001 ~]#cat test1
welcom 
to 
here
#将test1的文件内容读取显示所有匹配here行的后面
[root@ly001 ~]#sed '/here/r test1' test
this is a test file
welcome
to
here
#welcom
to
here#
hello WORLD
linux centos6.8
redhat

#将test文件匹配到centos6.8的所有行都写入到test2文件中,文件可以不存在.
#如果文件存在,就会被重定向不是追加
[root@ly001 ~]# sed -n '/centos6.8/w test2' test
[root@ly001 ~]#cat test2
linux centos6.8
1.4.7、追加与插入
#在匹配以l开头的行的后面追加2017-08-08
[root@ly001 ~]#sed '/^l/a2017-08-08' test2
linux centos6.8
2017-08-08

#在第一行的后面追加2017-08-08
[root@ly001 ~]#sed '1a2017-08-08' test2
linux centos6.8
2017-08-08

#在匹配以l开头的行的前面插入2017-08-08
[root@ly001 ~]#sed '/^l/i2017-08-08' test2
2017-08-08
linux centos6.8

#######以上操作是不会改变文件内容################
[root@ly001 ~]#sed -i '/^l/i2017-08-08' test2
[root@ly001 ~]#cat test2
2017-08-08
linux centos6.8
1.4.8、其它命令实例
#查看文件内容
[root@ly001 ~]#cat -n test2
 1 2017-08-08
 2 linux centos6.8
 3 08
 4
 5 test
#如果08匹配到就跳到下一行,将小写l替换成大写,注意到第三行也是被匹配到
#但是后面的条件不满足,所有没有被替换
[root@ly001 ~]# sed '/08/{ n; s/l/L/; }' test2
2017-08-08
Linux centos6.8
08
test

#将1至4行所有的数字8替换成9
[root@ly001 ~]# sed '1,4y/8/9/' test2
2017-09-09
linux centos6.9
09
test

#打印第一行内容后退出
[root@ly001 ~]# sed '1q' test2
2017-08-08

1.4.9、打印奇数或公偶数行
[root@ly001 ~]#sed -n 'p;n' test2
20170808
08

[root@ly001 ~]#sed -n 'n;p' test2
linux centos6.8
test

[root@ly001 ~]#sed -n '1~2p' test2
20170808
08

[root@ly001 ~]#sed -n '2~2p' test2
linux centos6.8
test
1.4.10、打印匹配字符串行的下一行
[root@ly001 ~]#sed -n '/linux/{n;p}' test2
08
[root@ly001 ~]#awk '/linux/{getline; print}' test2
08

4、awk

1.命令简介

Awk pattern scanning and processing language,对文本和数据进行处理。

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输(stdin)、一个或多个文件,或其它命令的输出。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

1.2 命令格式
awk [options] 'scripts' var=value filename

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …
1.3、选项参数说明
1.3.1、常用参数
-F 指定分隔符(可以是字符串或正则表达式)
-f 从脚本文件中读取awk命令
-v var=value 赋值变量,将外部变量传递给awk
1.3.2、内置参数
$0   #当前记录
$1~$n #当前记录的第N个字段
FS   #输入字段分隔符(-F相同作用)默认空格
RS   #输入记录分割符,默认换行符
NF   #字段个数就是列 
NR   #记录数,就是行号,默认从1开始
OFS  #输出字段分隔符,默认空格
ORS  #输出记录分割符,默认换行符

# $#, $0, $1,$@,$*,$$, $?的含义
$# 传递给脚本或函数的参数个数。
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$* 传递给脚本或函数的所有参数,以一个字符串的形式显示所有输入的参数
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
$? 上个命令的退出状态,或函数的返回值。一般情况下,大部分命令执行成功会返回 0,失败返回 1。
FILENAME:被处理的文件名。
RS:行分隔符。
awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
1.3.3、运算符与变量

算术运算符

* / & 乘 除 求余
^ *  求幂
++ -- 增加或减少,作为前缀或后缀
#和其它编程语言一样,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
[ly@ ~]#awk 'BEGIN{a="b";print a,a++,a--,++a;}'
b 0 1 1
[ly@ ~]#awk 'BEGIN{a="0";print a,a++,a--,++a;}'
0 0 1 1
[ly@ ~]#awk 'BEGIN{a="0";print a,a++,--a,++a;}'
0 0 0 1

赋值运算符

= += -= *= /= %= ^= **=

正则运算符

~ !~  匹配正则表达式/不匹配正则表达式

逻辑运算符

||  &&  逻辑或  逻辑与

关系运算符

< <= > >= != = 

其它运算符

$   字段引用 
空格 字符串链接符
?:   三目运算符
ln   数组中是否存在某键值

正则表达

^    行首定位符
$    行尾定位符
.    匹配任意单个字符
*    匹配0个或多个前导字符(包括回车)
+    匹配1个或多个前导字符
?    匹配0个或1个前导字符 
[]   匹配指定字符组内的任意一个字符/^[ab]
[^]  匹配不在指定字符组内的任意一个字符
()   子表达式
|    或者
\    转义符
~,!~ 匹配或不匹配的条件语句
x{m} x字符重复m次
x{m,} x字符至少重复m次
X{m,n} x字符至少重复m次但不起过n次(需指定参数-posix或--re-interval)
1.4 实例说明
一个awk脚本通常由BEGIN语句+模式匹配+END语句三部分组成,这三部分都是可选项.
工作原理:
第一步执行BEGIN 语句
第二步从文件或标准输入读取一行,然后再执行pattern语句,逐行扫描文件到文件全部被读取
第三步执行END语句
1.4.1、示例1
[ly@ ~]# echo "hello " | awk 'BEGIN{ print "welcome" } END{ print "2017-08-08" }'
welcome
2017-08-08

#不加print参数时默认只打印当前的行
[ly@ ~]# echo -e "hello" | awk 'BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }'
welcome
hello
2017-08-08

#使用print以逗号分隔时,打印则是以空格分界
[ly@ ~]# echo|awk '{ a="hello"; b="nihao"; c="mingongge"; print a,b,c; }'
hello nihao mingongge

#awk的print语句中双引号其实就是个拼接作用
[ly@ ~]# echo|awk '{ a="mgg"; b="mingg"; c="mingongge"; print a" is "b" or "c; }'
mgg is mingg or mingongge

``

1.4.2、示例2
#以:分隔打印第二列
[ly@ ~]# awk –F : ‘{print $2}’ datafile

#以:分隔打印以Dan开头行的第二列内容
[ly@ ~]# awk –F : ‘/^Dan/{print $2}’ datafile

#打印以C或E开头行的第一列
[ly@ ~]# awk –F : ‘/^[CE]/{print $1}’ datafile 

#打印以:分隔且长度为4字符的第一列内容
[ly@ ~]# awk –F : ‘{if(length($1) == 4) print $1}’ datafile 

#匹配916的行以:分隔打印第一列
[ly@ ~]# awk –F : ‘/[916]/{print $1}’ datafile

#显示以Dan开头行并在第五列前加上a
[ly@ ~]# awk -F : '/^Vinh/{print "a"$5}' 2.txt

#打印第二列第一列并以,分隔
[ly@ ~]# awk –F : ‘{print $2”,”$1}’  datafile

#以:分隔打印第五列是68900的行第一列
[ly@ ~]# awk -F : '($5 == 68900) {print $1}' 2.txt
  
#打印以:分隔且长度为4字符的第一列内容
[ly@ ~]# awk -F : '{if(length($1) == 11) print $1}' 2.txt

#打印以:分隔且第一列为Tommy Savage的第五列内容
[ly@ ~]# awk -F : '$1~/Tommy Savage/ {print $5}' 2.txt
[ly@ ~]# awk -F : '($1 == "Tommy Savage") {print $5}' 2.txt

#统计目录个的文件所有的字节数
[ly@ ~]# ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'

#以M为单位显示目录下的所有字节数
[ly@ ~]# awk 'BEGIN{size=0;} {size=size+$5;} END{print "[end]size is ",size/1024/1024,"M"}' 

#a+10等价于 a=a+10
[ly@ ~]# awk 'BEGIN{a=10;a+=10;print a}'
20 

#正则匹配a 是否有test字符,成立打印ok
[ly@ ~]# echo|awk 'BEGIN{a="100testaaa"}a~/test/{print "ok"}' 

#三目运算符?:
[ly@ ~]# awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'
ok
[ly@ ~]# awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'
err

#匹配所有包含root的行
[ly@ ~]# awk '/root/{print $0}' passwd 

# 以分号作为分隔符,匹配第5个字段是root的行
[ly@ ~]# awk -F: '$5~/root/{print $0}' passwd 

#打印IP地址
[ly@ ~]# ifconfig eth0|awk 'BEGIN{FS="[[:space:]:]+"} NR==2{print $4}'

#toupper是awk内置函数,将所小写字母转换成大写
[ly@ ~]# awk '{print toupper($0)}' test.txt

5、grep

1.命令简介

文本查找或搜索工具。用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则grep会从标准输入设备读取数据。

同样可以配合正则表达式来搜索文本,并将匹配的行打印输出,也可用于过滤与搜索特定字符串,使用十分灵活

1.2 命令格式
grep [options] [pattern] file(s)
1.3、选项参数说明
1.3.1、基本参数
-a  #不要忽略二进制数据
-A  #除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b  #在显示符合范本样式的那一行之外,并显示该行之前的内容
-B  #除了显示符合样式的那一行之外,并显示该行之前的内容
-c  #计算符合范本样式的列数
-C  #除了显示符合范本样式的那一列之外,并显示该列之前后的内容
-d  #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-e  #指定字符串作为查找文件内容的范本样式
-E  #将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f  #指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F  #将范本样式视为固定字符串的列表
-G  #将范本样式视为普通的表示法来使用
-h  #在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H  #在显示符合范本样式的那一列之前,标示该列的文件名称
-i  #忽略字符大小写的差别
-l  #列出文件内容符合指定的范本样式的文件名称
-L  #列出文件内容不符合指定的范本样式的文件名称
-n  #在显示符合范本样式的那一列之前,标示出该列的编号
-q  #不显示任何信息
-R/-r #此参数的效果和指定“-d recurse”参数相同
-s  #不显示错误信息
-v  #反转查找
-V  #显示版本信息 
-w  #只显示全字符合的列
-x  #只显示全列符合的列
-y  #此参数效果跟“-i”相同
-o  #只输出文件中匹配到的部分
1.3.2、正则表达参数
^  #匹配以XX开头的行
$  #匹配以XX结尾的行
限定符	描述
.	匹配任意的一个字符。
?	匹配前面的子表达式,最多一次。
*	匹配前面的子表达式零次或多次。
+	匹配前面的子表达式一次或多次。
{N}	匹配前面的子表达式 N 次。
{N,}	匹配前面的子表达式 N 次到多次。
{N,M}	匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
-	只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
^	匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
$	匹配一行末尾的空字符串。
\b	匹配一个单词前后的空字符串。
\B	匹配一个单词中间的空字符串。
\<	匹配单词前面的空字符串。
\>	匹配单词后面的空字符串。

grep 和 egrep
egrep 等同于
grep -E
1.4 实例说明

1、在多个文件中查找:

[ly@ ~]# grep "file" file_1 file_2 file_3

2、输出除之外的所有行 -v 选项:

[ly@ ~]# grep -v "file" file_name

3、标记匹配颜色 --color=auto 选项:

[ly@ ~]# grep "file" file_name --color=auto

4、使用正则表达式 -E 选项:

[ly@ ~]# grep -E "[1-9]+"

[ly@ ~]# egrep "[1-9]+"

5、只输出文件中匹配到的部分 -o 选项:

[ly@ ~]# echo this is a test line. | grep -o -E "[a-z]+."
line.

[ly@ ~]# echo this is a test line. | egrep -o "[a-z]+."
line.

6、统计文件或者文本中包含匹配字符串的行数-c 选项:

[ly@ ~]# grep -c "text" file_name
2

7、输出包含匹配字符串的行数 -n 选项:

[ly@ ~]# grep "text" -n file_name[ly@ ~]# cat file_name | grep "text" -n

8、多个文件

[ly@ ~]# grep "text" -n file_1 file_2

9、搜索多个文件并查找匹配文本在哪些文件中:

[ly@ ~]# grep -l "text" file1 file2 file3...

10、grep递归搜索文件,在多级目录中对文本进行递归搜索:

[ly@ ~]# grep "text" . -r -n

11、忽略匹配样式中的字符大小写:

[ly@ ~]# echo "hello world" | grep -i "HELLO"
hello

12、选项 -e 指定多个匹配样式:

[ly@ ~]# echo this is a text line | grep -e "is" -e "line" -o
is
line

13、也可以使用 -f 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。

[ly@ ~]# cat patfile
aaa
bbb

[ly@ ~]# echo aaa bbb ccc ddd eee | grep -f patfile -o

14、在grep搜索结果中包括或者排除指定文件:
只在目录中所有的.php和.html文件中递归搜索字符"main()"

[ly@ ~]# grep "main()" . -r --include *.{php,html}

15、在搜索结果中排除所有README文件

[ly@ ~]# grep "main()" . -r --exclude "README"

16、在搜索结果中排除filelist文件列表里的文件

[ly@ ~]# grep "main()" . -r --exclude-from filelist

其它使用方法

#过滤有San的行
[ly@ ~]# grep "San" testfile 

#显示以J开头的行
[ly@ ~]# grep '^J' testfile 

#显示以70结尾的行
[ly@ ~]# grep '70$' testfile 

#显示所有不包括834的行
[ly@ ~]# grep -v "834" testfile 

#显示:12/的行
[ly@ ~]# grep ':12/' testfile 
 
#显示:498-的行
[ly@ ~]# grep ':498-' testfile 

#显示这样的行,一个大写字母+四个小写字母+空格+一个大写字母
[ly@ ~]# grep '[A-Z][a-z]{4}:[[:space:]][A-Z]' testfile 

#显示包括K k的行
[ly@ ~]# grep '[a-z]{1,}[[:space:]][Kk]' testfile 

#显示6位数字的行,并打印行号
[ly@ ~]# grep -n '[0-9]{6,}$' testfile 

#显示有lincoln的行,不区分大小写
[ly@ ~]# grep -i "lincoln" testfile 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值