一. bash shell 对文件的管理
谈到Linux的文件管理,我们要知道,能对文件做些什么事情?
创建,复制,移动,查看,编辑,压缩,查找,删除,等等
二.系统的目录结构
几乎所有的计算机操作系统都是使用目录结构组织文件。就像一个目录中存放子目录和文件,而子目录中进一步存放子目录和文件,以此类推,达到一个树的结构。所以又称为目录树
就像Windows系统,我们要打开一个很深的文件,就需要先找到c盘,然后在找到c盘里的目录,在找到目录的子目录等等等,直到找到。
不同的是:Windows是多根的结构,
会分c:\ d:\
而Mac 和Linux的都是单根结构 /
/var/tmp:是存放在可变目录下的,是一个假的目录。而/usr/tmp是系统下的目录,是一个真目录。他俩之间是链接关系,相当于/var/tmp 是一个快捷键。可以查看
注:/ 是一个目录,是主目录
1.存放命令的相关目录
事实上我们所执行的命令,都是放在了 /bin /sbin 目录中 )
ls cat cd 等的命令
我们通过which进行查找会发现都在/usr/bin/ls
/bin = /usr/bin (相当于是快捷键)
/bin, 普通用户使用的命令 /bin/ls, /bin/date
/sbin(star bin),超级管理员使用的命令 /sbin/shutdown, /sbin/reboot
区别:超级管理员是可以对系统做一些特殊操作的,比如关机(是需要很高的权限的),比如重启。
就像添加一个用户,就相当于对系统做一个变更,强求为这个系统添加一个用户进来了,所以就需要用超级管理员的身份,也是在/sbin/useradd
那么在Windows里,也是如此,比如查看qq。
相当于,我们在桌面打开qq快捷方式,实际调用的是在bin目录里的一个qq程序
(看到bin,多半都是存放命令或者程序)
2.存放用户相关数据的家目录
比如:windows不同的用户登陆系统显示的桌面背景不一样
/home,普通用户的家目录, 默认为/home/username 平民
/root,超级管理员root的家目录, 普通用户无权操作 皇帝
每一个普通用户都有自己的家目录。并且自己的家目录别人是看不了的,就像你家的东西别人是不知道的,它没有权利进去。
但是超级管理的家目录就是皇帝,它有权利去到你家查看,但是你没权利去到皇宫查看
家目录里,会存放一些跟环境相关的一些文件。会去帮你初始化一些相关的文件。
就像你自己的家会做一些最简单的装修一样。
3.系统文件目录. (不能动)
/usr,相当于C:\Windows(系统文件,不能随便动的)
/usr/local,软件安装的目录,相当于C:\Program Files.
(Windows装软件,一般都是默认装在了c盘的program) #以前都喜欢把软件安装在/usr/local
/usr/bin, 普通用户使用的应用程序(重要)
/usr/sbin,管理员使用的应用程序(重要)
/usr/lib, 库文件Glibc 32bit 汽车的螺丝
/usr/lib64,库文件Glibc 64bit 汽车的螺丝
4.启动目录( 很重要 不能删 )(只存放内核和菜单引导)
/boot 存放的系统启动相关的文件,例如:kernel(内核),grub(引导装载程序)
简单讲:boot翻译是启动的意思,所以/boot存的都是在启动系统时,需要加载的文件。
grub( 告诉你 有哪些内核,你可以选择需要加载的那一个)
vmlinuz-3.10.0-957.12.2.el7.x86_64 正常的系统内核
vmlinuz-0-rescue-93f219319dd5bdb42d9f1c8f2e23d329 系统的救援内核
5.配置文件目录(就像我们拿到一个软件,对它做一些配置,它就可以正常使用了。)
/etc,极其重要,后续所有服务相关的配置都在这个目录中
/etc/sysconfig/network-script/ifcfg-ens33,网络配置文件
/etc/hostname,系统主机名配置文件
/etc/resolv.conf,dns客户端配置文件
6.可变的目录与临时目录
(就像我们每一次登陆服务器都是会被记录下来的)
/var,存放一些变化文件,比如/var/log/下的日志文件
/var/tmp,进程产生的临时文件
/tmp,系统临时目录(类似于公共厕所)
7.设备目录文件
/dev,存放设备文件,比如硬盘,硬盘分区,光驱,等等
/dev/null,黑洞设备,只进不出。类似于垃圾回收站
/dev/random,生成随机数的设备
/dev/zero,能源源不断的产生数据,类似于取款机,随时随地取钱
8.虚拟的文件系统 (如对应的进程停止则/proc下对应目录则会被删除)
/proc,能实时反应当前系统正在运行进程的状态。并且可以实时查看
PS:类似于汽车在运行过程中的仪表板,能够看到汽车的油耗、时速、转向灯、故障等等
还有不经常用的:
media 挂载我们的u盘、或者其他设备
mnt 挂载我们的u盘、或者其他设备
opt 三方厂商oracle gitlab
run 包含系统运行时所需要的文件。以前 /var/run
srv 服务启动后需要访问的数据目录。使用很少| saltstack
sys sys和proc一样是虚拟文件系统,记录核心系统硬件信息。
三.文件路径定位
/etc/hostname
位置 文件名称 => 路径 ==>其实就是对文件定位的一种方式。
/var/log/message 定位这个文件所在的路径的一种方式。
提问FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一个文件? 不是
提问FQ: /abc/test 和 abc/test 是一样的吗?是
cat /abc/test 绝对的路径 (我必须从/ 开始走)
cat abc/test(有可能查不到,如果没有在/下就看不了) 相对的路径(我已经在根下了。然后直接往下走就可以了。
(root在根下,所以要先回到/,在去/abc)
绝对路径: 以 / 开头的 都叫绝对路径
相对路径: 不以 / 开头的
1.绝对路径与相对路径?
绝对路径: 只要从/开始的路径,比如/home/alice/file
相对路径: 相对于当前目录来说,比如 a.txt ./a.txt ../bob/a.mp3
-
. 和 ..的是什么意思?
一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。
假设当前目录在/usr/下, 那么它的上层(/)目录用../表示, 而/usr/的下层(local)目录则用./local表示。
小结: 所谓的(.)和(..)目录实际上属于相对路径的一种表示形式。
绝对路径
[root@bgx /]# useradd Alice
[root@bgx /]# ls /home/Alice/file1
[root@bgx /]# ls ~/file2 ~ = /root/file
[root@bgx /]# ls ~/Alice/file3
相对路径
[root@bgx /]# mkdir abc #在当前目录下创建一个abc的文件夹 (文件夹也叫目录)
[root@bgx /]# ls ../file3 #查看当前我所在目录的上一级目录下的file3文件
[root@bgx /]# ls file4 #查看当前我所在目录下的file4文件
[root@bgx /]# ls abc/file5 #查看当前我所在目录下的abc目录下的file5文件
示例1:
[root@oldboy ~]# cd /tmp
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd
示例2:
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd ~
[root@oldboy ~]# pwd
/root
示例3:
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd .
[root@oldboy tmp]# pwd
/tmp
示例4:
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd ..
[root@oldboy /]# pwd
/
示例5:
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd
[root@oldboy ~]# pwd
/root
[root@oldboy ~]# cd -
/tmp
[root@oldboy tmp]# pwd
/tmp
[root@oldboy tmp]# cd -
/root
示例6:
公司(tmp) -->超市(usr) --> 家(root)
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# cd /usr/
[root@oldboy usr]# cd
[root@oldboy ~]# cd -
/usr
[root@oldboy usr]#