Linux 文件和目录及相关操作

单用户操作系统和多用户操作系统

  • 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源
    • Windows XP 之前的版本都是单用户操作系统
  • 多用户操作系统:指一台计算机在同一时间可以由 多个用户 使用,多个用户共同享用系统的全部硬件和软件资源
    • UnixLinux 的设计初衷就是多用户操作系统

linux下的文件系统

Linux文件类型

  • 普通-
  • 目录d
  • 字符设备c
  • 块设备b
  • 软连接l
  • 管道p
  • 套接字s
  • Unknown

文件结构

  • Windows 下,打开 “计算机”,看到的是一个个的驱动器盘符:eg: C盘,D盘…。

    • 每个驱动器都有自己的根目录结构,形成多个树并列的情形。
  • Linux 下,看不到驱动器盘符,看到的是文件夹(目录)

    • linux没有盘符概念,只有一个根目录 /,所有文件都在它下面

linux文件系统

  • 用户目录

    • 位于 /home/xxx,称之为用户工作目录或家目录,表示方式:

      1
      2
      /home/xx
      ~
  • /:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始

    • 当在终端里输入 cd /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
  • /bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat

  • /boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz系统引导管理器:/boot/grub

  • /dev:存放linux系统下的设备文件访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt

  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有

    • /etc/inittab
    • /etc/fstab
    • /etc/init.d
    • /etc/X11
    • /etc/sysconfig
    • /etc/xinetd.d

    • /etc/profile

  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下

    • ~ 表示当前用户的家目录
    • ~xxx 表示用户 xxx 的家目录
  • /lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助

  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下

  • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载

  • /opt:给主机额外安装软件所摆放的目录

  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等

  • /root:系统管理员root的家目录

  • /sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能”查看”而不能设置和使用

  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下

  • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内

  • /usr:应用程序存放目录

    • /usr/bin:存放应用程序
    • /usr/share:存放共享数据
    • /usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
    • /usr/local:存放软件升级包
    • /usr/share/doc:系统说明文件存放目录
    • /usr/share/man:程序说明文件存放目录
  • /var:放置系统执行过程中经常变化的文件

    • /var/log:随时更改的日志文件
    • /var/spool/mail:邮件存放的目录
    • /var/run:程序或服务启动后,其 PID 存放在该目录下

文件和目录常用命令

  • 查看目录内容
    • ls
  • 切换目录
    • cd
  • 创建和删除操作
    • touch
    • rm
    • mkdir
  • 拷贝和移动文件
    • cp
    • mv
  • 查看文件内容
    • cat
    • more
    • grep
  • 其他
    • echo
    • 重定向 >>>
    • 管道 |
查看目录ls 命令说明
  • ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的 dir 命令
Linux 下文件和目录的特点
  • Linux 文件 或者 目录 名称最长可以有 256 个字符
  • . 开头的文件为隐藏文件,需要用 -a 参数才能显示
  • . 代表当前目录
  • .. 代表上一级目录
ls 常用选项
参数 含义
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小
计算机中文件大小的表示方式
单位 英文 含义
字节 B(Byte) 在计算机中作为一个数字单元,一般为 8 位二进制数
K(Kibibyte) 1 KB = 1024 B,千字节 (1024 = 2 ** 10)
M(Mebibyte) 1 MB = 1024 KB,百万字节
千兆 G(Gigabyte) 1 GB = 1024 MB,十亿字节,千兆字节
T(Terabyte) 1 TB = 1024 GB,万亿字节,太字节
P(Petabyte) 1 PB = 1024 TB,千万亿字节,拍字节
E(Exabyte) 1 EB = 1024 PB,百亿亿字节,艾字节
Z(Zettabyte) 1 ZB = 1024 EB,十万亿亿字节,泽字节
Y(Yottabyte) 1 YB = 1024 ZB,一亿亿亿字节,尧字节
ls 通配符的使用
通配符 含义
* 代表任意个数个字符
? 代表任意一个字符,至少 1 个
[] 表示可以匹配字符组中的任一一个
[abc] 匹配 a、b、c 中的任意一个
[a-f] 匹配从 a 到 f 范围内的的任意一个字符
文件操作基本命令

more-分屏显示文件内容, 空格翻页;

less同理;

head -n file-查看file的前n行;

tail -n file-查看file的后n行;

目录及操作基本命令

一个目录所占的磁盘大小为4K;

cd --在两个目录之间来回切换;

rmdir-删除空目录;

cp -a/-r srcdir dstdir-拷贝目录;

查找文件
  • find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件
序号 命令 作用
01 find [路径] -name “*.py” 查找指定路径下扩展名是 .py 的文件,包括子目录
  • 如果省略路径,表示在当前文件夹下查找
  • 之前学习的通配符,在使用 find 命令时同时可用
硬链接和软链接
  • 软连接是一个文件,其中存的就是文件的路径, 路径有几个字符就占几个字节, 所以建议用绝对路径创建软连接;

    • 注意文件的权限, 软连接的权限代表其本身的权限, 与指向的目的文件无关;
  • 创建硬链接会增加硬链接计数;

    • 这些硬链接只想同一个文件, 修改一个其余的会同步变化;
    • 所有的硬链接有相同的Inode(文件统一id);
    • 删除只是把硬链接计数-1;
序号 命令 作用
01 ln -s 被链接的源文件 链接文件 建立文件的软链接,用通俗的方式讲类似于 Windows 下的快捷方式
  • 没有 -s 选项建立的是一个 硬链接文件
    • 两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
  • 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
1
2
ln -s hello.c hello.c.s #创建软连接;
ln hello.c hello.c.h #创建硬链接;
文件软硬链接的示意图

文件软硬链接示意图

在 Linux 中,文件名文件的数据 是分开存储的

  • 提示:
    • 在 Linux 中,只有文件的 硬链接数 == 0 才会被删除
    • 使用 ls -l 可以查看一个文件的硬链接的数量

磁盘分区类型

  • 主分区:最多只能有四个
  • 扩展分区:最多一个,算作主分区的一种,主分区加扩展分区最多有四个。扩展分区不能存储数据和格式化,必须再划分为逻辑分区才可以使用。
  • 逻辑分区:在扩展分区中划分

逻辑分区的编号从5开始

支持的文件系统

  • ext2:ext文件系统的升级版。最大支持16TB的分区和最大2TB的文件。
  • ext3:ext2的升级,增加日志功能。
  • ext4:ext3升级版本,主流使用,功能强大

文件系统常用命令

df, du, fsck, dump2fs

文件系统查看命令df
1
2
3
4
5
6
7
df \[选项][挂载点]

-a 所有文件系统信息

-h 使用习惯单位显示容量,如kB,MB,GB

ls 只统计目录下的大小,而不会统计子目录下的数据大小。
统计目录或文件大小du
1
-a , -h , -s

df命令从文件系统考虑,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(eg. 文件已经被删除,但程序并没有释放空间)

du命令面向文件,只会计算文件或目录占用的空间。

文件系统修复命令fsck
1
fsck[选项]分区设备文件名
显示磁盘状态命令dumpe2fs
1
dumpe2fs 分区设备文件名

文件系统常用命令-挂载命令

查询与自动挂载
1
2
3
mount [-l]:查询系统中已经挂载的设备,-l会显示卷标名称

mount -a 依据配置文件/etc/fastb的内容,自动挂载
挂载命令格式
1
2
3
4
5
6
7
8
9
10
11
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

选项:

-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统

-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载

-o 特殊指令(remount ...)

mount -o remount ,noexec /home
挂载光盘与U盘
1
2
3
4
5
6
7
#挂载光盘

mkdir /mnt/cdrom/ #建立挂载点

mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载光盘

mount /dev/sr0 /mnt/cdrom
卸载命令
1
2
3
umount 设备文件名或挂载点

umount /mnt/cdrom
挂载U盘
1
2
3
4
5
fdisk -l 查看U盘设备文件名

mount -t vfat /dev/sdb1 /mnt/usb/

linux默认不支持NTFS文件系统

fdisk分区

fdisk命令分区过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.添加硬盘,虚拟机必须在关机的情况下添加

2.查看新硬盘 fdisk -l

3.使用fdisk命令分区

fdisk /dev/sdb

4.重新读取分区表信息

partprobe

5.格式化分区

扩展分区不可以格式化

mkfs -t ext4 /dev/sdb1

6.建立挂载分区
分区自动挂载与fstab文件修复
1
2
3
4
5
6
7
将挂载写入/etc/fstab文件,一定要写对

mount -a 依据配置文件 /etc/fstab的内容,自动挂载

/etc/fstab文件修复

mount -o remount,rm /

分配swap分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.free命令
查看内存与swap分区使用情况
cached(缓存):加速数据的读取过程
buffer(缓冲):写入数据过程中,将分散的写入操作保存到内存中,当达到一定的程度再集中写入硬盘,加速数据的写入过程。

2.新建swap分区
fdisk /dev/sdb
还需将分区ID改为82

3.格式化
mkswap /dev/sdb6

4.加入swap分区
swapon /dev/sdb6 加入swap分区
swapoff /dev/sdb6 取消swap分区

5.swap分区开机自动挂载
vi /etc/fstab