一,文件属性
ll -h:我们常用这个命令来查看当前目录下的文件的属性。
[root@Fang ~]# ll -h
total 40K
-rw-------. 1 root root 1.6K Jul 19 13:35 anaconda-ks.cfg
-rw-r--r--. 1 root root 25 Jul 29 21:38 fang.txt
-rw-r--r--. 1 root root 24 Jul 29 22:10 file
-rw-r--r--. 1 root root 11 Jul 29 23:17 file1
-rw-r--r--. 1 root root 48 Jul 29 23:39 file2
-rw-r--r--. 1 root root 744 Apr 2 14:57 ip.txt
# 每一列的第一个字符表示该文件的类型
# rw-r--r-- 表示该文件的权限
# 1 表示该文件被链接的次数
# root 该文件的用户(拥有者)
# root 该文件的拥有组
# 1.6k 该文件的大小
# Jul 19 13:35 该文件的日期,以及创建的时间
# anaconda-ks.cfg 表示文件的名称
二,文件类型
[root@Fang ~]# ll -d /etc/hosts /tmp /bin/ls /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log
-rwxr-xr-x. 1 root root 117680 Oct 31 2018 /bin/ls
srw-rw-rw-. 1 root root 0 Jul 31 14:48 /dev/log
brw-rw----. 1 root disk 8, 0 Jul 31 14:48 /dev/sda
crw--w----. 1 root tty 4, 1 Jul 31 14:49 /dev/tty1
lrwxrwxrwx. 1 root root 22 Jul 19 13:49 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
drwxrwxrwt. 21 root root 4096 Jul 31 14:49 /tmp
以上是Linux中很典型的几个文件类型,他们分别表示
# - 文件(无法区分具体的文件,图片,压缩包)
# s 本地进程与进程间的一种通信方式
# b 块设备文件 (硬盘 光盘 分区一类的)
# c 字符设备 用于提供用户的输入与输出
# l 链接文件 类似于Windows的快捷方式
# d 目录 类似于Windows的文件夹
刚才“-”表示文件 但是他不能具体的分别出来到底是什么文件,这时候我们就要用到file这个命令了。
[root@Fang ~]# file ip.txt
ip.txt: ASCII text
[root@Fang ~]# file oldboy/
oldboy/: directory
[root@Fang ~]# file test.txt
test.txt: ASCII text
这样我们就能很清晰的分辨一个文件是文本还是图片,还是可执行程序,压缩包啊什么的。
注意:Linux不区分文件的后缀名,通常都是创建者自己加上去的,为了方便自己以后分辨。
二,链接文件
链接文件分两种:软连接,硬链接(几乎用不到)。
如何创建一个软连接,我们要用到这条命令
ln -s (源文件的位置) (我们做的软连接的名称及路径)都是绝对路径
我们一般不对文件做软链接。经常用到软链接的几个场景:1,软件升级 软件退回:具体思路就是将我们要升级的文件做个软连接 来替换旧版本 并且同时删除旧版本的软链接。
2,代码升级 秒级回退:思路同上
3,不方便移动的目录:我们遇到一些比较大的文件的时候,不方便移动,或者比较重要的文件的时候,我们就给他做一个软链接,来指向他。
硬链接:创建硬链接 用法跟软链接差不多 硬链接不用-S 这个选项
软链接与硬链接有什么不同呢?
1)ln命令创建硬链接,ln -s命令创建软链接
2)目录不能创建硬链接,并且硬链接不可以跨越分区系统
3)目录软链接特别常用,并且软链接支持跨越分区系统
4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同
5)删除软链接文件,对源文件及硬链接文件无任何影响。
6)删除文件的硬链接文件,对源文件及链接文件无任何影响
7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效
8)删除源文件及其硬链接文件,整个文件会被真正的删除
9)软连接就是一个快捷方式,删除软连接不会影响源文件
10)硬链接,类似于一个文件副本,删除硬链接不影响原文件,只有删 除所有的硬链接及其源文件,这个文件才算彻底被删除
命令执行流程
1.判断命令是否通过绝对路径执行 (是绝对路径,就直接输出了 如果不是就会进行下一步)
2. 判断命令是否存在alias别名
3. 判断用户输入的是内置命令还是外置命令
4. Bash内部命令直接执行,外部命令检测是否存在缓存
5. 通过$PATH变量查找命令,有执行,无报错 command not found
绝对路径-->alias--->hash缓存-->$PATH变量路径--->有执行--->没有 command not found