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
!! #调用上一次执行的命令