目录
一、Linux FHS
1、Linux FHS介绍
Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
- /bin 存放的是系统的命令
- /boot 存放的是系统的启动文件及内核
- /dev 设备文件主目录9
- /etc 系统主配置文件主目录
- /home 普通用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
- /root 超级管理员的家目录
- /lib 系统库文件主目录
- /media 挂载点目录,移动设备
- /mnt 挂载点目录,额外的临时文件系统
- /opt 可选目录,第三方程序的安装目录
- /proc 系统进程主目录
- /sys 伪文件系统,跟硬件设备相关的属性映射文件
- /tmp 临时文件, /var/tmp
- /var 系统配置文件主目录
- /sbin 存放的是管理命令
- /usr 系统大文件及说明文档存放目录
2、文件及目录的命名规则
(1)除了/之外,所有字符都合法;
(2)特殊字符如@、#、¥、&、()、-、空格等最好不要使用,当使用空格作为文件名时,执行命令会出错;
(3)避免使用“.”作为文件名的第一个字符,因为在Linux系统中以“.”为开头的文件代表隐藏,系统将自动隐藏以“.”为开头的文件;
(4)Linux系统区分大小写,因此文件命名也区分大小写;
(5)Linux文件后缀名无意义,但是为方便识别应定义后缀(.txt、.PHP等),定义后缀在大多数情况亦能将文件与目录区分;
(6)文件位置最好设置在Linux专用目录下,如配置文件大多时候放置于/etc目录下;
(7)文件夹及文件的命名尽量聚有其特定的含义;
(8)三个特殊目录,“.”:代表当前目录,“..”:代表上一级目录,“/”:代表根目录。
二、目录管理
1、ls
用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
- 蓝色-目录
- 绿色-可执行文件
- 红色-压缩文件
- 浅蓝色-链接文件
- 加粗黑色-符号链接
- 灰色-其他用法文件
常见用法:
[root@heikouzhao~]# ls -a 【显示当前目录中所有的子目录、文件及隐藏文件和文件夹】
aaa.txt .bash_logout bbb .config .esd_auth .local 模板 视频 图片 文档 下载 音乐 桌面
[root@heikouzhao~]# ls 【显示当前目录中包含的子目录、文件列表信息(不包含隐藏文件、目录)】
模板 视频 图片 文档 下载 音乐 桌面
[root@heikouzhao~]# ll 【长格式显示文件、目录列表,包含权限、大小等,等同于ls -l】
总用量 8
drwxr-xr-x. 2 root root 6 5月 5 10:31 公共
drwxr-xr-x. 2 root root 6 5月 5 10:31 模板
drwxr-xr-x. 2 root root 6 5月 5 10:31 视频
drwxr-xr-x. 2 root root 6 5月 5 10:31 图片
drwxr-xr-x. 2 root root 6 5月 5 10:31 文档
drwxr-xr-x. 2 root root 6 5月 5 10:31 下载
drwxr-xr-x. 2 root root 6 5月 5 10:31 音乐
drwxr-xr-x. 2 root root 6 5月 5 10:31 桌面
[root@heikouzhao~]# ls -ld 【以长格式显示当前目录的详细属性,目录本身】
dr-xr-x---. 16 root root 4096 5月 17 08:52 .
2、pwd
pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
[root@heikouzhao~]# pwd
/root
3、du
du命令也是查看磁盘使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
- -a:统计磁盘空间占用时包含所有的文件,而不仅仅只统计目录
- -h:显示为k、M等单位
- -s:只统计每个参数所占用空间总的大小,而不是统计每个子目录、文件的大小
[root@heikouzhao~]# du -ah /boot/vmlinuz* 【分别统计/boot目录中以vmlinuz开头的各文件所占用的大小】
4.7M /boot/vmlinuz-0-rescue-873bf1348f1642bb83d8ce0e261d04fc
4.7M /boot/vmlinuz-3.10.0-123.el7.x86_64
[root@heikouzhao~]# du -sh /var/log 【统计/var/log目录所占用空间的大小】
3.0M /var/log
4、cd
改变用户的当前目录。
[root@heikouzhao~]# cd /home/ 【切换到家目录】
[root@heikouzhao home]# cd /var/log/ 【切换到日志目录,绝对路径】
[root@heikouzhao log]# cd - 【切换到上一次执行cd命令之前所处的目录】
/home
[root@heikouzhao home]# ls
ezsvs garden lin
[root@heikouzhao home]# cd garden/ 【切换到/home下的garden目录,使用的是相对路径】
[root@heikouzhao garden]# cd .. 【切换到上一目录】
[root@heikouzhao home]# ls
heikouzhao garden lin
[root@heikouzhao home]# cd ./ezsvs 【.代表当前目录】
5、mkdir
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。 注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。 在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
[root@heikouzhao tmp]# mkdir aaa 【创建一个新目录aaa】
[root@heikouzhao tmp]# ls
aaa
[root@heikouzhao tmp]# mkdir bbb/ccc/ddd
mkdir: 无法创建目录"bbb/ccc/ddd": 没有那个文件或目录
[root@heikouzhao tmp]# mkdir -p bbb/ccc/ddd 【-p:递归创建目录】
[root@heikouzhao tmp]# cd bbb/ccc/ddd/
[root@heikouzhao ddd]# pwd
/tmp/bbb/ccc/ddd
6、rmdir
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。 注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。 虽然还可以用带有-r选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
[root@heikouzhao tmp]# rmdir aaa 【删除目录aaa】
那么如何删除一个非空目录呢?
[root@heikouzhao tmp]# rmdir bbb 【bbb下有ccc/ddd目录,无法直接删除】
rmdir: 删除 "bbb" 失败: 目录非空
[root@heikouzhao tmp]# rm -rf bbb 【删除非空目录】
三、文件操作命令
1、touch
touch命令有两个功能:
- 一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;
- 二是用来创建新的空文件。
[root@heikouzhao tmp]# touch 111.txt 222.txt 333.txt 【创建三个文件】 [root@heikouzhao tmp]# ls 111.txt 222.txt 333.txt
2、file
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
[root@heikouzhao tmp]# file /bin/ls 【查看ls的类型】
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x7dc964034aa8ec7327b3992e3239a0f50789a3dd, stripped
[root@heikouzhao tmp]# file /etc/passwd 【查看passwd文件类型】
/etc/passwd: ASCII text 【ASCII格式的普通文本文件】
3、cp
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。常见选项如下:
- -a:此参数的效果和同时指定"-dpR"参数相同;
- -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
- -f:强行复制文件或目录,不论目标文件或目录是否已存在;
- -i:覆盖既有文件之前先询问用户;
- -l:对源文件建立硬连接,而非复制文件;
- -p:保留源文件或目录的属性;
- -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
- -s:对源文件建立符号连接,而非复制文件;
- -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
- -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
- -b:覆盖已存在的文件目标前将目标文件备份;
- -v:详细显示命令执行的操作。
[root@heikouzhao tmp]# cp 111.txt 444.txt 【复制111.txt文件命名为444.txt】
[root@heikouzhao tmp]# ls
111.txt 222.txt 333.txt 444.txt
4、rm
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。常见选项如下:
- -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
- -f:强制删除文件或目录;
- -i:删除已有文件或目录之前先询问用户;
- -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
- --preserve-root:不对根目录进行递归操作;
- -v:显示指令的详细执行过程。
[root@heikouzhao tmp]# rm -rf * 【删除该目录下的所有文件】
5、mv
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:一是如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。二是如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。常见选项如下:
- -b:当文件存在时,覆盖前,为其创建一个备份;
- -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
- -i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
- --strip-trailing-slashes:删除源文件中的斜杠“/”;
- -S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
- --target-directory=<目录>:指定源文件要移动到目标目录;
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
[root@heikouzhao tmp]# mv aaa.txt /etc/ 【移动/tmp/aaa.txt文件到/etc下】 [root@heikouzhao tmp]# mv bbb /etc/ 【移动/tmp/bbb目录到/etc下】 [root@heikouzhao tmp]# ll /etc/ | grep aa -rw-r--r--. 1 root root 0 5月 17 11:30 aaa.txt [root@heikouzhao tmp]# ll /etc/ | grep bb drwxr-xr-x. 2 root root 6 5月 17 11:30 bbb
6、which
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
[root@heikouzhao tmp]# which ls 【查看ls命令文件位置】
alias ls='ls --color=auto'
/usr/bin/ls
[root@heikouzhao tmp]# which cd 【查看cd命令文件位置】
/usr/bin/cd
7、ln
ln命令用来为文件创建链接,连接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
硬链接:一个文件有两个名称,占用相同的空间大小,对其中一个文件改动另一个随之发生改变。
软链接:也叫符号链接,类似windows下的快捷方式
区别:
l 不允许给目录创建硬链接,但是可以给目录传播稿件软连接;
l 只有在同一文件系统中的文件之间才能创建硬链接;软链接可以跨文件系统。
例:为文件/etc/sysconfig/network-scripts/ifcfg-eno16777736创建软连接,并保存到/etc目录下
[root@heikouzhao ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/ 【创建软连接带参数-s】
[root@heikouzhao ~]# ls -lh /etc/ifcfg-eno16777736
【查看/etc/ifcfg-eno16777736文件信息】
lrwxrwxrwx. 1 root root 48 5月 17 14:37 /etc/ifcfg-eno16777736 -> /etc/sysconfig/network-scripts/ifcfg-eno16777736
【/etc下的ifcfg-eno16777736文件是/etc/sysconfig/network-scripts/ifcfg-eno16777736文件的链接文件】
四、文件内容操作命令
1、cat
cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。
[root@heikouzhao ~]# cat /proc/version 【查看版本信息】
Linux version 3.10.0-123.el7.x86_64 (mockbuild@x86-017.build.eng.bos.redhat.com) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Mon May 5 11:16:57 EDT 2014
2、more和less
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:
- 按Space键:显示文本的下一屏内容;
- 按Enier键:只显示文本的下一行内容;
- 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式;
- 按H键:显示帮助屏,该屏上有相关的帮助信息;
- 按B键:显示上一屏内容。 按Q键:退出rnore命令。
less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
[root@heikouzhao ~]# more /proc/cpuinfo 【分页查看CPU信息】
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i3-5005U CPU @ 2.00GHz
stepping : 4
microcode : 0x1f
cpu MHz : 1995.383
--More--(0%) 【可翻页】
3、head和tail
head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。常见选项如下:
- -n<数字>:指定显示头部内容的行数;
- -c<字符数>:指定显示头部内容的字符数;
- -v:总是显示文件名的头信息;
- -q:不显示文件名的头信息。
tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。 注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1048576(1M)。
[root@heikouzhao ~]# head -3 /etc/passwd 【查看passwd文件前3行】
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@heikouzhao ~]# tail -n 5 /etc/passwd 【查看passwd文件最后5行】
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
garden:x:1000:1000:garden:/home/garden:/bin/bash
heikouzhao :x:1001:1001::/home/heikouzhao :/bin/bash
lin:x:1002:1002::/home/lin:/bin/bash
[root@heikouzhao ~]# tail -f /var/log/messages 【可实现实时查看更新日志,默认为10行】
May 17 14:46:48 heikouzhao NetworkManager[1076]: <info> nameserver '192.168.136.2'
name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
May 17 14:46:48 heikouzhao systemd: Started Network Manager Script Dispatcher Service.
May 17 14:50:01 heikouzhao systemd: Starting Session 43 of user root.
May 17 14:50:01 heikouzhao systemd: Started Session 43 of user root.
4、wc
wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。常见选项如下:
- -c:统计文件内容的字节数;
- -l:统计文件内容的行数;
- -w:统计内容中的单词个数。
[root@heikouzhao ~]# wc /etc/passwd 【统计passwd文件信息】
40 68 1990 /etc/passwd
[root@heikouzhao ~]# wc -c /etc/passwd 【统计passwd文件字节数】
1990 /etc/passwd
[root@heikouzhao ~]# wc -l /etc/passwd 【统计passwd文件行数】
40 /etc/passwd
[root@heikouzhao ~]# wc -w /etc/passwd 【统计passwd文件单词数量】
68 /etc/passwd