linux文件属性和类型

Linux文件属性和类型

1.linux文件属性

第一种查看方式

[root@beua ~]# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg

-rw-------.    ①:第一个字符是文件类型,其他则是权限
1           ②:硬链接次数
root        ③:文件属于哪个用户
root        ④:文件属于哪个组
4434         ⑤:文件大小
May30 13:58    ⑥⑦⑧:最新修改的时间与日期
ks.cfg       ⑨:文件或目录名称

2.linux文件类型

-rwxr-xr-x. 1 root root 117680 Oct 31 03:16 /bin/ls
srw-rw-rw-. 1 root root 0 Apr 3 16:57 /dev/log
brw-rw----. 1 root disk 8, 0 Apr 3 16:57 /dev/sda
crw--w----. 1 root tty 4, 1 Apr 3 16:57 /dev/tty1
lrwxrwxrwx. 1 root root 22 Mar 28 03:33 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 Apr 1 18:09 /etc/hosts
prw-------. 1 root root 0 Apr 3 16:57 /run/dmeventd-client
drwxrwxrwt. 22 root root 4096 Apr 3 20:57 /tmp

#最前面那个字母含义:

- 通常指的是文件 s socket文件(mysql) b block 块设备(磁盘分区光盘) c 字符设备 l 链接文件(呈现浅蓝色) p 管道文件 d 目录文件(呈现蓝色状态)

第二种查看方式:

当无法通过ls -l的属性识别该文件是什么类型时,可以通过file进行查看

我们会将文件标注对应的后缀. .txt .sh .mp3 .mp4 .exe .zip Linux的文件加上后缀能够便于我们快速的识别.这个文件是什么类型.

3.linux系统链接文件

#软链接使用场景 1.软件升级 2.企业代码发布 3.不方便目录移动

#先执行删除,然后执行ln操作, && (&&前面的命令执行成功,则立即执行&&后面的命令)

[root@beua ~]# rm -f /root/qq && ln -s /root/qq_v1.2/ /root/qq  #版本升级
[root@beua ~]# rm -f /root/qq && ln -s /root/qq_v1.1/ /root/qq

4.硬链接与软链接区别

1)ln命令创建硬链接,ln -s命令创建软链接。

2)目录不能创建硬链接,并且硬链接不可以跨越分区系统。

3)目录软链接特别常用, 并且软链接支持跨越分区系统。

4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。

5)删除软链接文件,对源文件及硬链接文件无任何影响。

6)删除文件的硬链接文件,对源文件及链接文件无任何影响。

7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效。

8)删除源文件及其硬链接文件,整个文件会被真正的删除。

总结: 软链接就是快捷方式,不同的inode同时指向同一个block,删除软链接,源文件没有任何影响,删除源文件则软链接失效.

硬链接是多个相同的inode指向同一个block,其实就是用于给文件做备份.(只有删除所有文件,硬链接才会失效)

*当前的磁盘空间还剩余500GB,但就是无法往里面写入数据.
No space left on device 要不是真的没有磁盘空间(),要么就是inode被占满

5.linux命令执行流程(扩展)

⑴ping 探测对端主机是否存活

1) 命令是否通过绝对路径执行

2) 命令是否存在alias别名

3) 用户输入的是shell内置命令还是外置命令 type -a

4) Bash内部命令直接执行,外部命令检测是否存在缓存

5) 查找系统全局$PATH,变量中保存的全部都是命令存放的路径,有执行,无报错command not found

⑵什么是内部命令,什么是外部命令

内部命令: shell程序自带的命令。 外部命令: 在系统PATH变量的某个路径下的可执行程序。

⑶如何检查用户输入的命令是内部命令还是外部命令

cd命令属于shell内部命令

type -a cd
cd is a shell builtin
cd is /usr/bin/cd

#ping属于外部命令, 同时会打印当前命令路径

type -a ping
ping is /bin/ping
⑷如果是外置命令,Bash可以通过查找PATH变量,获取该命令的绝对路径。

打印当前环境变量目录:

[root@beua ~]# echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PS: PATH由多个路径组成,每个路径值之间用冒号间隔,对这些路径的增加和删除操作都将影响到Bash解释器对Linux命令的查找

⑸如果是外置命令还会涉及到一个内存缓存,也就是说,当我们出现重复执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。
表缓存命令所在位置
[root@beuai ~]# hash
hits command
1 /usr/bin/tty
3 /sbin/ifconfig
已缓存命令,如果移动位置会导致无法找到该命令
[root@beua ~]# mv /sbin/ifconfig /bin/
[root@beua ~]# ifconfig
-bash: /sbin/ifconfig: No such file or directory
删除缓存过的ifconfig命令, 即可执行
[root@beua ~]# hash -d ifconfig
[root@beua ~]# ifconfig
#当然可以清空缓存表
[root@beua ~]# hash -r
#注意: 命令缓存hash需要注意如下情况:

1.只要执行外部命令1次就会对该命令进行缓存

2.如果将命令移动了位置,该如何执行

a.使用绝对路径执行

b.删除hash表的缓存指令

总结: 命令执行的流程

1) 检查执行的命令是否使用的是绝对路径执行的。

2) 检查ping命令是否存在alias别名

3) 检查ping命令是内部命令还是外部命令

4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取

5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置

6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

6.符号: 通配符

.     #代表当前目录,但文件名以点开头则代表隐藏文件 如果在grep时,使用.代表匹配任意的单个字符 
..     #代表上一级目录, 上级目录的inode和..的inode是一致(硬链接) /usr/local cd ..
~     #回到当前用户的家目录
*     #所有
    #转义字符
#     #命令行是不执行命令,但会保留在history中,文件中有#代表不执行
$()    #小括号中必须是命令,与其类似的还有 ``
>     #标准重定向,会覆盖文件的内容
^     #在匹配字符的时候,以什么开头
$     #在匹配字符的时候,以什么结尾
|      #将左边命令的输出,交给右边命令的输入
||     #前者命令执行不成功,后者命令执行
&&     #前者命令执行成功,后者命令则执行
!      #调用历史history中的命令 !Number !string
!!     #调用上一次执行的命令

 

原文地址:https://www.cnblogs.com/longren/p/10735096.html