说明:本文主要参考《鸟哥的Linux私房菜》,主要目的是为了编写自动化部署、管理的Shell脚本,有些章节没有写,想进一步了解Linux知识的请参考《鸟哥的Linux私房菜》 一、启动、关机等基础操作
date 显示日期命令
date +%Y/%m/%d
date +%H %M
cal(calender) 显示日历
显示当前月份的日历 cal
显示2008年的日历 cal 2008正确的关机方法
观察系统的使用状态(用来判断是否可以关机)
如果要查看当前有谁在线,可以发出who命令
如果要查看网络联机状态,可以使用netstat -a命令
通知在线用户关机时间:关机前,总要给在线用户一些时间来结束其工作,可以使用shutdown命令实现此功能。
使用正确的关机命令:shutdown和reboot数据同步写入磁盘
linux系统中,为了加快数据的读取速度,某些数据不会直接写入硬盘,而是暂存在内存中。万一关机,不正常断点等情况下,数据尚未写入磁盘,就会丢失,此时需要命令sync(只有root可以执行该命令)。
当然在shutdown/reboot命令均已在关机前进行了sync工具的调用。
重新启动reboot reboot命令与shutdown -r now几乎相同。
二、 linux的文件属性与目录配置 1.用户与用户组
(linux中任何一个文件都具有“用户、用户组和其他人”3个权限)
文件拥有者:linux是多用户、多任务的系统,不同的人可以同时使用主机,考虑到每一个用户的隐私和喜好的工作环境,文件拥有者就可以派上用处了。
用户组:用户组主要基于团队开发。可以进行简单的文件权限设置,就能限制其他用户组成员不能查看该文件。还可以让自己用户组的成员修改自己创建的文件,同时,如果有自己的私有文件,可以设置通用户组其他成员不能看到。用户组的概念使这些实现起来很方便。
其他人:不属于自己用户组的成员
2.文件属性
登录linux后,输入ls -al(ls即list,-al表示列出所有的文件,包括隐藏文件,就是文件名前第一个字符为 . 的文件)
从1到7依次为文件属性、连接数、文件拥有着、文件所属用户组、文件大小、文件最新修改时间、文件名。
文件属性
1 2 3 4 dwxr------ 3 root root 4096 Jun 08:35 .ssh root用户可以进入该目录,其他用户无法进入 dwxr--r--- 3 root root 4096 Jun 08:35 .ssh 虽然用户组有r权限,但因为没有x权限,无法进入该目录
- linux中,文件能否执行,是通过是否具有x属性来决定的,所有与文件名及扩展名没有绝对关系。
3.更改文件权限
更改所属用户组(change group)
1 2 chgrp [-R] 群组名称 文件目录 -R表示进行递归(recursive)的持续更改,即连同子目录下的所有文件、目录都更改为这个用户组
更改文件拥有者(change owner)
1 2 chown [-R] 账号名称:文件或目录 chown bin install.log
更改文件拥有者的常见例子是,将一个文件的内容复制到另一个文件,并把另一个文件给别人。
1 2 3 4 cp 源文件 目的文件 例,将.aa文件复制给.bb,并给xiaoming这个人(用户),可以这样做 cp .aa .bb chown xiaoming .bb
1 2 3 4 5 6 7 8 9 各属性和数字的对照表 r:4 w:2 x:1 chmod [-R] xyz 文件或目录 xyz为rwx属性数值的和 例:chmod 777 .aa 第一个7=4+2+1,对应的属性未rwx 第二个7和第三个同理
- 第二种方法
1 2 可以用u,g,o表示user,group,others三组属性;a表示all,即全部三组 语法:

1 2 3 4 5 6 例:chmod u=rwx,go=rx .aa 其中go表示g和o 要是想增加某一属性,而不改变其他属性,可以如下操作 chmod a+w .aa 要是想除去某一属性,而不改变其他属性,可以如下操作 chmod a-x .aa
4.目录属性的意义
以上介绍的都是针对一般文件的属性,对于目录r,w,x是什么含义呢?
r:表示具有读取目录结构清单的权限
w:它标识拥有更改该目录结构清单的权限
建立新的文件与目录
删除已存在的文件与目录
将已存在的文件或目录重命名
移动该目录内文件、目录的位置
x:x与能否进入该目录有关5.linux文件类型与扩展名
文件种类
[ - ] 普通文件。普通文件根据文件的内容又可以分为
纯文本文件(ASCII):其中的内容我们可以直接读取到的数据,如数字,字母等。
二进制文件(binary):Linux中可执行文件(脚本、文本方式的批处理文件不算)就是这种格式。
数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件。
[d] 目录(directory)
[ l ] 连接文件(link):类似于Windows下面的快捷方式。
设备与设备文件:与系统外设及存储等相关的一些文件,通常都集中在/dev目录下。该文件可分为两种:
[b]块(block)设备文件:就是存储数据以供系统访问的接口设备。简单而言就是硬盘。
[c]字符(character)设备文件:即串行端口的接口设备,例如键盘、鼠标等。
[s] 套接字(sockets):这类文件通常用在网络数据连接。
[p] 管道(FIFO,pipe):FIFO也是一种特殊的文件类型,其主要目的是,解决多个程序同时访问一个文件所造成的错误。
linux文件扩展名
Linux文件能否执行,与它的属性相关,与文件名一点关系都没有。只要有属性x,即表示这个文件可以执行。需要说明的是可以执行与执行成功是不一样的。x表示这个文件具有可执行能力,但不能不能执行成功,当然就要看该文件的内容了。例如,root目录下的install.log是一个纯文本文件,即使权限修改为-rwxrwxrwx,这个文件依然不能执行,因为它的内容根本就没有可执行的数据。
通常我们还是希望通过扩展名来表示该文件的类型,所以会以适当的扩展名来表示该文件的类型。下面是常用的几种扩展名:
*.sh:批处理文件,因为批处理文件使用shell写成,所以扩展名为.sh。
.tar、 .tar.gz、*.zip:经过打包的压缩文件。压缩软件分别为gunzip、tar等,根据不同的压缩软件而取其相关的扩展名。
.html、 .php:网页相关的文件6. linux目录配置
Linux中所有的文件与目录都是由根目录(/)开始。它是所有目录与文件的源头。
进入目录的写法:
1 2 3 4 5 6 cd /var/log(绝对路径) cd ../var/log(相对路径) . : 表示当前目录,也可以使用./来表示 ..: 表示上一层目录,也可以用../来表示 / : 指的是根目录root
linux目录内容 7. linux支持的文件系统
当前的大多数操作系统都是从硬盘中读取数据的,每个操作系统用的硬盘在x86架构上都一样,都是同样的硬盘。但是每种操作系统都有其独特的读取文件的方法,也就是说,每种操作系统对硬盘读取的方法不同,这就产生了不同的文件系统。
Linux正统的文件系统为ext2(Linux second extended file system,Linux第二代扩展文件系统),不过ext2缺乏日志管理系统。ext3文件系统多做了一个日志式数据的记录。要将数据写入硬盘时,ext2直接将数据写入,但ext3则会将“要开始写入”的信息写入日志纪录区,然后才开始写入数据,在写入数据后,又将“完成写入动作”的信息写入日志记录区。这样做的好处就是数据的完整性与恢复性得到保证。比如,早期的ext2文件系统遇到断电,就要检查文件的一致性,这种检查要将整个分区内的文件进行完整的比较,很慢。如果是ext3,只要通过检查“日志纪录区”就可以知道,断电时有哪些文件正在写入,只需要检查这些地方即可。
三、Linux文件和目录管理 1.目录与路径
相对路径与绝对路径
绝对路径:路径的写法“一定由根目录/写起”,如/usr/share/doc
相对路径:路径的写法“不是由/写起”,例如../man
目录操作相关
cd 切换目录
pwd(Print Working Directory) 显示当前所在的目录 pwd [-p] 参数-p表示显示出实际路径,而非使用连接路径。
mkdir 建立新目录 mkdir[-mp] 参数-m设置文件的权限,直接设置,不要管默认权限;-p:帮你直接建立所需目录的递归
1 2 3 4 5 mkdir test 建立一个名为test的目录 mkdir test1/test2/test3 建立失败,默认情况下,目录要一层一层的建立。 加入-p参数可以按照顺序依次建立目录 mkdir -p test1/test2/test3 建立成功 mkdir -m 711 test4 通过-m 711给新目录赋予drwx--x--x属性。
- rmdir删除“空”目录
1 2 3 4 5 6 rmdir [-p] 目录名 参数-p:与上层“空”目录也一起删除 rmdir test 需要注意的是如果test目录不是空目录,则会删除失败。 rmdir test1/test2/test3 只能删除test3 rmdir -p test1/test2/test3 就能将这一串“空”目录删除 被删的目录中,不能有其他目录或文件。这也是空目录的含义 上面采用-p参数删除test1/test2/test3时,会一层一层的删除,先删除test3后,如果test2成为了空目录,则也删除,依次类推。
执行文件路径的变量$PATH
介绍了绝对路径、相对路径与命令的执行方式之后,你可能会注意到为什么可以在任何地方执行/bin/ls命令呢?这是因为有环境变量PATH的帮助。在执行命令时,系统会按照PATH的设置,去到每个PATH定义的路径下搜索执行文件,先搜索到的命令先执行。
1 echo $PATH echo命令表示“显示”的意思,PATH前面的$,表示后面接的是变量。
- 如果要执行的命令的目录不在环境变量PATH中,该如何解决呢?
1 2 3 4 5 6 7 一、直接将命令所在的的路径加入到PATH中 PATH="$PATH":/root 首先$PATH拿到环境变量原有的目录,如/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 然后""将其括起来表示这些目录的字符串,后面再接:/root表示将该目录添加到环境变量中,这样系统就会去/root目录下搜索相关的执行命令。 二、使用完整的文件名来发出命令,即直接使用相对或绝对路径来执行 假设我们把ls命令从/bin目录移到了/root目录 /root/ls ./ls
2.管理文件与目录
1 2 3 4 5 6 7 8 9 10 11 12 13 ls [-aAdfFhilRs] 目录名 ls [--color={none,auto,always}] 目录名 ls [--full-time] 目录名 介绍几个参数: -d:列出目录本身,而不是列出目录内的文件数据 -R:与子目录内容一起列起来 -S:按文件大小排序 -t:按时间排序 --color=never:不要按照文件属性的不同用不同的颜色显示 --color=always:显示颜色 --color=auto:让系统自行按照设置来判断是否使用颜色 --full-time:以完整的时间模式输出 --time={atime,ctime}:输出访问时间(atime)或改变权限属性的时间(ctime),而非内容更改时间(modification time)
1 2 3 4 5 6 7 8 9 10 11 cp [-adfilprsu] 源文件 目标文件 介绍几个常用的参数: -d:若源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身 -p:与文件的属性一起复制,而非使用默认属性 -r:递归持续复制,用于目录的复制操作 rm [-fir] 文件或目录 参数: -f:强制删除 -i:交互模式,在删除前会询问用户是否操作 -r:递归删除。常用在目录的删除。
1 mv [-fiv] source destination
1 2 3 4 5 6 获取文件名 basename /etc/sysconfig/network 结果:network 获取目录名 dirname /etc/sysconfig/network 结果:/etc/sysconfig
3.查看文件内容
1 2 3 head [-n number] 文件 参数 -n 后面接数字表示显示几行的意思 默认情况下显示10行
- tail:只看最后几行
1 2 3 4 5 tail [-n number] 文件 默认情况下显示10行 显示~/.bashrc的第10行到第20行 head -n 20 ~/.bashrc|tail -n 10
- od:以二进制方式读取文件内容
前面的内容都是在查看纯文本文件(ASCII格式文件),想查看非文字文件可以用od读取。
1 2 3 4 5 6 7 8 od [-t TYPE] 文件 -t 后面可以接各种类型TYPE的输出,如: a:使用默认的字符来输出 c:使用ASCII字符输出 d[size]:使用十进制(decimal)来输出数据,每个整数占用size字节 f[size]:使用浮点数(floating)值来输出数据,每个整数占用size字节 o[size]:使用八进制(octal)输出数据,每个整数占用size字节 x[size]:使用十六进制(hexadecimal)输出数据,每个整数占用size字节
- 修改文件时间与创建新文件:touch
- modification time(mtime,修改时间):当文件的内容数据更改时,就会更新这个时间。
- status time(ctime,状态时间):当该文件的状态更改时,就会更新这个时间。如更改了权限与属性。
- access time(atime,访问时间):当读取文件内容时就会更新这个读取时间,如用cat命令查看一个文件时,就会更新atime。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 文件时间很重要,因为如果误判文件时间,可能会造成某些程序无法运行。 touch [-acdmt] 文件 -a:仅修改atime -c:仅修改时间,而不是建立文件 -d:后面可以接日期,也可以使用 --date="日期或时间" -m:仅修改mtime -t:后面可以接时间,格式为 [YYMMDDhhmm] 默认状态下:如果touch后面接文件, 若该文件不存在,则会主动建立一个新的空文件。 将bashrc文件的日期调整为两天前 touch -d "2 days ago" bashrc 将bashrc文件的日期日期改为2005/07/15 2:02 touch -t 0507150202 barshrc
4.文件与目录的默认权限与隐藏权限
文件默认权限:umask
现在我们知道如何建立或者修改一个目录或文件的属性了,但是,当建立一个新的文件或目录时,它默认的属性是什么样的呢?通常,umask就是指定“当前用户在建立文件或目录时的属性默认值”。
1 2 3 4 umask 结果比如显示 0022 第一组是给特殊权限用的 umask -S 结果显示比如 u=rwx,g=rx,o=rx
在默认权限的属性上,目录与文件时不一样的。由于我们不希望文件具有可执行的权限,默认情况下,文件是没有可执行(x)权限的。因此:
若用户建立的文件默认没有可执行(x)权限,即只有rw这两个权限,也就是最大为666分,默认属性为 -rw-rw-rw-。
若用户建立目录,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认属性为 rwxrwxrwx 。
umask指定的是“该默认值需要减掉的权限”。因为r、w、x分别是4、2、1,也就是说,当要去掉写权限时,就输入2,要去掉读权限时,就输入4,要去掉读与写权限时,就输入6,而要去掉执行与写的权限时,就输入3。上面umask为022,所以user没有被去掉属性,不过group与others的属性被去掉了2,所以用户:
1 2 建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- 建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
- 如何设置umask?直接在umask后面输入相关值,如002。需要注意的是,计算默认权限值时不要直接相减,而是要用AND与NOT计算。
四、vi和vim文字处理器 1.vi的使用
vi是几乎任何一个类Unix机器都存在的文字处理器,它功能很齐全,但还有些可以改进的地方。vim可以看做是vi的高级软件,它对程序开发人员很好用,vim官网也说vim是一个“程序开发工具”而不是文字处理软件。vim中增加了很多附加功能,比如支持规范表示法的搜索框架、多文件编辑、块复制等。
vi共分为3中模式,分别是“一般模式”、“编辑模式”、“命令行命令模式”。
简单执行范例
如下图

如果test.txt不存在的话,会新建该文件。
- 按下i进入编辑模式,开始编辑文字

这时候可以输入任意字符。
- 按下[ESC]回到一般模式
- 在一般模式下按下 :wq 存储后离开vi(实际上按下 : 后,进入了命令行模式,再按wq存储文件并离开vi)。
- 如果文件权限不对,很可能无法写入。可以使用":wq!" 强制写入,不过需要强调的是,这是在“你的权限可以改变”的情况下可行的。
1 2 3 4 5 6 7 8 右方向键(->):光标向右移动一个字符 多次移动,如向下移动30行:可以使用输入30+向下方向键的组合键形式完成 [Page Down]:向下移动一页 [Page Up]:向上移动一页 0:数字0表示移动到这一行的最前面字符处 $:移动到这一行的最后面的字符处 G:移动到这个文件的最后一行
- 一般模式:搜索和替换
1 2 3 4 /word:从光标位置开始,向下寻找一个名为word的字符串。 ?word:从光标位置开始,向上寻找一个名为word的字符串。 n:表示重复前一个搜索动作。比如前一个动作是/a,则按下n后,继续向下搜索a。 N:与n反向
- 一般模式:删除、复制与粘贴
1 p,P:p为将已复制的数据粘贴到光标的下一行,P则为贴在光标上的上一行。
2.vim的附加功能
当前大部分版本都采用vim代替vi的功能了。vim具有颜色显示功能,并且还支持很多程序语法,当使用vim编辑程序时(不论是C语言,还是shell脚本),vim可以帮你直接进行程序调试。vim的一般用法与vi一模一样,没有不同。
块选择
多文件编辑(略)
多窗口功能(略)