0%

Linux基础

文件

绪言

在Linux操作系统中秉持着一切皆文件的原则,在windows中是文件的,在Linux下也是文件;在Windows中不是文件的,在Linux下同样是文件,它意味着各种设备、资源和数据都可以通过文件系统的方式进行访问和操作。最常见的例子便是用U盘插入电脑中读取信息,在Linux系统中

  1. /dev/sdX:这个文件表示U盘设备,”X”代表具体的设备标识,例如/dev/sda/dev/sdb等。你可以通过这个文件来访问整个U盘。

    1
    2
    sudo mkdir /media/usb-drive
    sudo mount /dev/sdX /media/usb-drive
  2. /media/username/usb-drive:这个文件夹是U盘挂载的地方,”username”是你的用户名,”usb-drive”是挂载点。在这个文件夹中,你可以通过普通的文件操作来访问U盘中的文件和文件夹。

而在windows操作系统下,U盘通常会被视为两个不同的实体:一个是设备,另一个是文件系统中的一个文件夹

  1. 设备:可以在Windows设备管理器中看到,通常显示为一个可移动设备。
  2. 文件夹:windows会自动为U盘分配一个盘符,可以用过windows资源管理器访问U盘内的文件。

Linux下的文件目录结构

以Ubuntu 22.04 LTS 为例,输入ll / -a查看/目录下的文件目录:

  1. 常见的目录:
  • / (根目录): Linux文件系统的根目录,所有其他目录都是从这里开始的。
  • /bin (基本命令): 全称binary,存放系统启动和维护所需的基本命令,如lscpmv等。
  • /boot (开机引导): 存放包含引导启动Linux系统所需的文件,如内核映像文件、引导加载程序以及启动配置文件。
  • /dev (设备文件): 包含与系统硬件设备和外部设备的文件,Linux将这些设备抽象为文件,通过这些文件来进行访问和交互。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)
  • /etc (系统配置): 存放系统的配置文件,包括网络配置、用户账户配置、软件配置等。
  • /home (用户主目录): 存放用户的主目录,每个用户都有一个独立的子目录,用于存放个人文件、文档和配置文件。
  • /root (root用户主目录): 超级用户(root用户)的主目录。
  • /run (运行时数据): 用于存放系统启动后运行时需要的临时文件,即进程的运行数据存放目录。
  • /sbin (系统命令): 存放系统管理员使用的系统管理命令,这些命令通常需要root权限,如fdiskiptables等。
  • /tmp (临时文件): 用于存放临时文件,系统重新启动后会清空该目录。
  • /usr(用户目录):包含用户程序和文件,通常将大部分软件安装到这个目录下。
    • /usr/bin 存放系统中的大部分用户级别的可执行命令。这些命令通常是系统的标准工具和应用程序,但不是必须在系统启动阶段使用的基本命令。
    • /usr/local程序安装目录。
    • /usr/sbin存放系统管理员(root用户)使用的系统管理命令。与 /sbin 目录类似,但 /usr/sbin 中的命令通常是不需要在系统启动阶段使用的,因此可以被认为是更为次要的系统命令。
    • /usr/tmp被抛弃临时文件目录。
    • /usr/lib/usr/lib32/usr/lib64/usr/libx32 存放系统所需的共享库文件,这些库文件被可执行文件在运行时动态链接以实现代码重用。
    • /usr/src是用于存放内核源代码(Linux 内核)的目录。这个目录通常包含了系统所使用的内核版本的源代码,以及相关的文件和文档。
  • /var (变量数据): 包含变量数据,如日志文件、数据库文件等会变化的数据。
    • /var/tmp临时文件目录;存放周期更长
  1. 其他命令:
  • /media/mnt (挂载点): 通常用于挂载外部设备,如U盘、光盘等,这样的设备会在这些目录下创建子目录以便访问。

  • /opt (可选软件): 用于存放由第三方提供的附加软件,通常将这些软件安装在这个目录下。

  • /proc (进程信息): 虚拟文件系统,提供有关正在运行的进程和系统状态的信息,以文件的形式呈现。

  • /srv (服务数据): 用于存放系统提供的服务的数据文件,如Web服务器的文档。

  • /sys (内核文件): 用于访问内核的运行时信息,以及与内核模块的交互。

  • /snap(包管理器):是用于存放使用 Snap 包管理器安装的应用程序和软件包的目录。

文件路径

在 Linux 操作系统中,文件路径是用来描述文件在文件系统中位置的字符串。Linux 的文件路径是一个层次化的结构,从根目录开始,通过目录名和斜杠(/)来指示文件的位置。

  1. 绝对路径: 绝对路径从根目录开始,指示完整的路径。例如:
    • /usr/bin:指向根目录下的 /usr/bin 目录。
    • /home/user/documents/file.txt:指向根目录下的 /home/user/documents 目录中的 file.txt 文件。
  2. 相对路径: 相对路径是相对于当前工作目录的路径。例如,如果当前工作目录是 /home/user,那么:
    • documents/file.txt:指向 /home/user/documents 目录中的 file.txt 文件。
  3. 特殊符号: 在路径中,一些特殊符号有特殊的含义:
    • .:代表当前目录。例如:./file.txt 表示当前目录中的 file.txt 文件。
    • ..:代表上一级目录。例如:../folder/file.txt 表示上一级目录中的 folder 目录下的 file.txt 文件。
    • ~:代表当前用户的主目录。例如:~/documents 表示当前用户的主目录下的 documents 目录。
  4. 环境变量: 有些路径中可能包含环境变量,例如 $HOME 代表当前用户的主目录。例如:$HOME/documents 表示主目录下的 documents 目录。

文件命名规则

常见的 Linux 文件命名规则:

  1. 大小写敏感: Linux 文件系统是大小写敏感的。例如,file.txtFile.txt 被认为是两个不同的文件。
  2. 字母、数字和下划线: 文件名可以包含字母(大小写)、数字和下划线字符。文件名不能以数字开头。
  3. 连字符和点: 文件名中可以包含连字符(减号,短划线)和点(句点),但不能以它们开头或结尾。连字符通常用于分隔单词,而点通常用于文件名的扩展名。
  4. 扩展名: Linux 中的文件命名并不像 Windows 那样依赖于扩展名来识别文件类型。文件名可以没有扩展名,也可以使用任何合法的字符作为扩展名。
  5. 保留字符: Linux 文件名中不能包含特殊的保留字符,如斜杠(/)、问号(?)等。
  6. 长度限制: 文件名的最大长度为 255 个字符。

注意:

  • .开头的文件名是隐藏文件,使用ls命令时要添加命令选项-a方可查看。
  • 虽说Linux可以使用特殊字符作为文件名,但一般不推荐使用特殊字符。

例如:用 (空格)当作文件名;在Ubuntu下系统会以引号显示该文件,但有的Linux版本可能会直接不显示该文件。文件名的含义尽量给文件命名以反映其内容、用途或功能,以便其他人能够轻松理解和识别文件。

1
2
3
exiler@localhost:~$ touch ' '
exiler@localhost:~$ ls
' ' book gitclone_file test

命令

Linux是一种类Unix操作系统,近些年来Linux的桌面版本层出不穷,一定程度上极大简化了Linux的个人使用。面对server等版本,掌握shell终端命令的使用可以更加方便快速的操作Linux。

目录操作命令

查看路径

  • pwd 查看当前路径,Print Working Directory的缩写
1
2
exiler@localhost:~$ pwd
/home/exiler

创建目录

  • mkdir 一次建立一个或几个目录
1
2
3
4
5
6
7
exiler@localhost:~$ mkdir document picture  #新建目录
exiler@localhost:~$ ls
document picture

exiler@localhost:~$ mkdir ~/picture/temp #创建子目录
exiler@localhost:~$ ls ~/picture/
temp

创建子目录默认为为已存在的目录创建子目录,若想要完整地创建一个不存在目录结构,请使用mkdir -p 指令:

1
2
3
4
5
6
7
exiler@localhost:~$ mkdir ~/tempx/job  #error
mkdir: cannot create directory ‘/home/exiler/tempx/job’: No such file or directory
exiler@localhost:~$ mkdir -p ~/tempx/job #true
exiler@localhost:~$ ls
document picture tempx
exiler@localhost:~$ ls ~/tempx/
job

移动目录

  • mv move的缩写,可以用来移动文件,也可以用于重命名文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# mv source destination
exiler@localhost:~$ tree
.
├── document
├── picture
│   └── temp
└── tempx
└── job

5 directories, 0 files
exiler@localhost:~$ mv ~/picture/temp document/ #移动文件
exiler@localhost:~$ tree
.
├── document
│   └── temp
├── picture
└── tempx
└── job

若source文件与的destination目录下的某个文件存在文件名相同的情况,则mv命令会不发出警告地把destination目录下的同名文件替换,导致某些重要文件丢失。

1
2
3
4
5
6
7
exiler@localhost:~$ mkdir ~/test && cd test
exiler@localhost:~/test$ echo "hello" > hello
exiler@localhost:~/test$ cat hello
hello
exiler@localhost:~/test$ cd .. && touch hello
exiler@localhost:~$ mv hello test/ && cat hello

为了杜绝此类情况,可以使用mv -i选项:

1
2
3
4
exiler@localhost:~$ ls
document hello picture tempx test
exiler@localhost:~$ mv -i hello test/
mv: overwrite 'test/hello'? #系统发出提示,回答n表示跳过,回答y表示覆盖

也可以使用mv -b选项给source文件名添加字符~避免被覆盖:

1
2
3
4
5
6
exiler@localhost:~$ touch "hello"
exiler@localhost:~$ mv -b hello test/
exiler@localhost:~$ ls
document picture tempx test
exiler@localhost:~$ ls test/
hello hello~
  • 重命名

Linux中并没有专门用来重命名的命令,因为mv命令可以轻松实现文件重命名

例如,如果要将文件 “oldname.txt” 重命名为 “newname.txt”,你可以使用以下命令:

1
mv oldname.txt newname.txt

删除目录

  • rmdir用来删除空目录,后跟要删除的空目录名即可。
  • rm用来删除文件

rm命令的使用方式较多,可以一次删除一个或几个文件,也可以用来删除目录。

1
rm test/*.php  #删除test目录下的所有php文件

为了安全起见,使用rm -i命令系统会发出请求等待用户是否确定删除文件

1
2
3
exiler@localhost:~$ rm -i hello
rm: remove regular empty file 'hello'?
#答y表示确认删除,答n表示跳过。对于只读文件,不加上-i选项,rm命令也会提示

使用rm -f可以避免这样的交互操作,rm命令会自动对这些文件回答y,一般-f选项都是配合-r选项使用删除整个目录。

  • 使用rm -r递归删除整个目录:

rm -r命令会递归删除一个目录下的所有文件和子目录下的文件,最后再删除选中的目录。使用该命令时要格外小心,特别是以root身份执行该命令。

复制目录

  • cp
1
cp source destination

mv命令一样,cp默认情况下会也会覆盖目标目录中的同名文件。

  1. 可以使用-i选项对这种情况进行提示.
  2. 可以使用-b选项对同名文件改名后再复制。这两个选项的使用和mv命令中一样。
1
2
3
4
5
6
7
8
cp test.php test/  

exiler@localhost:~$ cp -i hello.php picture/
cp: overwrite 'picture/hello.php'?

exiler@localhost:~$ cp -b hello.php picture/
exiler@localhost:~$ ls picture/
hello.php hello.php~

跳转目录

  • cd命令可以用来切换工作目录,Change Directory的缩写.
1
2
3
4
5
cd ../ #返回上级目录
cd ../.. #返回上级目录的上级目录,以此类推
cd #返回用户目录
cd ~ #返回用户目录
cd /usr/bin #进入usr目录下的bin目录

使用cd命令时要注意区分相对路径和绝对路径的使用。

文件操作命令

欢迎关注我的其它发布渠道