|
5、linux文件系统和常用文件管理命令
2021年07月01日 |
|
5.1 linux文件系统 5.1.1 file命令及其用法 file + 文件或目录:查看文件类型 可执行二进制文件格式: Windows: PE Linux: ELF 5.1.2 Linux文件系统 1、Linux文件系统的一些概念 rootfs: 根文件系统(每个文件系统都必须是根文件系统内的路径) FHS(文件系统层级标准):Linux 2、Linux文件系统目录及各目录作用 (1)/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader) [daniel@localhost share]$ ls /boot config-3.10.0-693.el7.x86_64 efi grub(引导加载器) grub2 initramfs-0-rescue-35642350c74f4b3287a0e5a8634f72ea.img initramfs-3.10.0-693.el7.x86_64.img(系统启动的系统文件) initramfs-3.10.0-693.el7.x86_64kdump.img initrd-plymouth.img symvers-3.10.0-693.el7.x86_64.gz System.map-3.10.0-693.el7.x86_64 vmlinuz-0-rescue-35642350c74f4b3287a0e5a8634f72ea vmlinuz-3.10.0-693.el7.x86_64(内核) (2)/dev: 设备文件 设备文件: 块设备:随机访问,可以随机访问任意位置的数据,数据块 字符设备:线性访问,按字符为单位(鼠标和显示器) 特殊设备没有大小,只有设备号 设备号:主设备号(major)和次设备号(minor) (3)/etc:配置文件 大多数程序的配置文件都放在此目录或者此目录的子目录 (4)/home:用户的家目录 每一个用户的家目录通常默认为/home/USERNAME (5)/root:管理员的家目录; (6)/lib:库文件 静态库, .a,便于程序单个运行使用 动态库, .dll, .so (shared object),可以共享使用节省空间 /lib/modules:内核模块文件 (7)/media:挂载点目录 挂载移动设备 (8)/mnt:挂载点目录 额外的临时文件系统 (9)/opt:可选目录 早期第三方程序的安装目录,现在通常放于/usr/local中 (10)/proc:伪文件系统 内核映射文件 (11)/sys:伪文件系统 跟硬件设备相关的属性映射文件 (12)/tmp:临时文件 /var/tmp,另外一个临时目录 (13)/var:可变化的文件 /bin: 可执行文件, 用户命令 /sbin:管理命令 (14)/usr:shared, read-only:全局共享的只读文件 /usr/bin:系统启动之后运行正常系统功能的需要的文件 /usr/sbin /usr/lib /usr/local:第三方软件的安装路径 /usr/local/bin /usr/local/sbin /usr/local/lib 5.1.3 命名规则 命名规则: 1、长度不能超过255个字符; 2、不能使用/当文件名 3、严格区分大小写 绝对路径:相对于根节点的路径 相对路径:相对于当前位置的路径 5.1.4 操作系统功能 操作系统: 运行程序 设备管理 软件管理 进程管理 网络管理 5.1.5 文件管理 1、文件创建和删除 (1)touch # touch 主要作用修改文件时间戳,也可用来创建文件(linux同一个目录下不能创建名称相同的文件夹和文件) -a 只改变访问时间 -m 只改变修改时间 -t 指定修改的时间 -c 若文件不存在也不创建新文件 stat file显示文件的状态信息 ![]() ![]() 而文件夹确实是类似文本文件的方式存储的,文件夹可以看做文件inode:文件名组成的文本文件 (文件的属性信息存在inode的元信息中,可以用stat file查看)。只要文件夹内未发生文件的新增、删除、软链或文件夹内文件的inode (也称为索引节点)未改变,文件夹 (代表文件夹的文本文件)的时间戳就不会发生变化。 From <https://cloud.tencent.com/developer/article/1520817> [daniel@localhost ~]$ touch -m -t 201212121212 x [daniel@localhost ~]$ stat x File: ‘x’ Size: 15 Blocks: 0 IO Block: 4096 directory Device: fd02h/64770d Inode: 33554496 Links: 3 Access: (0775/drwxrwxr-x) Uid: ( 1000/ daniel) Gid: ( 1000/ daniel) Context: unconfined_u:object_r:user_home_t:s0 Access: 2021-06-01 12:55:16.734391633 -0400 Modify: 2012-12-12 12:12:00.000000000 -0500 Change: 2021-06-01 12:57:12.073157790 -0400 Birth: – 创建文件也可以使用文件编辑器来创建 word为字处理器,不是文本编辑器,处理的不仅仅是文本 (2)ASCII码 ASCII: 美国国家标准信息交换代码 128不同的字符要存储在计算机上: 计算机只能保存二进制: 2^6=0,63 64个数字 2^7=0,127 128个数字 000 0000 – 111 1111 ASCII:通过不同的位数变化来表示某个字符 2^16: 65536 字符标准:GB18030, GBK, GB2312(国标),Unicode(全球统一标准) 0000 1001 0000 1110:上, 卫(它为ASCII码还是字符取决于使用的字符转换器) linux文本剪辑器:nano (3)rm 删除文件 -i:删除前询问 -f:强行删除,不接受提示 -r:递归删除目录下所有文件 rm -rf / (ROOT用户可以通过此命令清理所有文件) 任何操作之前确认一下,再操作 (4)cp 复制和移动文件cp cp: copy只有最后一个是目标,前面的都是源,默认只复制文件,不复制目录 cp SRC DEST -r:递归复制目录和目录下的文件(不能覆盖文件) -p:保存用户原有的属主,属组和时间戳 -P:保持文件自有的链接属性 -a:归档复制,常用于备份 cp file1 file2 file3 可复制一个文件到一个文件 也可复制多个文件到一个目录 cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/ 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息 参数: -a 或 –archive 此参数的效果和同时指定”-dpR”参数相同 -b 或 –backup 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录 -f 或 –force 强行复制文件或目录, 不论目的文件或目录是否已经存在 -i 或 –interactive 覆盖文件之前先询问用户 -l 或 –link 对源文件建立硬链接,而非复制文件 -p 或 –preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间 -P 或 –parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在 -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理 -R 或 –recursive 递归处理,将指定目录下的文件及子目录一并处理 -s 或 –symbolic-link 对源文件建立符号链接,而非复制文件 -S <备份字尾字符串> 或 –suffix=<备份字尾字符串> 用”-b”参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号”~” -u 或 –update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件 -v 或 –verbose 显示执行过程 -V <备份方式> 或 –version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种: 1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增 2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定 3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份 -x 或 –one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件 –help 显示在线帮助 –sparse=<使用时机> 设置保存希疏文件的时机 –version 显示版本 示例: .复制文件,只有源文件较目的文件的修改时间新时,才复制文件 cp -u -v file1 file2 .将文件file1复制成文件file2 cp file1 file2 .采用交互方式将文件file1复制成文件file2 cp -i file1 file2 .将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式 cp -f file1 file2 .将目录dir1复制成目录dir2 cp -R file1 file2 .同时将文件file1、file2、file3与目录dir1复制到dir2 cp -R file1 file2 file3 dir1 dir2 .复制时保留文件属性 cp -p a.txt tmp/ .复制时保留文件的目录结构 cp –parents /var/tmp/a.txt ./temp/ .复制时产生备份文件 cp -b a.txt tmp/ .复制时产生备份文件,尾标 ~1~格式 cp -b -V t a.txt /tmp .指定备份文件尾标 cp -b -S _bak a.txt /tmp (5)mv: move 移动文件 mv SRC DEST mv -t DEST SRC将多个源文件复制到同一个目标 mv -f DEST SRC 强制覆盖 mv abc mn:将abc移动到当前目录,并且更改名称为mn (6)install install SRC DEST:可用来复制文件 -d 指定DIRECOTRY … :可用于创建目录 install -t DIRECTORY SRC…:把多个文件复制到同一个目录 5.1.6 目录管理 1、查看目录 ls cd pwd 2、mkdir mkdir:创建空目录,只有路径中的最后一个点才是要创建的目录 -p:循环创建目录 -v: verbose详细信息,显示创建过程 例:mkdir /root/x/y/z 创建多个目录 /mnt/test/x/m,y (1)mkdir -pv /mnt/test/x/m /mnt/test/y (2)mkdir -pv /mnt/test/{x/m,y} 3、展开 (1)波浪线展开 ~USERNAME (波浪线展开):cd自动转换到用户家目录 (2)命令行展开(花括号展开): /mnt/test/ 创建如下几个目录a_b, a_c, d_b, d_c 类似于(a+d)(b+c)=ab+ac+db+dc 所以可以写为{a,d}_{b,c} [root@Daniel-R480 ~]# mkdir -pv /mnt/test/{a,d}_{b,c} mkdir: created directory ‘/mnt/test/a_b’ mkdir: created directory ‘/mnt/test/a_c’ mkdir: created directory ‘/mnt/test/d_b’ mkdir: created directory ‘/mnt/test/d_c’ [root@Daniel-R480 ~]# ls /mnt/test/ a_b a_c d_b d_c 4、tree # tree:查看目录树 [daniel@localhost ~]$ tree /mnt/test test ├── a_c ├── a_d ├── b_c └── b_d 5、rmdir 删除目录:rmdir (remove directory) 默认只能删除空目录 -p:循环删除空文件夹 [root@Daniel-R480 ~]# rmdir /mnt/test/ rmdir: failed to remove ‘/mnt/test/’: Directory not empty 练习: 1、创建目录 (1)在/mnt下创建boot和sysroot; [root@Daniel-R480 ~]# mkdir /mnt/{boot,sysroot} [root@Daniel-R480 ~]# ls /mnt boot c d etst sysroot test [root@Daniel-R480 ~]# (2)在/mnt/boot下创建grub; [root@Daniel-R480 ~]# mkdir /mnt/boot/grub [root@Daniel-R480 ~]# ls /mnt/boot/ grub (3)在/mnt/sysroot下创建proc, sys, bin, sbin, lib, usr, var, etc, dev, home, root, tmp a)在/mnt/sysroot/usr下创建bin, sbin, lib b)在/mnt/sysroot/lib下创建modules c)在/mnt/sysroot/var下创建run, log, lock d)在/mnt/sysroot/etc下创建init.d [root@Daniel-R480 ~]# mkdir /mnt/sysroot/{proc,sys,bin,sbin,lib,usr,var,etc,dev,home,root,tmp} [root@Daniel-R480 ~]# mkdir /mnt/sysroot/usr/{bin,sbin,lib} [root@Daniel-R480 ~]# mkdir /mnt/sysroot/lib/modules [root@Daniel-R480 ~]# mkdir /mnt/sysroot/var/{run,log,lock} [root@Daniel-R480 ~]# touch /mnt/sysroot/etc/init.d [root@Daniel-R480 ~]# tree /mnt/sysroot/ [root@Daniel-R480 ~]# tree /mnt/sysroot/ /mnt/sysroot/ ├── bin ├── dev ├── etc │ └── init.d ├── home ├── lib │ └── modules ├── proc ├── root ├── sbin ├── sys ├── tmp ├── usr │ ├── bin │ ├── lib │ └── sbin └── var ├── lock ├── log └── run 作业1: 1、创建目录/backup # mkdir -v /backup 2、复制目录/etc至/backup目录中,并重命名为“etc-当前日期”,如etc-2013-02-26;要求保留文件原来的属性,保持链接文件; cp -r -p -d # cp -a /etc /backup/etc-2013-02-28 命令替换 3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行; # cp /etc/inittab /tmp/inittab.new # nano /tmp/inittab.new 作业2: 1、思考:ls命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小? [root@Daniel-R480 tmp]# ls -lht total 516K -rw-r–r– 1 root root 18 Jun 18 18:01 b -rw-r–r– 1 root root 12 Jun 18 17:36 a -rwxr-xr-x 1 root root 0 Jun 10 09:47 test -rw——- 1 root root 248K Jun 8 18:01 yum_save_tx.2021-06-08.18-01.yIzI_S.yumtx -rw——- 1 root root 256K Jun 8 17:08 yum_save_tx.2021-06-08.17-08.qKUX5n.yumtx -rwx—— 1 root root 836 Jan 29 2019 ks-script-QveTmi -rwx—— 1 root root 4.7K Jan 29 2019 ks-script-5qnQJp -rw——- 1 root root 0 Jan 29 2019 yum.log 2、通过帮助手册,学习使用du命令; # du 估计文件空间使用情况 -s (summarize,显示总计情况) -h(显示大小) [root@Daniel-R480 tmp]# du 0 ./.font-unix 0 ./.ICE-unix 0 ./.Test-unix 0 ./.X11-unix 0 ./.XIM-unix 516 . [root@Daniel-R480 tmp]# du -h 0 ./.font-unix 0 ./.ICE-unix 0 ./.Test-unix 0 ./.X11-unix 0 ./.XIM-unix 516K . [root@Daniel-R480 tmp]# du -s 516 . [root@Daniel-R480 tmp]# du -sh 516K . [root@Daniel-R480 tmp]# 3、通过帮助,学习read命令; 变量:内存空间,有名称 变量赋值: 变量替换 作业3: 描述GPL, BSD, Apache三个开源协定的大体联系及区别。 作业4: 1、如何获取Linux当前最新的内核版本号? 2、列出你所了解的Linux发行版,并说明其跟Linux内核的关系。 Linux, GNU: GNU/Linux, 以源代码发布 在源代码编译之后形成发行版:Fedora, RedHat(CentOS), SUSE, Debian(Ubuntu, Mint), Gentoo, LFS(Linux From Scratch) 编译:将源代码编译成可以在对应的硬件平台上安装运行的版本 C程序 Tom,在AMD上编译 Jerry在intel上编译 RedHat: 通用格式 奔腾: 性能配置最好的状态,在本机上编译,进行安装 |