Linux-4 文件管理
文件管理概述
谈到Linux文件管理,首先我们需要了解的是,我们要对文件做些什么事?其实无非就是对一个文件进行创建,复制,移动,查看,编辑,压缩,查找,删除等等。例如:当我们想修改系统的主机名称,是否应该知道文件在哪,才能去做对应的修改
系统目录结构
几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支,所以该结构又被称为目录树。
Windows以多根的方式组织文件C:\,D:\,E:\
Linux以单根的方式组织文件\
下图为centos7的目录结构:
1、配置文件目录
配置指的其实就是一种参数;技术的参数都存储在某一个文件中,将文件称为配置文件;配置文件可以变更某个软件的运行效果;
- /etc:
存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。- 修改IP地址:/etc/sysconfig/network-scripts/ifcfg-xxx
- 修改主机名称:/etc/hostname
- 修改…
- 变更完配置如何生效(根据实际情况决定):
- 修改立即生效;运行时即可生效;
- 修改后重启服务生效;
- /lib:
存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 - /sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。
2、命令目录
- /bin- ->/usr/bin:
存放着最常用的程序和命令,一般来说,普通用户和超级管理员都可以运行; - /sbin- ->/usr/sbin
存放特殊命令,只有系统管理员能使用的程序和指令,普通用户可以申请操作权限;
3、设备目录
-
/dev :
Device(设备)的缩写, 存放的是Linux的外部设备,包括键盘,光盘,磁盘,终端。注意:在Linux中访问设备和访问文件的方式是相同的,在Linux中这些称为文件。-
/dev/null:黑洞,就是存储在这个设备中的数据都会丢失;
-
/dev/random:产生随机数;
-
-
/media:
类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。 -
/mnt:
临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 -
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 -
/lost+found:
一般情况下为空的,系统非法关机后,这里就存放一些文件。
4、用户家目录
每一个用户都有自己的家;每一个家都有环境,如果破坏掉环境,那么再进入家,可能得到的结果和预期不一致;
- /root:
超级管理员的家目录,一般来说普通用户没资格进入; - /home:
普通用户的家目录(除了root以外都是普通用户);以用户的账号命名的,默认普通用户的家目录:/home/username- ->jack /home/jack
5、启动目录
-
/boot:
存储系统启动时加载的文件,比如:内核文件,grub菜单,救援内核系统等
- 如果删除目录中的文件,会造成无法启动系统;
6、临时目录
-
/tmp:
这个目录是用来存放一些临时文件的,谁都可以在这里面存储数据,但是自己的数据只能自己移除,别人无法移除;所有用户都可以看,但是不能删除;root用户既可以看,也可以删除;
7、可变目录
- /var:
是一个可变的目录,存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。- 可变:会随着系统的运行(产生一些数据,记录),而不断地发生变化;
- /var/log:存储日志;启动的日志;系统操作的日志;系统登录的日志等;
8、运行时状态目录
- /proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,记录设备(CPU,内存,磁盘)运行状态,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
9、系统目录
-
/usr:
用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录,非常重要;
- /usr/lib:存放的是库文件(共享);
- /usr/lib64:存放的是库文件(共享);
- /usr/local:存储我们字型安装软件的路径;
- /usr/src:存储安装包(安装前的软件存储的路径)
- /usr/bin:系统用户使用的应用程序与指令。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
10、扩展文件目录
- /opt:
默认是空的,我们安装额外软件可以放在这个里面。 - /srv:
存放服务启动后需要提取的数据(不用,服务器就是空)。
文件路径定位
在我们开始操作文件之前,首先需要对文件的路径进行定位。Why?你要在哪个文件下创建什么文件?你要将文件复制到什么地方?或者你要删除的文件在什么地方?比如:/etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,也就是说我们是通过路径对文件进行定位。
- 操作文件之前,需要知道这个文件的路径;路径==文件的位置;路径可以定位文件的位置;
绝对路径与相对路径
绝对路径:只要从/开始的路径都是绝对路径,比如/home/alice.file 相对路径是相对于当前目录来说。
相对路径:相对于当前你在哪个目录;/root
一般情况下,查找文件使用绝对路径:/root/abc/file.txt;如果我就在/root目录下可以使用相对:abc/file.txt
.表示当前目录,…表示上级目录
文件管理-命令
创建(mkdir-touch)
-
在根下创建linux-76目录;
[root@destiny ~]# mkdir /linux-76 [root@destiny ~]# ls / bin boot dev etc home lib lib64 linux-76 media mnt opt proc root run sbin srv sys tmp usr var
-
在linux-76目录中创建student.txt文件
#第一种,绝对路径写法: [root@destiny ~]# touch /linux-76/studen.txt #第二种,相对路径写法: [root@destiny ~]# cd /linux-76/ [root@destiny linux-76]# touch student.txt
-
希望在/linux-76目录下继续创建11/22/33/44/55
[root@destiny linux-76]# mkdir /linux-76/11/22/33/44/55 -pv mkdir: created directory ‘/linux-76/11’ mkdir: created directory ‘/linux-76/11/22’ mkdir: created directory ‘/linux-76/11/22/33’ mkdir: created directory ‘/linux-76/11/22/33/44’ mkdir: created directory ‘/linux-76/11/22/33/44/55’ #-p是递归创建 -v显示创建的详细过程
-
总结命令的使用
#创建目录命令 mkdir #-p:递归创建 #-v:显示过程 #mkdir -pv 文件目录的路径+文件目录的名称 #创建文件命令 touch #touch 文件路径+文件名称
删除(rm)
-
删除:移除文件或者目录
-
#移除/student,txt文件(原生rm没有提示;为了防止误删,增加了别名) [root@destiny linux-76]# ls / bin boot dev etc home lib lib64 linux-76 media mnt opt proc root run sbin srv student.txt sys tmp usr var [root@destiny linux-76]# rm /student.txt rm: remove regular empty file ‘/student.txt’? y [root@destiny linux-76]# ls / bin boot dev etc home lib lib64 linux-76 media mnt opt proc root run sbin srv sys tmp usr var #我们可以用 rm -f /student.txt忽略提示 #删除/linux-76目录;目录下有很多子目录,希望递归移除 [root@destiny ~]# rm -fr /linux-76/
-
总结rm使用方法:
# rm:移除文件或者目录 #-r 移除目录以及目录下的文件,并且采用递归方式 #-f force 强制删除不提示 #-i 提示是否删除;系统已为我们添加好别名,所以每次都会提示;
复制(cp)
-
给文件建立一个副本;源(要拷贝的内容)——>目录(拷贝到哪里)
-
# cp - copy files and directories # -p:保持源文件的属性在拷贝的过程中不发生变化; # -r:递归; # -i:提示; # iv:显示拷贝的过程; #语法: # cp 源文件 目标位置; # cp 源文件..源文件..目标位置; # cp 源文件a 目标位置b; #1.拷贝/etc/hosts 文件至于/tmp目录; [root@destiny ~]# cp /etc/hosts /tmp/ [root@destiny ~]# ls /tmp/ # 建议,如果目标是个目录,应该添加/ [root@destiny ~]# cp /etc/hosts /tmp #不加/是知道这个目录一定存在 [root@destiny ~]# cp /etc/hosts /tmp/ [root@destiny ~]# cp /etc/hosts /tmpqqq #预期是/etc/hosts 存储至/tmpqqq目录下,但如果目录不存在,则自动将文件存储至/目录下,并且改名为/tmpqqq #2.希望拷贝 /etc 目录 至 /tmp目录,并重新命名为etc_back; #-r 递归; [root@destiny ~]# cp -r /etc /tmp/etc_back [root@destiny ~]# ls /tmp #3.一次拷贝多个文件:/etc/hostname /etc/fastab /var /tmp /root /home ——> /backup [root@destiny ~]# cp -r /etc/hostname /etc/fstab /var/ /home/ /tmp/ /root/ /backup/ [root@destiny ~]# ls /backup fstab home hostname root tmp var #前提:/backup目录必须存在; #最后一个目录一定是目标;
移动(mv)
-
移动:将一个文件剪切到某个目录下;
-
#1.在当前用户家目录创建test目录,然后移动到/tmp目录; [root@destiny ~]# cd [root@destiny ~]# mkdir test [root@destiny ~]# mv test/ /tmp/ [root@destiny ~]# ls /tmp/test/ -d /tmp/test/ #ll=ls -l [root@destiny ~]# ls /tmp/test/ -dl drwxr-xr-x. 2 root root 6 Dec 22 16:04 /tmp/test/ #2.移动多个目录至于/tmp目录; #{a..z}集合,创建a到z的所有目录 [root@destiny ~]# mkdir {a..z} [root@destiny ~]# ls a anaconda-ks.cfg b c d e f g h i j k l m n o p q r s t u v w x y z [root@destiny ~]# mv {a..z} /tmp [root@destiny ~]# ls anaconda-ks.cfg