一、七种不同Linux文件的表示
-
d 目录文件directory
-
b 块设备文件block 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
-
c 字符设备character 这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用; 一个字符一个字符读取 /dev/zero (/dev/null)
-
l 符号链接文件link
-
p 管道文件pipe 主要用于进程间通信单向传输, 一个只读、另一个只写 ,其主要作用是解决多个程序同时存取一个文件所造成的错误。
-
s 套接字文件socket 套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信。(可以双向)
-
-普通文件 普通文件,包括纯文本文件、二进制文件、各种压缩文件等
1.1 字母表示的含义
| d | 目录 |
|---|---|
| -: | 普通文件 |
| l: | 链接文件 |
| b: | 块文件,block 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。 |
| c: | 字节文件,这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用; 一个字符一个字符读取 /dev/zero (/dev/null |
| p: | 管道文件pipe 主要用于进程间通信单向传输, 一个只读、另一个只写 ,其主要作用是解决多个程序同时存取一个文件所造成的错误。 |
| s: | 套接字文件socket 套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信。(可以双向) |
1.2 不同文件颜色表示的含义
- 黑色:普通文件
- 蓝色:文件夹
- 天蓝色:链接文件
- 绿色:可执行文件
- 红色:压缩文件
- 黄色 块设备文件
二、Linux 基本命令
2.1 cd命令
cd,全称 change directory,改变目录
| 用法 | 功能 |
|---|---|
| cd - | 切换到上一次执行操作的目录 |
| cd ~或 cd | 返回家目录 |
| cd / | 返回根目录 |
| cd …(两个点)或 cd …/ | 返回上一级目录 |
| cd .或者cd ./ | 保持在本目录 |
- 绝对路径:绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
- 相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
2.2 pwd命令
pwd,全称 print working directory,显示工作目录的路径名称。
比如:cd /etc/sysconfig/network-scripts;pwd
2.3 ls(list)命令详解
| -l: | 以长格式(Long)显示文件和目录的列表 ,ll=ls -l |
|---|---|
| -a: | 显示所有(All)子目录和文件的信息,包括“.“和”…“* * |
| -A: | 与-a选项的作用基本类似,但有两个特殊,隐藏目录不会显示,“.“和”…“ |
| -d | 显示目录(Directory)本身的属性,而不是显示目录中的内容 |
| -h: | 以更人性化(Human)的方式显示出目录或文件的大小,此选项需要结合-l选项一起使用 |
| -R: | 以递归(Recursive)的方式显示指定目录及其子目录中的所有内容 |
- -l∶以长格式(Long)显示文件和目录的列表
- -a:显示所有(AlI )子目录和文件的信息包括“.“和”..“
- -A:与-a选项的作用基本类似,但有两个特殊隐藏目录不会显示,“.”和".."
- -d :显示目录(Directory )本身的属性,而不是显示目录中的内容
- -h:以更人性化(Human)的方式显示出目录或文件的大小,此选项需要结合-I选项一起使用(显示文件大小的单位)
- -R:以递归( Recursive )的方式显示指定目录及其子目录中的所有内容
2.4 通配符
| 符号 | 效果 |
|---|---|
| ? | 匹配一个字符 f?.txt |
| * | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
| {1..10} | 1到10 |
| {a..z} | a b c ...z |
| {A..Z} | A B C .....Z |
| [123] | 取其中之一有就显示没有也无所谓 |
| [a-z] | 范围需要注意 (表示从aA、bB到z,不含Z) |
| [0-9] | 匹配数字范围(0123456789) |
| \ | 转义符,表示原来的意思 |
| [[:lower:]] | 小写字母表示 a-z |
| [[:upper:]] | 大写字母表示 A-Z |
| [^yao] | 匹配列表中的所有字符以外的字符 |
| [[:digit:]] | 任意数字,相当于0-9 |
- ? : 匹配一个字符 f?.txt
- 2.* : 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件
[root@localhost opt]# ls -a *.txt //不包含隐藏文件
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
[root@localhost opt]# ls -a //包含隐藏文件
. .. 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt rh
- {a..z}、{A..Z} 、{1..10} 表示两个数值之间的都取到
- 例子:[a-z]、[1-10] 取其中之一,没有也无所谓
- \ :转义符,表示原来的意思
- [[:lower:]] 匹配小写字母
- [[:upper:]] 匹配大写字母
- [ ^yao] :匹配列表中的除字符以外的
2.5 alias
临时修改(关机或退出终端会自动消失)
- alias 命令别名 = ’命令‘
- unalias 别名命令 删除别名
- \加别名命令 (显示原始命令) alias,中文意思为别名,在Linux中可以使用alias命令来为比较繁琐的命令进行简化,就比如,我需要修改网卡信息,如果不使用alias命令,你需要在终端上敲 vim /etc/sysconfig/network-scripts/ifcfg-ens33,这对于初学者来说,算是比较长的命令了,不好记住,这时我们可以用alias命令对上面这条命令进行简化,就比如,我将修改网卡信息的命令使用myvim,那我们可以这样做: 先定义: alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33' 执行:my vim 就可以了
[root@localhost opt]# myvim
[root@localhost opt]# ls
10.txt 7.txt c.txt F.txt j.txt M.txt q.txt t.txt W.txt
1.txt 8.txt C.txt g.txt J.txt n.txt Q.txt T.txt x.txt
2.txt 9.txt d.txt G.txt k.txt N.txt rh u.txt X.txt
3.txt a.txt D.txt h.txt K.txt o.txt r.txt U.txt y.txt
4.txt A.txt e.txt H.txt l.txt O.txt R.txt v.txt Y.txt
5.txt b.txt E.txt i.txt L.txt p.txt s.txt V.txt z.txt
6.txt B.txt f.txt I.txt m.txt P.txt S.txt w.txt Z.txt
[root@localhost opt]# \ls //使用原本的命令,在命令前加转义符
ls: 无法访问//使用原本的命令,在命令前加转义符: 没有那个文件或目录
[root@localhost opt]# \ls
10.txt 7.txt c.txt F.txt j.txt M.txt q.txt t.txt W.txt
1.txt 8.txt C.txt g.txt J.txt n.txt Q.txt T.txt x.txt
2.txt 9.txt d.txt G.txt k.txt N.txt rh u.txt X.txt
3.txt a.txt D.txt h.txt K.txt o.txt r.txt U.txt y.txt
4.txt A.txt e.txt H.txt l.txt O.txt R.txt v.txt Y.txt
5.txt b.txt E.txt i.txt L.txt p.txt s.txt V.txt z.txt
6.txt B.txt f.txt I.txt m.txt P.txt S.txt w.txt Z.txt
[root@localhost opt]# unalias myvim
[root@localhost opt]# myvim
bash: myvim: 未找到命令...
(注:=前后不要有空格,不然会报错;alias不是永久生效的,当你将终端关闭后再打开,或者重启系统后,都会失效,要想永久生效,就需要修改系统的配置文件,)
- 在/etc/.bashrc 会影响全部
- /root/.bashrc只影响当前用户
当定义了一个别名的时候,各种类型的命令优先级就会发生变化,其优先级依次为:别名 > 内部命令 > Hash > 外部命令
2.6 du ( disk usage)命令详解
用于统计指定目录(或文件)所占用磁盘空间的大小,du命令常用的几个选项如下: 选项 说明
| du: | 统计目录 |
|---|---|
| du -a:录下的所有文件 | 不仅统计当前目录,还统计当前目录下的所有文件 |
| du -h: | 人性化统计 ,人性化的显示了单位 |
| du -s: | 只统计当前目录所占用空间的大小,而不是统计每个子目录、文件的大小 |
-
du :只统计当前目录
-
-a:统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录(包括文件的总和大小)
- -h :以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果
- -S:只统计所占用空间总的( Summary )大小,而不是统计每个子目录、文件的大小
注意:
- -a -s无法同时使用
- 每个磁盘分块,每块(4K)只能存一个文件,当文件不足4K时,du统计也会按4K计算。
2.7 touch命令
创建空文件,用于测试
- touch test
当目标文件已存在时,将更新该文件的时间标记
- touch test
2.8 创建空文件文件三种方式
touch 1.txt
vim 2.txt
echo“ ”>3.txt
2.9 mkdir ( make directory )命令
作用:创建新目录
格式 mkdir [选项] 目录位置及名称..
[选项]中填入 -p(parent):一次性创建嵌套的多层目录
目录位置及名称:一般是相对地址
示例:
- 在当前目录下创建名为111的子 目录
- mkdir 111
- 创建目录/aa,在/aa目录下创建子目录bb,在/aa/bb目录下创建子目录cc
- mkdir -p /aa/bb/cc
2.10 创建链接文件 ln(link)
如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象,本质上会分配一个inode给我们用,inode记录的信息有:文件的block位置,文件的UID,文件的GID,文件的读写执行权限等等,下面我们新建立一个名为file的文件。
实际上file在我们系统中存在的样子更加形象的可以用下面的图片来表示:
file只是个名字,我们可以用mv命令更改这个名字,它只是让我们用户好记,并且从我们的角度为它分配某些含义而已(比如我们习惯将密码文件命名为passwd)。
2.10.1硬链接
硬链接实际上是一个文件inode的别名,我们可以为一个inode起很多个名字,同时让file和changefile存在也是可以的,就是建立硬链接,因为文件名不会对文件本身产生影响。
ln 命令可以用来建立链接,不加参数表示建立硬链接。
-s:建立软链接。 下面我们给changefile建立硬链接file
通过ls -i命令查看inode我们发现它们是一样的,那么目前的情况会是怎样呢?如下:
只不过就是此inode有两个名字了而已,我们通过任意一个文件名查看或者修改文件的内容,都会直接查看或者修改blocks块中1,2,3的内容,并且file和changefile之间是不会互相影响的,我们删除任何一个对对方没有任何影响,大不了就是inode少一个名称而已。
2.10.2软连接
与硬链接不同,软链接相当于快捷方式,当我们双击一个图标打开一个软件时,本质上是在执行一个.exe文件一样,通过这个图标只能找到这个.exe文件,执行的过程是.exe完成的,如果.exe找不到,那么这个快捷方式将会失效。因此在Linux中的软链接实际上是另一个文件,这个文件与原文件是不同的,唯一的特殊之处就是它的内容记录的是原文件的inode号,我们通过inode号再来找原文件的位置。
明显,softlink和changefile就是不同的文件。它的详细情况就像下面这样:
我们通过softlink会找到inode1的位置,然后通过它定位文件的block,因此,如果一旦inode1被删除了,那么softlink就会无法找到文件,也就是这个软链接会失效。我们删除changefile试试看:
[root@localhost opt]# cat file changefile softlink // 三个文件中都有hello
hello
hello
hello
[root@localhost opt]# rm -fr file //删除了file
[root@localhost opt]# cat softlink //由于目前changefile还存在,inode号还存在,因此softlink是有效的
hello
[root@localhost opt]# rm -fr changefile //删除changefile
[root@localhost opt]# cat softlink //目前softlink 再也找不到原来的inode位置,因此失效了。
cat: softlink: 没有那个文件或目录
[root@localhost opt]#
- 软硬链接的对比 对比项 | 硬链接 | 软连接 | | ----- | ------------------------ | ----------- | | 本质 | 本质同是一个文件 | 本质不是一个文件 | | inode | 相同 | 不同 | | 连接数 | 创建新连接,连接数会增加,删除链接,连接数会减少 | 删除新建不会改变 | | 文件夹 | 不支持 | 支持 | | 删除源文件 | 只是链接数减1,但链接的访问不受影响 | 无法访问链接文件 | | 文件类型 | 和源文件相同 | 链接文件,和源文件无关 | | 文件大小 | 和源文件相同 | 源文件路径长度
2.11 cp ( copy )
-
作用
复制文件或目录
-
格式
cp [选项] 源文件或目录 目标文件或目录 (目的目录后跟名字,相当于重命名)
-
需要复制多个文件或目录时,目标位置必须是目录,而且目标目录必须已经存在。cp命令较常用到的几个选项如下: -f: | -f:覆盖目标同名文件或目录时不进行提醒,而直接强制(Force)复制 | | ------- | ----------------------------------------------------- | | -i:|-i:覆盖目标同名文件或目录时提醒用户确认(Interactive ,交互式)(i的优先级高于f) | | -p: | -p:复制时保持(Preserve)源文件的权限、属主及时间标记等属性不变 | | -a: | -a:和p的功能差不多,不过比p功能更强大,可以复制软连接 | | -r: | -r:复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
- 案例一:如果对同一个文件连续复制三次,第一次复制 可以改名;第二次复制 将变成改名后的子目录,第三次复制 覆盖了,问是否覆盖
[root@localhost data]# cp -r /etc/ /opt/ //复制目录需要加-r
[root@localhost data]# cp -r /etc/ /opt/etc.bak //复制并改名
[root@localhost data]# cp -r /etc/ /opt/etc.bak //复制后变成etc.bak 的子目录
[root@localhost data]# cp -r /etc/ /opt/etc.bak //目录内有相同名称子目录,系统会询问要不要覆盖,cp是别名 加\cp 直接覆盖
2.12 rm ( remove )
-
作用:删除指定的文件或目录
-
格式
rm [选项] 要删除的文件或目录…
-
常用选项 -f: | -f:不提醒,直接强制删除 | | --- | ------------- | | -i: | -i:提醒用户确认 | | -r: | -r:递归删除整个目录树
4.示例
直接删除root目录中test1目录树
- -rm -rf test1(实操中极度危险命令)
以提示确认方式删除public_html目录中apg.conf 文件
- -rm -i public_html/apg.conf
2.13 mv ( move )
1、作用
- 将指定的文件或目录转移位置
- 如果目标位置与源位置相同,则相当于执行重命名操作
2、格式
- mv [选项] 源文件或目录 目标文件或目录
3、例子
1、把当前目录中111程序文件改名为222
- mv 111 222
2、将222文件移动到已存在的目录mnt中,文件名保持不变
- mv 222 /mnt/mv
区分:若在目录的文件;cp 需要递归;MV不需要。
2.13 which
1、作用:查找Linux命令程序所在的位置
2、格式
- which 命令 | 程序名 (命令或者程序名)
3、示例
- which ls
4、注意
- which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
- 默认当找到第一个目标后不再继续查找
- 若在所有搜索路径中查找,加“-a”选项
- 无法查找内部命令所对应的程序文件
例如: which cd
which is(没有该命令)
2.14 find
1、作用
精细查找文件或目录
2、格式
- find [查找范围] [查找条件表达式] [处理动作](一般隐藏,默认为print)
3、常用查找条件
- 按名称查找:“-name"
- 按文件大小查找:“-size"
- 按文件属主查找:“-user"
- 按文件类型查找:“-type"
例1、name的使用
1、-name :根据目标文件的名称进行查找,允许使用“*”、“?”通配符
2、示例
- 递归查找/etc目录中名称以“resol”开头、以“.conf”结尾的文件
find /etc -name "resol*.conf"
例2、size的使用
1、-size:根据目标文件的大小进行查找,一般使用“+”、“”号设置超过或小于指定的大小作为查找条件。常用的容量单位包括kB(注意k是小写)、MB、GB
2、示例
查找/boot目录中超过10MB的文件
- find /boot -size +10M
例3、user的使用
-user:/home是非管理员用户的家目录,管理员用户的家目录在/root
-nouser是找一个没有主人的文件夹,如果删了lsi。lisi文件夹就变成没了主人的文件夹
例4、type的使用
1、-type:根据文件的类型进行查找,类型指的是普通文件(f:file)、目录(d:directory)、块设备文件(b:block )、字符设备文件(c:character)等
- 块设备指的是成块读取数据的设备(如硬盘、内存等)
- 而字符设备指的是按单个字符读取数据的设备(如键盘、鼠标等)
2、示例
- 查找/boot目录中所有的子目录
find /boot -type d
4、多条件查找
1、同时使用多个查找条件时,各表达式之间可以使用逻辑运算符“-a”、“-o”,分别表示而且( and )、或者(or )
2、示例
查找/boot目录中超过1MB和(或)名称以vm开头的所有文件
- find /boot -size +1M -a -name "vm“
- find /boot -size +1M -o -name "vm"
5、[处理动作]祥解
- print:默认的处理动作,显示至屏幕
- 1s:类似于对查找到的文件执行"1s -dils"命令格式输出
- fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于-ls > file
- delete:删除查找到的文件,慎用!
- ok commmand { };对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
- exec commmand { } ;对查找到的每个文件执行由COMMAND指定的命令{ }:用于引用查找到的文件名称自身
[root@1oca7host opt]# find -name "*.txt" -ok mv {} /mnt \;
[root@1oca7host opt]# find -name "*.txt" -exec mv {} /mnt \;
列一,-print
列二,-ls
列三,-ls > file
列四,-delete
列五,-ok
列六,-exec
六、反向查找,使用-not或!
2.15 dd命令
2.16 hash命令
hash命令负责显示与清除命令运行时系统优先查询的哈希表(hash table)。
当执行hash命令不指定参数或标志时,hash命令向标准输出报告路径名列表的内容。此报告含有先前hash命令调用找到的当前shell环境中命令的路径名。而且还包含通过正常命令搜索进程调用并找到的那些命令。
命令选项:
| 选项 | 说明 |
|---|---|
| -d<指令> | 在哈希表中清除某个命令记录 |
| -r | 清除哈希表中的所有记录 |
| -l | 显示哈希表中的命令 |
| -p<指令> | 将具有完整路径的命令加入到哈希表中 |
| -t<指令> | 显示哈希表中命令的完整路径 |
将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉hash值之后 ,才可以继续使用。
命令执行顺序:先找[hash]缓存,再找内部命令,再找外部命令
例如:ls命令在缓存中有这条,我将这条命令从缓存中删掉后,执行ls这个程序的时候就会找内部命令,因为ls属于外部命令,所以内部命令找不到,最终在外部命令找到ls程序,并执行。
三、总结
Linux常用命令
- 查看及切换目录(pwd、 cd、 Is、 du)
- 创建目录和文件(mkdir、 touch、 In)
- 复制、删除、移动目录和文件(cp、 rm、 mv)
- 查找目录和文件(which、 find)