学会使用快捷键

Ctrl + C:这个是用来终止当前命令的快捷键,当然你也可以输入一大串字符,不想让它运行直接Ctrl + C,光标就会跳入下一行。

Tab: 这个键是最有用的键了,也是笔者敲击概率最高的一个键。因为当你打一个命令打一半时,它会帮你补全的。不光是命令,当你打一个目录时,同样可以补全,不信你试试。



Ctrl + D: 退出当前终端,同样你也可以输入exit。

Ctrl + Z: 暂停当前进程,比如你正运行一个命令,突然觉得有点问题想暂停一下,就可以使用这个快捷键。暂停后,可以使用fg 恢复它。

Ctrl + L: 清屏,使光标移动到第一行。

下一章  学会查询帮助文档 — man

linux文件属性

上例中,用ls –l 查看当前目录下的文件时,共显示了9列内容(用空格划分列),都代表了什么含义呢?
1列,包含的东西有该文件类型和所属主所属组以及其他用户对该文件的权限第一列共10其中第一位用来描述该文件的类型上例中,我们看到的类型有”d”, “-“ ,其实除了这两种外还有”l”, “b”, “c”,”s”
d 表示该文件为目录;
- 表示该文件为普通文件;
l 表示该文件为连接文件(linux file),上边提到的软连接即为该类型;





b 表示该文件为块设备文件,比如磁盘分区





c 表示该文件为串行端口设备,例如键盘鼠标
s 表示该文件为套接字文件(socket),用于进程间通信

后边的9位,每三个为一组均为rwx 三个参数的组合其中r 代表可读,w代表可写,x代表可执行前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限下面拿一个具体的例子来述说一下

一个文件的属性为-rwxr-xr-- ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读

对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录例如一个目录的属性为 drwxr--r-- 其所属主为root,那么除了root外的其他用户是不能打开这个目录的

2列,表示为连接占用的节点(inode),若为目录时,通常与该目录地下还有多少目录有关系,关于连接(link)在以后章节详细介绍

3列,表示该文件的所属主

4列,表示该文件的所属组

5列,表示该文件的大小

67列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间

9列,文件名如果前面有一个. 则表示该文件为隐藏文件

学会查询帮助文档 — man

这个man 通常是用来看一个命令的帮助文档的例如:

输入 man ls 其实格式为 man + 命令
你就会看到相关的帮助文档了从命令的介绍到命令的参数以及用法介绍的都非常详细的不错吧

下一章 Linux系统目录结构

umask

上边也提到了默认情况下,目录权限值为766,普通文件权限值为644。那么这个值是由谁规定呢?追究其原因就涉及到了umask。
umask语法: umask xxx (这里的xxx代表三个数字)
查看umask值只要输入umask然后回车。 umask预设是0022,其代表什么含义?先看一下下面的规则:
1)若用户建立为普通文件,则预设没有可执行权限,只有rw两个权限最大为666-rw-rw-rw-
2)若用户建立为目录,则预设所有权限均开放,即777drwxrwxrwx
umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限所以目录的权限为(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的权限为(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定义的,比如设定umask 002,你再创建目录或者文件时,默认权限分别为(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。





umask 可以在/etc/bashrc里面更改,预设情况下,rootumask022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限

Linux系统目录结构

登录系统后,在当前命令窗口下输入 ls / 你会看到

以下是对这些目录的解释:
/bin binBinary的缩写这个目录存放着最经常使用的命令
/boot这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev devDevice(设备)的缩写该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
/etc这个目录用来存放所有的系统管理所需要的配置文件和子目录
/home用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/lib这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件几乎所有的应用程序都需要用到这些共享库
/lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
/media linux系统会自动识别一些设备,例如U光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
/mnt系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了
/opt 这是给主机额外安装软件所摆放的目录比如你安装一个ORACLE数据库则就可以放到这个目录下默认是空的
/proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all。
/root该目录为系统管理员,也称作超级权限者的用户主目录
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
/selinux 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的
/srv 该目录存放一些服务启动之后需要提取的数据
/sys 这是linux2.6内核的一个很大的变化该目录下安装了2.6内核中新出现的一个文件系统 sysfs sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统针对设备的devfs文件系统以及针对伪终端的devpts文件系统该文件系统是内核设备树的一个直观反映当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统种被创建
/tmp这个目录是用来存放一些临时文件的
/usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录
/usr/bin:系统用户使用的应用程序
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
/usr/src:内核源代码默认的放置目录
/var这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下包括各种日志文件

linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。/etc
上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。 /var
这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里


下一章  如何正确关机

更改文件的权限

更改文件的权限,也就是更改所属主所属组以及他们对应的读写执行权限
1更改所属组 chgrp
语法:chgrp [组名] [文件名]



这里用到了groupadd 命令,其含义即增加一个用户组该命令在以后章节中做详细介绍,你只要知道它是用来增加用户组的即可
2更改文件的所属主 chown
语法:chown [ -R ] 账户名
文件名
chown [ -R ] 账户名:组名
文件名
这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改

useradd 是增加一个账户,以后会详细介绍上例中,首先建立一个目录test,然后在test目录下创建一个普通文件test2,因为是以root的身份创建的目录和文件,所以所属主以及所属组都是root。chown user1 test 这使test的目录所属主由root变为了user1 ,然后test目录下的test2文件所属主以及所属组还是root。接着 chown –R user1:testgroup test 这样把test连同test目录下的test2 的所属主以及所属组都改变了
3改变用户对文件的读写执行权限 chmod

linux中为了方便更改这些权限,linux使用数字去代替rwx ,具体规则为r: 4 w:2 x:1 -:0 举个例子,-rwxrwx---用数字表示就是 770,具体是这样来的:
rwx = 4+2+1=7; rwx= 4+2+1=7; --- = 0+0+0=0
chmod 语法: chmod [-R] xyz 文件名
(这里的xyz,表示数字)
-R 选项作用同chown,级联更改
值得提一下的是,在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.



如果你创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 rwxr----- (740) 即可
chmod 还支持使用rwx的方式来设置权限!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user (2)group (3)others 三群啦!那么我们就可以藉由 u, g, o 来代表三群的属性!此外, a 则代表 all 亦即全部的三群!那么读写的属性就可以写成了 r, w, x!也就是可以使用底下的方式来看:

现在我想把一个文件设置成这样的权限 rwxr-xr-x (755),使用这种方式改变权限的命令为

另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如



另外linux下还有两个比较特殊的权限s和t,请点击linux下文件的特殊权限s和t

chattr 修改文件的特殊属性

语法: chattr [+-=][ASaci [文件或者目录名]
+-= :分别为增加减少设定
A:增加该属性后,文件或目录的atime将不可被修改;
S:增加该属性后,会将数据同步写入磁盘中;
a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;
c:自动压缩该文件,读取时会自动解压;
i:增加后,使文件不能被删除重命名设定连接写入新增数据;





增加i属性后不能在该目录中建立文件





增加a属性后,只能追加不能删除
lsattr
列出文件/目录的特殊属性

语法: lsattr [-aR] [文件/目录名]
-a:类似与ls -a 选项,即连同隐藏文件一同列出;
-R:连同子目录的数据一同列出





在上例中,test4是在test3目录增加a属性后建立的,所以test4也有a属性,通过这个例子可以看出,chattr 的属性是级联生效的,不仅对当前目录生效而且会对目录下的文件同样生效

安装源码包

其实,在linux下面安装一个源码包是最常用的,笔者在日常的管理工作中,大部分软件都是通过源码安装的安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的

源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件所以如果你的机器上没有安装gcc就没有办法去编译源码你可以使用 yum install -y gcc 来完成安装
安装一个源码包,通常需要三个步骤:
1. ./config 在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过”./config --help ”命令来查看在这一步会自动检测你的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译只有检测通过后才会生成一个Makefile文件
2. make 使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了
3. make install 安装步骤,生成相关的软件存放目录和配置文件的过程
上面介绍的3步并不是所有的源码包软件都一样的,笔者以前也曾经遇到过,安装步骤并不是这样,也就是说源码包的安装并非具有一定的标准安装步骤这就需要你拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名所以,你一定要去看一下下面笔者会编译安装一个源码包来帮你更深刻的去理解如何安装源码包
1. 下载一个源码包



这里要提一下,建议以后你把所有下载的源码包放到/usr/local/src/目录下,这个并不是必须的,只是一个约定方便你和你的同事将来更好的去运维这台服务器。wget即为下载的命令,后边跟源码包的下载地址该地址为笔者从网上找的一个apache的下载地址
2. 解压源码包



一般的源码包都是一个压缩包,如何解压一个.tar.gz的包

创建/修改一个用户的密码 “passwd [username]”

等创建完账户后,默认是没有设置密码的,虽然没有密码,但该账户同样登录不了系统只有设置好密码后方可登录系统
为用户创建密码时,为了安全起见,请尽量设置复杂一些你可以按照这样的规则来设置密码:a. 长度大于10个字符;b. 密码中包含大小写字母数字以及特殊字符(*&等);c. 不规则性(不要出现root, happy, love, linux, 123456, 111111等等单词或者数字);d. 不要带有自己名字公司名字自己电话自己生日等





passwd 后面不跟用户名则是更改当前用户的密码,当前用户为root,所以此时修改的是root的密码,后面跟test则修改的是test的密码

在linux下搜索一个文件

windows下有一个搜索工具,可以让我们很快的找到一个文件,这是很有用的然而在linux下搜索功能更加强大

which
用来查找可执行文件的绝对路径

在前面章节中已经多次用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which一下很容易就知道了



当查找的文件在PATH变量中并没有时,就会报错
whereis 通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件

语法: whereis [-bmsu] [文件名称]
-b:只找binary 文件
-m:只找在说明文件manual路径下的文件
-s:只找source来源文件
-u:没有说明档的文件



说明:whereis 笔者几乎很少用到,如果你感兴趣请深入研究
locate
类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里后边直接跟文件名如果你的linux没有这个命令,请安装软件包 mlocate ,这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包如果你装的CentOS你可以使用这个命令来安装 yum install –y mlocate 。 前提是你的CentOS能连互联网至于yum这个命令如何使用,到后续章节你自然会明白如果你刚装上这个命令,初次使用会报错



这是因为系统还没有生成那个文件列表库你可以使用updatedb 命令立即生成(更新)这个库如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大这个数据库默认情况下每周更新一次所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。locate命令笔者用的也并不多,所以你只要明白有这么一个东西即可你用到时再去深究其用法吧
find 这个搜索工具是笔者用的最多的一个,所以请你务必要熟悉它

语法: find [路径] [参数] 下面介绍几个笔者经常用的参数
-atime +n :访问或执行时间大于n天的文件
-ctime +n :写入更改inode属性(例如更改所有者权限或者连接)时间大于n天的文件
-mtime +n :写入时间大于n天的文件

看到这里,你对这三个time是不是有些晕了,那笔者就先给你介绍一下这三个time属性

文件的 Access timeatime 是在读取文件或者执行文件时更改的文件的 Modified timemtime 是在写入文件时随文件内容的更改而更改的文件的 Create timectime 是在写入文件更改所有者权限或链接设置时随 Inode 的内容更改而更改的因此,更改文件的内容即会更改 mtime ctime,但是文件的 ctime 可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化如何获得一个文件的atime mtime 以及ctime
ls -l 命令可用来列出文件的 atime、ctime mtime。
ls -lc filename         列出文件的 ctime
ls -lu filename         列出文件的 atime
ls -l filename          列出文件的 mtime   
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息而这是加了 noatime 取消了, 不代表真实情況反正, 這三個 time stamp 都放在 inode mtime, atime 修改inode 就一定會改, 既然 inode 改了, ctime 也就跟著要改了
继续讲find常用的参数
-name filename 直接查找该文件名的文件,这个使用最多了



-type type :通过文件类型查找文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。type 包含了 f, b, c, d, l, s 等等后续的内容还会介绍文件类型的



什么是shell

简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作

笔者接触的linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash,即Bourne Again Shell,它是shBourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢?
1)记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令这些命令保存在用户的家目录中的.bash_history文件中有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中

与命令历史有关的有一个有意思的字符那就是”!”常用的有这么几个应用:(1!! (连续两个”!”),表示执行上一条指令;(2!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令



2)指令和文件名补全

在本教程最开始笔者就介绍过这个功能了,记得吗?对了就是按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名连续按两次tab键,系统则会把所有的指令或者文件名都列出来
3)别名

前面也出现过alias的介绍,这个就是bash所特有的功能之一了我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令如果不想用了,还可以用unalias解除别名功能直接敲alias会看到目前系统预设的alias




看到了吧,系统预设的
alias指令也就这几个而已,你也可以自定义你想要的指令别名。alias语法很简单,alias [命令别名]=[’具体的命令’]。
4)通配符

bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符



5)输入输出从定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>,稍后会详细介绍
6)管道符

前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令
7)作业控制

当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c

用户身份切换

Linux系统中,有时候普通用户有些事情是不能做的,除非是root用户才能做到这时就需要临时切换到root身份来做事了





test账号登录linux系统,然后使用su - 就可以切换成root身份,前提是知道root的密码





你可以使用echo $LOGNAME来查看当前登录的用户名





su 的语法为: su [-] username
后面可以跟”-”也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户





”-“后会连同用户的环境变量一起切换过来。su test 后虽然切换到了test用户,但是当前目录还是切换前的/root目录,然后当用su - test时切换用户后则到了test的家目录/home/test。当用root切换普通用户时,是不需要输入密码的这也体现了root用户至高无上的权利

su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用visudo命令去编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令,请使用” yum install -y sudo”安装





默认root能够sudo是因为这个文件中有一行” root ALL=(ALL) ALL” 在该行下面加入” test ALL=(ALL) ALL”就可以让test用户拥有了sudo的权利如果每增加一用户就设置一行,这样太麻烦了所以你可以这样设置





把这一行前面的”#”去掉,让这一行生效它的意思是,wheel这个组的所有用户都拥有了sudo的权利接下来就需要你把想让有sudo权利的所有用户加入到wheel这个组中即可




你不妨跟笔者试一下,非常有意思

linux的文件系统

搞计算机的应该都知道windows的系统格式化硬盘时会指定格式,fat 或者 ntfs。而linux的文件系统格式为Ext2,或者Ext3 。早期的linux使用Ext2格式,目前的linux都使用了Ext3。 Ext2文件系统虽然是高效稳定的。但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了,因为Ext2文件系统是非日志文件系统。这在关键行业的应用是一个致命的弱点。Ext3文件系统是直接从Ext2文件系统发展而来,Ext3文件系统带有日志功能,可以跟踪记录文件系统的变化,并将变化内容写入日志,写操作首先是对日志记录文件进行操作,若整个写操作由于某种原因 (如系统掉电) 而中断,系统重启时,会根据日志记录来恢复中断前的写操作,而且这个过程费时极短。目前Ext3文件系统已经非常稳定可靠。它完全兼容Ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上了也是ext3日志文件系统初始设计的初衷。

Linux文件系统在windows中是不能识别的,但是在linux系统中你可以挂载的windows的文件系统,linux目前支持MS-DOS,VFAT,FAT,BSD等格式。如果你使用的是Redhat或者CentOS,那么你不要妄图挂载NTFS格式的文件到linux下,因为它不支持NTFS。虽然有些版本的linux支持NTFS,但不建议使用,因为目前的技术还不成熟。

Ext3文件系统为Redhat/CentOS默认使用的文件系统,除了Ext3文件系统外,有些linux发行版例如SuSE默认的文件系统为reiserFS ,Ext3 独特的优点就是易于转换,很容易在 Ext2 和 Ext3 之间相互转换,而具有良好的兼容性,其它优点 ReiserFS 都有,而且还比它做得更好。如高效的磁盘空间利用和独特的搜寻方式都是Ext3 所不具备的,速度上它也不能和 ReiserFS相媲美,在实际使用过程中,reiserFS 也更加安全高效,据说反删除功能也不错。

ReiserFS 的优势在于,它是基于 B*Tree 快速平衡树这种高效算法的文件系统,例如在处理小于 1k 的文件比 Ext3 快 10 倍。再一个就是 ReiserFS 空间浪费较少,它不会对一些小文件分配 inode,而是打包存放在同一个磁盘块 (簇) 中,Ext2/Ext3 是把它们单独存放在不同的簇上,如簇大小为 4k,那么 2 个 100 字节的文件会占用 2 个簇,ReiserFS 则只占用一个。当然 ReiserFS 也有缺点,就是每升级一个版本,都要将磁盘重新格式化一次。

变量

前面章节中笔者曾经介绍过环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接敲命令名即可你可以使用echo命令显示变量的值



除了PATH, HOME, LOGNAME外,系统预设的环境变量还有哪些呢?



使用env命令即可全部列出系统预设的全部系统变量了不过登录的用户不一样这些环境变量的值也不一样当前显示的就是root这个账户的环境变量了下面笔者简单介绍一下常见的环境变量:
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANG 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PWD 当前目录
env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来



限于篇幅,笔者在上例中并没有把所有显示结果都截图。set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来用户自定义变量?是的,用户自己同样可以定义变量



虽然你可以自定义变量,但是该变量只能在当前shell中生效,不信你再登录一个shell试试?



使用bash命令即可再打开一个shell,此时先前设置的myname变量已经不存在了,退出当前shell回到原来的shellmyname变量还在那要想设置的变量一直生效怎么办?有两种情况:
1
要想系统内所有用户登录后都能使用该变量

需要在/etc/profile文件最末行加入 “export myname=Aming” 然后运行”source /etc/profile”就可以生效了此时你再运行bash命令或者直接su - test账户看看



2)只想让当前用户使用该变量

需要在用户主目录下的.bashrc文件最后一行加入“export myname=Aming” 然后运行”source .bashrc”就可以生效了这时候再登录test账户,myname变量则不会生效了上面用的source命令的作用是,讲目前设定的配置刷新,即不用注销再登录也能生效

笔者在上例中使用”myname=Aming”来设置变量myname,那么在linux下设置自定义变量有哪些规则呢?
a. 设定变量的格式为”a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格;
b. 变量名只能由英数字以及下划线组成,而且不能以数字开头;
c. 当变量内容带有特殊字符(如空格)时,需要加上单引号;



有一种情况,需要你注意,就是变量内容中本身带有单引号,这就需要用到双引号了



d. 如果变量内容中需要用到其他命令运行结果则可以使用反引号;



e. 变量内容可以累加其他变量的内容,需要加双引号;



在这里如果你不小心把双引号加错为单引号,将得不到你想要的结果


通过上面几个例子也许你能看得出,单引号和双引号的区别:用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用

在前面的例子中笔者多次使用了bash命令,如果在当前shell中运行bash指令后,则会进入一个新的shell,这个shell就是原来shell的子shell了,不妨你用pstree指令来查看一下


pstree
这个指令会把linux系统中所有进程通过树形结构打印出来限于篇幅笔者没有全部列出,你可以直接输入pstree查看即可在父shell中设定一个变量后,进入子shell后该变量是不会生效的,如果想让这个变量在子shell中生效则要用到export指令,笔者曾经在前面用过


export
其实就是声明一下这个变量的意思,让该shell的子shell也知道变量abc的值是123.如果export后面不加任何变量名,则它会声明所有的变量


在最后面连同我们自定义的变量都被声明了
前面光讲如何设置变量,如果想取消某个变量怎么办?只要输入”unset 变量名即可



unset abc后,再echo $abc则不再输出任何内容

查看磁盘或者目录的容量 df 和 du

df
查看已挂载磁盘的总容量使用容量剩余容量等,可以不加任何参数,默认是按k为单位显示的





df常用参数有 –i -h -k –m
-i 使用inodes 显示结果





-h 使用合适的单位显示,例如G





-k -m 分别为使用KM为单位显示






简单介绍一下,你看到的相关数据。Filesystem 表示扇区,也就是你划分磁盘时所分的区;1K-blocks/1M-blocks表示以1K/1M为单位;Used Available 分别是已使用和剩余;Use% 就是已经使用的百分比,如果这个值大于90% 那么你就应该注意了,磁盘很有可能马上就会变满的;Mounted on 则表示该分区(扇区)所挂载的地方

du 用来查看某个目录所占空间大小

语法:du [-abckmsh] [文件或者目录名] 常用的参数有:
-a:全部文件与目录大小都列出来如果不加任何选项和参数只列出目录(包含子目录)大小





-b:列出的值以bytes为单位输出,默认是以Kbytes





-c:最后加总





-k:以KB为单位输出
-m:以MB为单位输出
-s:只列出总和
-h:系统自动调节单位,例如文件太小可能就几K,那么就以K为单位显示,如果大到几G,则就以G为单位显示笔者习惯用 du –sh filename 这样的形式