Linux基础学习(一)

一、linux概念
Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
(一)Linux 的发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。开源免费的可以使用CentOS练习,商用可以使用RedHat练习。
1、通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。

(二)linux安装
1、在Window上安装VMware虚拟机来安装Linux系统。
2、Cloud Studio 是基于浏览器的集成式开发环境,支持绝大部分编程语言,无需下载安装程序,一键切换开发环境。
注意:第一次登录,登录前不要做任何更改,这个很重要!!!登录之后紧接着退出,第二次登录进行设置。

(三)Linux 系统启动过程
1、内核引导:BIOS开机自检,读取/boot目录下的内核文件;
2、运行init进程:init进程完成系统的初始化,是系统中所有其他用户进程的祖先进程,读取配置文件 /etc/inittab。
注意:etc来源于法语的etcetera,表示等等、其他的意思。用来存放整个文件系统的配置文件。
3、系统初始化:rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
注意:在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
4、建立终端:rc执行完毕后,返回init。init接下来会打开6个终端,以便用户登录系统。
5、用户登录系统:用户有三种登录方式:(1)命令行登录(文本模式);(2)ssh登录;(3)图形界面登录;
注意:SSH是一种网络协议,用于计算机之间的加密登录。ssh命令用于远程登录上Linux主机。
注意:linux默认开机进入文本模式,其中运行级别3为文本模式;运行级别5是图形模式。

(四)图形模式与文字模式的切换方式
1、默认是命令行模式即文本模式,Ctrl + Alt + F1 ~ F6 来切换它们。
2、如果安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
注意:当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
3、如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。

(五)linux关机
1、正确的关机流程:sync > shutdown > reboot > halt;其中取消关机:shutdown -c。
2、sync 将数据由内存同步到硬盘中。
3、reboot 就是重启,等同于 shutdown –r now;
4、halt 停止机器,等同于shutdown –h now 和 poweroff;halt -p:关闭机器。
注意:halt 命令通知硬件来停止所有的 CPU 功能,但是仍然保持通电。
5、Tab 有『命令补全』与『文件补齐』的功能。
6、[Ctrl] + c 可以用于停止命令,比如输入错误指令,可以使用该命令停止。
7、[Ctrl] + d 相当于输入 exit。

(六)Linux 系统目录结构
文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。
1、在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。
注意:如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。
2、/etc:系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
3、/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户);
4、/sbin, /usr/sbin 则是给root使用的指令。
5、运行过程中要用:
(1)/var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
(2)/proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

(七)Linux 忘记密码解决方法
进入单用户模式更改一下root密码即可。

(八)Linux 远程登录
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器。这时我们需要远程登录到Linux服务器来管理维护系统。
1、Linux系统中是通过ssh服务实现的远程登录功能,默认ssh服务端口号为 22。
2、Window系统上 Linux 远程登录客户端有SecureCRT, Putty, SSH Secure Shell等登录Linux。
3、终端利用ssh登录远程服务器:
(1)安装ssh:yum install ssh;
(2)启动ssh:service sshd start;
(3)登录远程服务器:ssh -p 端口 服务器用户名@服务器ip,例如:ssh -p 50022 my@127.0.0.1,回车输入密码即可登录。

(九)文件基本属性
为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
1、Linux用户分为:user(属主即所有者)、group(所有者同组用户组)、others(其他用户)。因此,文件的权限按照这三种用户类型来配置r(读:4)、w(写:2)、x(可执行:1)三种权限。
注意:对于 root 用户来说,一般情况下,文件的权限对其不起作用。
2、在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组:
(1)第一个属性表示是文件还是目录:d为目录;-为文件。
(2)后三个属性对应三种用户所属的权限即以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
3、更改文件属性:
(1)chgrp:更改文件属组,语法:chgrp [-R] 属组名 文件名;
其中-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
(2)chown:更改文件属主,也可以同时更改文件属组,语法:chown [–R] 属主名 文件名;
(3)chmod:更改文件9个属性,有两种设置方法,一种是数字,一种是符号。语法:chmod [-R] xyz 文件或目录。
其中xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
(4)使用符号类型改变文件权限:使用 u, g, o 来代表三种身份的权限,a 则代表 all,即全部的身份。例如:chmod u=rwx,g=rx,o=r 文件名 或者chmod  a-x test1。
4、 SetUID是针对二进制文件;SBIT 任何用户均可以往此目录写入文件,可以删除自己所创建的文件,root 自然有权限删除
SBIT。
注意:SBIT只对目录有效。

(十)Linux 文件与目录管理
1、Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接又叫软连接(Symbolic Link)。
注意:默认情况下,ln 命令产生硬链接。
(1)硬连接:通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
注意:文件真正删除的条件是与之相关的所有硬连接文件均被删除。
(2)软连接:类似于 Windows 的快捷方式。实际上是一个文本文件,其中包含的有另一文件的位置信息。
2、区分好绝对路径和相对路径。
3、处理目录的常用命令:
(1)ls (列出目录):ls [-aAdfFhilnrRSt] [目录名称],其中-a表示列出全部文件;-d表示仅列出目录本身;-l表示列出文件的属性与权限等数据。
(2)cd (切换目录):语法: cd [相对路径或绝对路径];
(3)pwd (显示目前所在的目录):语法:pwd [-P]其中p表示显示出确实的路径,而非使用连结 (link) 路径。
(4)mkdir (创建新目录),语法:mkdir [-mp] 目录名称,-m表示配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色;例如:mkdir -m 711 test2。
(5)rmdir (删除空的目录),语法:rmdir [-p] 目录名称,其中-p连同上一级『空的』目录也一起删除;
注意: rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。
(6)cp (复制文件或目录),语法:cp [-adfilprsu] 来源档(source) 目标档(destination),-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用);-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);-r:递归持续复制,用於目录的复制行为(常用);
(7)rm (移除文件或目录),语法:rm [-fir] 文件或目录,-i :互动模式,在删除前会询问使用者是否动作;
(8)mv (移动文件与目录,或修改名称),语法:mv [-fiu] source destination,-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
4、Linux 文件内容查看:
(1)cat  由第一行开始显示文件内容;
(2)nl   显示的时候,顺道输出行号!
(3)more 一页一页的显示文件内容;
(4)less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
(5)head 只看头几行,语法:head [-n number] 文件,其中-n后接数字表示显示几行 ,例如:head -n 20 /etc/man.config;
(6)tail 只看尾巴几行;

(十一)Linux 用户
实现用户账号的管理,要完成的工作主要有如下几个方面:
(1)用户账号的添加、删除与修改。
(2)用户口令的管理。
(3)用户组的管理。
1、添加新的用户账号使用useradd命令:useradd 选项 用户名。
选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
实例:useradd -s /bin/sh -g group –G  adm,rootgem:此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
注意:Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。

2、删除帐号原理:删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
(1)语法:userdel 选项 用户名。常用的选项是 -r,它的作用是把用户的主目录一起删除。

3、修改帐号:根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。语法:usermod 选项 用户名,常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

4、用户口令的管理:用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
(1)语法:passwd 选项 用户名。
可使用的选项:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
注意:超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。

(十二)用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。其中,Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
1、增加一个新的用户组使用groupadd命令。其格式如下:groupadd 选项 用户组,
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下:groupdel 用户组。

3、修改用户组的属性使用groupmod命令。其语法如下:
常用的选项有:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字;
例如:groupmod –g 10000 -n group3 group2表示此命令将组group2的标识号改为10000,组名修改为group3。

4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。使用命令:newgrp切换到其他用户组,例如:newgrp root。
注意:用户组的管理也可以通过集成的系统管理工具来完成。

5、与用户账号有关的系统文件
完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。与用户和用户组相关的信息都存放在一些系统文件中,主要包括/etc/passwd, /etc/shadow, /etc/group等。

6、/etc/passwd文件详解:
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell。
(1)口令:由于/etc/passwd文件对所有用户都可读,许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
(2)“用户标识号”是一个整数,系统内部用它来标识用户。
注意:用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
注意:通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
(3)“组标识号”字段记录的是用户所属的用户组。对应着/etc/group文件中的一条记录。
(4)“主目录”,也就是用户的起始工作目录。它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限。
(5)登录shell:Shell是用户与Linux系统之间的接口。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
注意:系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
注意:利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。

7、/etc/shadow文件详解:
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生,它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。格式如下:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

8、/etc/group文件详解:
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
(1)文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表;
注意:"口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
注意:"组内用户列表"是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。

9、批量添加用户:
(1)1、创建一个文件,内容格式和 /etc/passwd 一样,如 test.txt 内容;
(2)在 tty 输入:newusers test.txt;
(3)创建一个口令文件,内容格式 用户名:口令,如 pass.txt 内容;
(4)在 tty 输入:chpasswd <pass.txt。

二、磁盘管理
Linux磁盘管理好坏直接关系到整个系统的性能问题。
Linux内容的存储:文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性存放在 inode 中,至于实际数据则放置到 data block 区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。
(一)df:列出文件系统的整体磁盘使用量
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
1、语法:df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示

(二)du:检查磁盘空间使用量
与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看。
1、语法:du [-ahskm] 文件或目录名称;
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
注意:与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。

(三)fdisk:用于磁盘分区
1、语法:fdisk [-l] 装置名称;
选项与参数:
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

(四)磁盘格式化
磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs(make filesystem) 命令。
1、语法:mkfs [-t 文件系统格式] 装置文件名;
选项与参数:
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)。

(五)磁盘检验
fsck(file system check)用来检查和维护不一致的文件系统。
注意:若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。
1、语法:fsck [-t 文件系统] [-ACay] 装置名称;
选项与参数:
-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数;
-s : 依序一个一个地执行 fsck 的指令来检查;
-A : 对/etc/fstab 中所有列出来的 分区(partition)做检查;
-C : 显示完整的检查进度;
-d : 打印出 e2fsck 的 debug 结果;
-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行;
-R : 同时有 -A 条件时,省略 / 不检查;
-V : 详细显示模式;
-a : 如果检查有错则自动修复;
-r : 如果检查有错则由使用者回答是否修复;
-y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

(六)磁盘挂载与卸除
Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。
1、磁盘挂载语法:mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点;
2、磁盘卸载命令 umount 语法:umount [-fn] 装置文件名或挂载点;
选项与参数:
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-n :不升级 /etc/mtab 情况下卸除。

三、Linux vi/vim文本编辑器
所有的 Unix Like 系统都会内建 vi 文书编辑器,但是目前我们使用比较多的是 vim 编辑器。Vim是从 vi 发展出来的一个文本编辑器。vim 是一个程序开发工具而不是文字处理软件。
(一)vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 
(二)命令模式
用户启动vi/vim,默认进入命令模式。在命令模式中,敲击键盘动作会被Vim识别为命令,而非输入字符。
1、以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
注意:命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

(三)输入模式
在命令模式下按下 i, o, a 都可以进入输入模式。
1、常用命令:
(1)ESC,退出输入模式,切换到命令模式;
(2)Insert,切换光标为输入/替换模式,光标将变成竖线/下划线;

(四)底线命令模式
在命令模式下按:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
1、常用的命令:
(1)w 保存文件;
(2)q 退出程序;
(3)按ESC键可随时退出底线命令模式。

(五)vi/vim 使用实例
1、使用vim 来建立一个名为 test.txt 的文件,例如:vim runoob.txt;
注意:记得 vi 后面一定要加文件名,不管该文件存在与否!
2、直接输入 vi 文件名,就能够进入 vi 的一般模式(一般命令模式)。
3、按下 i, o, a 等字符就可以从一般模式进入输入模式,即可以编辑文字;
4、文件内容编辑完毕之后,可以按下 ESC 按钮回到一般模式;
5、保存文档并离开,在一般模式按下 :wq 即可储存后离开 vi。

(六)vim 中批量添加注释
方法一:使用块选择模式(编辑模式下)
1、批量注释:Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
2、取消注释:Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。
方法二:替换命令(命令行模式下)
1、添加注释:使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。
2、取消注释:使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。
例如:
在 10 - 20 行添加 // 注释:“:10,20s#^#//#g”;
在 10 - 20 行删除 // 注释:“:10,20s#^//##g”;
在 10 - 20 行添加 # 注释:“:10,20s/^/#/g”;
在 10 - 20 行删除 # 注释:“:10,20s/^#//g”。
注意:替换方法的例子中正则的分割符使用的是相反的符号,如果匹配// 那么使用 #作分隔符这样不需要对/作转义处理,节省输入次数。

四、linux yum 命令
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
注意:RPM软件包管理器一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。与Dpkg类似。
(一)yum语法
1、语法:yum [options] [command] [package ...]
(1)options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
(2)command:要进行的操作。
(3)package操作的对象。

(二)yum常用命令
1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install <package_name>
4.仅更新指定的软件命令:yum update <package_name>
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove <package_name>
7.查找软件包 命令:yum search <keyword>
8.清除缓存命令:
(1)yum clean packages: 清除缓存目录下的软件包
(2)yum clean headers: 清除缓存目录下的 headers
(3)yum clean oldheaders: 清除缓存目录下旧的 headers
(4)yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers。

(三)国内 yum 源
1、网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。
2、中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos;
3、sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html;

 

shell教程


一、shell概念
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
注意:Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
例如:Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

二、shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,注意shell 和 shell script 是两个不同的概念。
(一)Shell 环境
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,Bourne Shell(/usr/bin/sh或/bin/sh)和Bourne Again Shell(/bin/bash)。
注意:Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

(二)运行shell脚本
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
1、方法一:作为可执行程序
将代码保存为 test.sh,并 cd 到相应目录,通过命令使文件具有可执行权,例如:chmod +x ./test.sh。
注意:一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找
2、方法二:作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名,例如:/bin/sh test.sh。
注意:这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

三、shell变量
(一)shell变量命名规则
1、变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
2、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
3、中间不能有空格,可以使用下划线(_)。
4、不能使用标点符号。
5、不能使用bash里的关键字(可用help命令查看保留关键字)。

(二)变量的操作
1、使用已定义变量:在变量名前面加美元符号,变量使用花括号。例如:${变量名}。
2、只读变量:使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
3、删除变量:使用 unset 命令可以删除变量。语法:unset variable_name
注意:变量被删除后不能再次使用。unset 命令不能删除只读变量。

(三)shell字符串
1、单引号字符串限制:
(1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
(2)单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
2、双引号字符串:
(1)双引号里可以有变量;
(2)双引号里可以出现转义字符。
3、获取字符串长度:${#变量名}。
4、提取子字符串:${变量名:n1:n2},n1截取字符串开始位置,n2截取字符串结束位置。
5、查找子字符串出现的位置:`expr index "$变量名" 要查找的子字符串`。例如:echo `expr index "$string" io`  # 输出 4 其中查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)。
注意:脚本中 ` 是反引号,而不是单引号'。

(四)Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
1、定义数组:在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。
格式如下:数组名=(值1 值2 ... 值n)。
2、可以单独定义数组的各个分量:array_name[0]=value0。
注意:可以不使用连续的下标,而且下标的范围没有限制。
3、读取数组元素值:${数组名[下标]}。
4、使用 @ 符号可以获取数组中的所有元素,例如:echo ${array_name[@]}。
5、获取数组的长度:length=${#array_name[@]}或者length=${#array_name[*]}。
其中 取得数组单个元素的长度:lengthn=${#array_name[n]}。

(五)Shell 注释
1、单行注释:以 # 开头的行就是注释,会被解释器忽略。
2、多行注释::<<EOF 注释内容 EOF。
注意:EOF 也可以使用其他符号,如!和“'”(英文单引号)。

(六)变量类型
1、局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2、环境变量:所有的程序,包括shell启动的程序,都能访问环境变量。
3、shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量。

三、Shell 传递参数
(一)传递参数原理
1、在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。

(二)特殊字符用来处理参数:
(1)$#:传递到脚本的参数个数;
(2)$*:以一个单字符串显示所有向脚本传递的参数。
注意:如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
(3)$$:脚本运行的当前进程ID号;
(4)$!:后台运行的最后一个进程的ID号;
(5)$@:与$*相同,但是使用时加引号,返回每个参数都会加引号。
注意:如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
(6)$-:显示Shell使用的当前选项,与set命令功能相同。
(7)$?:显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
3、区分开$*和$@:
(1)$*和$@没有被引用的时候,它们确实没有什么区别,都会把位置参数当成一个个体。
(2)"$*"会把所有位置参数当成一个整体(或者说当成一个单词),一行整体输出。
(3)"$@"会把所有位置参数当成一个单独的字段,一个一个换行输出。

(三)参数注意事项
1、在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。
2、Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试。
(1)算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。
(2)文件属性测试,比如一个文件是否存在,[ -e $var ], 是否是目录,[ -d $var ]。
(3)字符串比较, 比如两个字符串是否相同, [[ $var1 = $var2 ]]。
注意:中括号[]与括号代码应该有空格隔开。
注意:[] 常常可以使用 test 命令来代替。

四、Shell 数组
(一)shell数组语法
1、Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:array_name=(value1 ... valuen)。
2、读取数组元素:${array_name[index]}。
3、获取数组所有元素:使用@ 或 * 可以获取数组中的所有元素。
4、获取数组的长度:${#my_array[*]}或${#my_array[@]}。

五、Shell 基本运算符
(一)shell支持多种运算符
1、算数运算符
2、关系运算符
3、布尔运算符
4、字符串运算符
5、文件测试运算符

(二)注意事项
1、原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
注意:expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
2、表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
3、完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

(三)算数运算符
1、加法格式:`expr $a + $b` ,减法、除法、取余同加法格式一样。
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
2、乘法格式:`expr $a \* $b` ,要对乘法符号转义才可以使用。
3、赋值操作:a=$b 。
注意:变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
4、相等格式:[ $a == $b ] 返回 false;不相等格式:[ $a != $b ] 返回 true。
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
5、做好区分:在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。

(四)关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
其中等于(equal)、大于(greater than)、小于(less than)都是该单词的首字母。
1、-eq:检测两个数是否相等,相等返回 true。例如:[ $a -eq $b ] 返回 false。
2、-ne:检测两个数是否不相等,不相等返回 true。
3、-gt:检测左边的数是否大于右边的,如果是,则返回 true。
4、-lt:检测左边的数是否小于右边的,如果是,则返回 true。
5、-ge:检测左边的数是否大于等于右边的,如果是,则返回 true。
6、-le:检测左边的数是否小于等于右边的,如果是,则返回 true。

(五)布尔运算符
1、!:非运算,表达式为 true 则返回 false,否则返回 true。
2、-o:或运算,有一个表达式为 true 则返回 true。
3、-a:与运算,两个表达式都为 true 才返回 true。
例如:[ $a -lt 20 -o $b -gt 100 ] 返回 true。假定变量 a 为 10,变量 b 为 20。
注意:布尔运算符是一个方括号。

(六)逻辑运算符
1、&&:逻辑的 AND。
2、||:逻辑的 OR。
例如:[[ $a -lt 100 || $b -gt 100 ]] 返回 true。其中,假定变量 a 为 10,变量 b 为 20。
注意:逻辑运算符是两个方括号。

(七)字符串运算符
假定变量 a 为 "abc",变量 b 为 "efg":
1、=:检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
2、!=:检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
3、-z:检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
4、-n:检测字符串长度是否为0,不为0返回 true。[ -n "$a" ] 返回 true。
5、$:检测字符串是否为空,不为空返回 true。    [ $a ] 返回 true

(八)文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
1、-b file    检测文件是否是块设备文件,如果是,则返回 true。    [ -b $file ] 返回 false。
2、-c file    检测文件是否是字符设备文件,如果是,则返回 true。    [ -c $file ] 返回 false。
3、-d file    检测文件是否是目录,如果是,则返回 true。    [ -d $file ] 返回 false。
4、-f file    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。    [ -f $file ] 返回 true。
5、-g file    检测文件是否设置了 SGID 位,如果是,则返回 true。    [ -g $file ] 返回 false。
6、-k file    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。    [ -k $file ] 返回 false。
7、-p file    检测文件是否是有名管道,如果是,则返回 true。    [ -p $file ] 返回 false。
8、-u file    检测文件是否设置了 SUID 位,如果是,则返回 true。    [ -u $file ] 返回 false。
9、-r file    检测文件是否可读,如果是,则返回 true。    [ -r $file ] 返回 true。
10、-w file    检测文件是否可写,如果是,则返回 true。    [ -w $file ] 返回 true。
11、-x file    检测文件是否可执行,如果是,则返回 true。    [ -x $file ] 返回 true。
12、-s file    检测文件是否为空(文件大小是否大于0),不为空返回 true。    [ -s $file ] 返回 true。
13、-e file    检测文件(包括目录)是否存在,如果是,则返回 true。    [ -e $file ] 返回 true。
14、-S: 判断某文件是否 socket。(其中s是大写)。
15、-L: 检测文件是否存在并且是一个符号链接。

六、Shell echo命令
1、Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:echo string。
注意:shell中字符串可以使用单引号、双引号,也可以不加。但是作用上会有区分,建议使用双引号。
2、显示换行:echo -e "OK! \n" # -e 开启转义。
注意:-e表示开启转义,否做会原样输出。
注意:echo会自动添加换行符。不换行的话:echo -e "OK! \c" # -e 开启转义 \c 不换行

3、显示结果定向至文件:echo "It is a test" > myfile。
4、显示命令执行结果:echo `date`。
注意:这里命令使用的是反引号 `, 而不是单引号 '。

(一)read命令
1、read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。
参数说明:
 -p 输入提示文字
 -n 输入字符长度限制(达到6位,自动结束)
 -t 输入限时
 -s 隐藏输入内容
 2、例如:测试文件中:read firstStr secondStr,用这两个变量来接收输入的词组。
 
 七、Shell printf 命令
 (一)将printf和echo区分开
 1、printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
 注意:printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
 2、printf 命令的语法:printf  format-string  [arguments...]。
 参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。
例如:printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 ,%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。
3、格式字符说明:
%d %s %c %f 格式替代符详解:
d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!
s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!
c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!
f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!

八、Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
注意:Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试。其中字符串比较使用双中括号。
注意:中括号[]与括号代码之间应该有空格隔开。

(一)单中括号和双中括号的区别
1、使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。
2、比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]]。
3、如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
4、bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。 
5、[ 和test 是 Shell 的内部命令,而[[是Shell的关键字。其中,[ 和test 是相等的。

(二)数值的比较
1、-eq    等于则为真;
2、-ne    不等于则为真;
3、-gt    大于则为真;
4、-ge    大于等于则为真;
5、-lt    小于则为真;
6、-le    小于等于则为真;
例如:if test $[num1] -eq $[num2]

(三)字符串的比较
=    等于则为真
!=    不相等则为真
-z 字符串    字符串的长度为零则为真
-n 字符串    字符串的长度不为零则为真

(四)文件测试
-e 文件名    如果文件存在则为真
-r 文件名    如果文件存在且可读则为真
-w 文件名    如果文件存在且可写则为真
-x 文件名    如果文件存在且可执行则为真
-s 文件名    如果文件存在且至少有一个字符则为真
-d 文件名    如果文件存在且为目录则为真
-f 文件名    如果文件存在且为普通文件则为真
-c 文件名    如果文件存在且为字符型特殊文件则为真
-b 文件名    如果文件存在且为块特殊文件则为真
注意:Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。

(五)$str、${str}和$[num1]的区别
1、使用已定义变量:在变量名前面加美元符号,变量使用花括号。例如:${变量名}。
2、$str则是使用一个字符串变量;
3、$[num1] 是表示使用一个数值变量;
4、对于 a=3+7 ,若$a则值为字符串3+7,若$[a]则对其内容值进行运算后的结果为10。前者默认为字符串,后者则是程序表达式语句。前者相当于其它语言中的对字符加了单双引号,后者类似js或python语言中的eval函数传入一个字符串,通过相应解释器进行评估计算。

九、Shell 流程控制(重点)
(一)if语句
1、if语句格式:
if condition
then
    command1 
    command2
    ...
    commandN 
fi
2、if-else语句格式:
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
3、if-else-if-else语句格式:
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
注意:在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else。
注意如果写在一行,各语句用分号分隔。

(二)for循环语句
1、for循环格式:
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
2、写在一行:for var in item1 item2 ... itemN; do command1; command2… done;
注意:in列表可以包含替换、字符串和文件名。
注意:in列表是可选的,如果不用它,for循环使用命令行的位置参数。

3、for 变量 in 常量列表; do 一些命令; done;
4、for (( 变量初始化; 条件判断; 变量自变 )); do 一些命令; done;

(三)while语句
while循环用于不断执行一系列命令,也用于从输入文件中读取数据。
1、while语句格式:
while condition
do
    command
done
注意:判断条件中,要使用双括号。

(四)无限循环语句
1、while :
do
    command
done
2、while true
do
    command
done
3、for (( ; ; ))。

(五)until 循环
until 循环执行一系列命令直至条件为 true 时停止。一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
1、until语法格式:
until condition
do
    command
done
注意:condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

(六)case语句
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
1、case语法格式:
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
*)
    command1
    ;;
esac
注意:如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。其中,case语句中;;表示break的含义。

(七)跳出循环
1、break命令允许跳出所有循环(终止执行后面的所有循环)。
2、continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

十、Shell 函数
(一)函数格式
[ function ] funname [()]
{
    action;
    [return int;]
}
注意:1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)。
3、注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。
4、调用函数仅使用其函数名即可。

(二)函数参数
1、在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数,以此类推。
注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
2、参数操作说明:
$#    传递到脚本的参数个数
$*    以一个单字符串显示所有向脚本传递的参数
$$    脚本运行的当前进程ID号
$!    后台运行的最后一个进程的ID号
$@    与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-    显示Shell使用的当前选项,与set命令功能相同。
$?    显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

十一、Shell 输入/输出重定向
(一)重定向命令
command > file    将输出重定向到 file。
command < file    将输入重定向到 file。
command >> file    将输出以追加的方式重定向到 file。
n > file    将文件描述符为 n 的文件重定向到 file。
n >> file    将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m    将输出文件 m 和 n 合并。
n <& m    将输入文件 m 和 n 合并。
<< tag    将开始标记 tag 和结束标记 tag 之间的内容作为输入。
注意:需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

(二)输出重定向
1、输出重定向格式:command1 > file1。这个命令执行command1然后将输出的内容存入file1。
注意:注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

(三)输入重定向
1、输入重定向格式:command1 < file1,本来需要从键盘获取输入的命令会转移到文件读取内容。

(四)重定向深入讲解:
1、一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
(1)标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
(2)标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
(3)标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

(五)Here Document
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
1、基本格式:
command << delimiter
    document
delimiter
它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。
注意:1、结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
2、开始的delimiter前后的空格会被忽略掉。
3、 Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。
其中,当shell看到< <的时候,它就会知道下一个词是一个分界符即EOF(注意:EOF可以换成其他单词)。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
例如:
cat << EOF
欢迎来到
我的博客
收藏并关注哦!

EOF

(六)/dev/null 文件
1、如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:$ command > /dev/null。
2、/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
3、如果希望屏蔽 stdout 和 stderr,可以这样写:$ command > /dev/null 2>&1
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

十二、Shell 文件包含
Shell 可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
1、Shell 文件包含的语法格式如下:
. filename   # 注意点号(.)和文件名中间有一空格

source filename;
注意:一次只能包含一个文件,不要包含多个文件,推荐使用source关键字。

十三、Nginx
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位远方的诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值