Linux 文件与目录的常用命令:CSP-S必考
- 一、文件与目录的基本概念
-
- 1.1 文件是什么?
- 1.2 目录是什么?
- 1.3 与windows的差异
- 二、常用的文件与目录操作命令
-
- 2.1 必须记住的命令
- 2.2 真题解析
- 2.3 常用命令的使用
-
- 2.3.1 `ls`:列出目录内容
- 2.3.2 `cd`:切换目录
- 2.3.3 `pwd`:显示当前目录
- 2.3.4 `mkdir`:创建目录
- 2.3.5 `rm`:删除文件或目录
- 2.3.6 `cp`:复制文件或目录
- 2.3.7 `mv`:移动或重命名文件或目录
- 三、文件和目录相关知识
-
- 3.1 顶级目录
- 3.2 文件路径
- 3.3 隐藏文件与目录
- 四、文件创建与查看
-
- 4.1 `touch`:创建文件
- 4.2 查看文件内容
- 4.3 `du`:查看目录大小
- 五、文件与目录的查找与搜索
-
- 5.1 `find`:查找文件或目录
- 5.2 `grep`:查找文件内容
- 六、文件与目录的权限管理
-
- 6.1 权限的基本概念
- 6.2 `chmod`:修改权限
- 6.3 `chown`:修改所有者
- 6.4 `chgrp`:修改文件或目录所属组
- 七、文件与目录的压缩与解压
-
- 7.1 `tar`:打包与解包
- 7.2 `gzip`:压缩与解压缩
- 八、文件与目录的链接
-
- 8.1 硬链接与软链接
- 8.2 `ln`:创建链接
- 九、文件与目录的高级操作
-
- 9.1 `rsync`:远程同步
- 9.2 `scp`:远程复制
- 十、文件与目录的备份与恢复
-
- 10.1 `dd`:磁盘备份
- 10.2 `tar`:增量备份
- 十一、文件与目录的安全与加密
-
- 11.1 `gpg`:文件加密
- 11.2 `chattr`:文件属性
- 十二、实用技巧与最佳实践
-
- 12.1 使用通配符
- 12.2 使用管道和重定向
- 12.3 使用别名简化命令
- 12.4 使用环境变量存储常用路径
- 12.5 学习更多命令
- 十三、实战:打造个人开发环境
-
- 13.1 创建项目目录
- 13.2 编写代码文件
- 13.3 设置权限
- 13.4 编译和运行代码
从2021年起,关于Linux 文件与目录命令的题目,在CSP-S(提高级)第一轮考试中是必考题,而且都是第一题。
本文介绍了CSP-S中Linux 文件与目录常用命令相关知识,并附有CSP-S第一轮考试历年真题。在此基础上,还进一步展开介绍了文件与目录的其他相关命令、技巧以及实际应用。
一、文件与目录的基本概念
1.1 文件是什么?
文件就像记载内容的“小本本”,里面可以存储各种信息。无论是文本、图片、视频,还是程序代码,都是以文件的形式存在的。每个文件都有一个名字,比如 hello.txt
。
1.2 目录是什么?
目录就相当于windows的“文件夹”,用来存放文件和其他目录。它其实和书中的目录是一样的,都是为了方便归类、查看内容。可以把目录想象成一个树形结构,树根是(/
),被称为根目录,是整个文件系统的起点,所有其他目录和文件都在这个根目录之下,就像树枝和树叶。比如,/home/username/Documents
就是一个典型的目录路径。
1.3 与windows的差异
关于文件和目录,Linux 与windows的主要差异如下:
- 文件名:Windows中文件名不区分大小写,Linux中的文件名区分大小写!这一点要非常注意,所以在竞赛中编程文件的命名大小写一定要与考试要求一致(一般都是全部小写)。
- 目录:Windows中文件路径用“\”分隔,Linux用“/”分隔。
二、常用的文件与目录操作命令
想想影视作品中那些电脑技术大牛们的镜头,都是对着键盘啪啦啪啦一顿敲,几乎没有谁会像扫雷一样狂点一通鼠标的。屏幕上一般是一个黑黑的窗口,滚动着一些字符。可见,键盘、黑窗口才是高级、牛叉的标配。
这些大牛们到底是靠什么装叉呢?答案是:敲入命令。
下面向我们走来的就是文件与目录命令代表队。
2.1 必须记住的命令
常见文件与目录操作命令如下:
-
ls
:列出当前目录中的文件和子目录。全称 list。 -
cd
:切换到另一个目录。全称 change directory。 -
pwd
:显示当前工作目录的路径。全称print working directory。 -
mkdir
:创建新目录。全称make directory。 -
rm
:删除文件或目录。全称remove。 -
cp
:复制文件或目录。全称copy。 -
mv
:移动文件或目录。全称move。
作为CSP-S第一轮考试参赛者,只要记住以上命令的用途就足够了。
2.2 真题解析
1.在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?()
A. pwd
B. cd
C. Ls
D. echo
【解析】pwd全称print working directory,意思是打印当前工作目录。
【答案】A
【来源】2024年CSP-S第一轮第1题
2.在Linux系统终端中,以下哪个命令用于创建一个新的目录?( )
A. newdir
B. mkdir
C. create
D. mkfolder
【解析】mkdir全称make directory,用于创建一个新的目录。
【答案】B
【来源】2023年CSP-S第一轮第1题
3.在Linux系统终端中,用于切换工作目录的命令为( )
A. ls
B. cd
C. cp
D. all
【解析】cd全称 change directory,用于更改目录。
【答案】B
【来源】2022年CSP-S第一轮第1题
4.在 Linux系统终端中,用于列出当前目录下所含的文件和子目录的命令为( )。
A. ls
B. cd
C. cp
D. all
【解析】ls全称 list,用于列出目录内容。注意l是L的小写字母。
【答案】A
【来源】2021年CSP-S第一轮第1题
-----------------如果纯为参加CSP-S考试,以上知识就够了,可以不用继续往下读-----------------------------
2.3 常用命令的使用
2.3.1 ls
:列出目录内容
ls
命令是Linux最常用的命令之一,用于列出指定目录中的文件和子目录。
ls # 列出当前目录下的所有文件和目录 ls /home/yourusername/Documents #列出文档(Documents)目录下的所有文件
bash
- 1
- 2
可在ls
后增加选项,实现不同的显示功能。
ls -l # 以长格式列出详细信息(包括权限、所有者、所属组、大小和修改时间等) ls -a # 显示所有文件,包括隐藏文件。 ls -h # 以人类可读的格式显示文件大小(如K、M、G等)。
码bash
- 1
- 2
- 3
比如输入ls -l
可能会输出如下内容:
total 8 -rw-r--r-- 1 user user 0 Oct 1 12:34 hello.txt drwxr-xr-x 2 user user 4096 Oct 1 12:34 Documents
bash
- 1
- 2
2.3.2 cd
:切换目录
cd
命令可以在不同的目录之间穿梭。比如,cd Documents
可进入 Documents
目录,而 cd ..
则可返回到上一级目录。
cd Documents # 进入 Documents 目录 cd .. # 返回上一级目录
bash
- 1
2.3.3 pwd
:显示当前目录
pwd
命令可以告诉你当前所在的目录路径。
pwd
bash
- 1
比如当前在username目录下,输出:
/home/username
bash
- 1
2.3.4 mkdir
:创建目录
mkdir
命令用于在任意位置创建一个新的目录。比如,mkdir new_folder
可以在当前目录下创建一个名为 new_folder
的目录。
mkdir newdir # 创建新目录 mkdir -p /a/b/c #创建多层目录,-p选项允许创建多层目录
bash
- 1
2.3.5 rm
:删除文件或目录
rm
命令用于删除文件或目录。不过要小心,rm
命令是不可逆的,删除后就找不回来了!可用 rm -r
来删除目录及其子目录和文件。
为了防止误删重要文件,可使用 -i
选项,删除前会提示确认。
rmdir
命令则用于删除空目录。
rm hello.txt # 删除文件 rm -r olddir # rm:删除非空目录及其子目录和文件。 rm -i newfile.txt #i选项在删除前提示用户确认,如果用f则不提示确认 rmdir emptydir # 删除空目录
bash
- 1
2.3.6 cp
:复制文件或目录
cp
命令用于复制文件或目录。比如,cp file1 file2
可以将 file1
复制为 file2
。
cp file1 file2
bash
- 1
2.3.7 mv
:移动或重命名文件或目录
mv
命令用于移动文件或目录,也可以用来重命名。比如,mv file1 file2
可以将 file1
重命名为 file2
,而 mv file1 /path/to/destination
可以将 file1
移动到指定目录。
mv file1 file2 # 重命名文件 mv file2 /path/to/destination # 移动文件
- 1
三、文件和目录相关知识
3.1 顶级目录
顶级目录是根目录下的目录,以下是几个常见的顶级目录及其用途:
-
/bin
:存放系统中最基本的可执行程序。 -
/etc
:存放配置文件。 -
/home
:用户的主目录,即存放用户个人文件的地方。每个用户都有一个独立的子目录。 -
/usr
:存放大部分应用程序和库文件。 -
/var
:存放日志文件和其他动态数据。 -
/tmp
:临时文件存储位置,通常在重启时会被清空。
3.2 文件路径
在Linux中,文件路径分为绝对路径和相对路径两种。
-
绝对路径:从根目录(/)开始,逐级向下指定文件的完整位置。例如,/home/user/Documents/file.txt就是一个绝对路径。
-
相对路径:相对于当前工作目录来指定文件的位置。例如,如果你当前在/home/user目录下,那么Documents/file.txt就是一个相对路径,指向/home/user/Documents/file.txt文件。
3.3 隐藏文件与目录
在Linux中,以点(.)开头的文件和目录都是隐藏的。它们通常包含系统配置信息或用户私人数据,默认情况下不会在文件管理器或终端中显示。要查看隐藏文件,可以使用ls -a
命令。
四、文件创建与查看
4.1 touch
:创建文件
touch
命令用于创建文件。它不仅可以创建新的空文件,还可以更新现有文件的时间戳。
示例:
touch newfile.txt
bash
- 1
4.2 查看文件内容
查看文件内容有多种方法,具体取决于文件的大小和格式。以下是一些常用的命令:
-
cat
:用于连接文件并打印到标准输出。常用于查看短文件内容。cat filename.txt
bash- 1
-
more
:分页显示文件内容。当文件较长时,more命令允许用户逐页查看。more filename.txt
bash- 1
-
less
:分页显示文件内容,适合大文件。与more类似,但功能更为强大。less命令允许用户向前和向后滚动查看文件内容,还支持搜索和跳转等功能。less filename.txt
bash- 1
-
head
和tail
:分别显示文件的前几行和后几行。head -n 10 filename.txt # 显示前10行 tail -n 10 filename.txt # 显示后10行
bash- 1
- 2
4.3 du
:查看目录大小
有时你需要知道某个目录占用的空间大小,用du
命令可以实现。
示例:
du -sh /path/to/directory # 显示目录总大小(-s 代表汇总,-h 代表人类可读格式)
bash
- 1
五、文件与目录的查找与搜索
5.1 find
:查找文件或目录
find
命令可以在指定目录下查找文件或目录。比如,find /path/to/search -name "*.txt"
可以在 /path/to/search
目录下查找所有 .txt
文件。
常用选项:
- type:指定查找的文件类型(如f表示文件,d表示目录)。
- mtime:查找在指定天数之前修改过的文件。
- name:按名称查找文件或目录。
find /home/username -name "*.txt" # 查找所有以 .txt 结尾的文件 find / -type d -name "Documents" # 在根目录下查找名为 Documents 的目录
bash
- 1
5.2 grep
:查找文件内容
grep
命令用于在文件中查找指定的内容。比如,grep "hello" file.txt
可以在 file.txt
中查找包含 hello
的行。
grep "hello" file.txt
bash
- 1
六、文件与目录的权限管理
6.1 权限的基本概念
在 Linux 系统中,每个文件和目录都有三种权限:读(r)、写(w)和执行(x)。这些权限分别对应文件的所有者、所属组和其他用户。
权限表示方法:权限信息由10个字符组成,第一个字符表示文件类型(如-
表示普通文件,d
表示目录),后面的9个字符分为三组,每组三个字符,分别表示所有者、所属组和其他用户的权限。每组字符中的r表示可读,w表示可写,x表示可执行。
$ ls -l -rw-r--r-- 1 user user 0 Oct 1 12:34 hello.txt
bash
- 1
在这个例子中,hello.txt
的所有者有读写权限,所属组和其他用户只有读权限。
6.2 chmod
:修改权限
chmod
命令用于修改文件或目录的权限,可以使用数字模式或符号模式。
- 符号模式:chmod [ugoa][±=][rwx] filename。例如,chmod u+x filename表示给所有者添加执行权限。
chmod u+x filename #给所有者添加执行权限
bash
- 1
-
数字模式:chmod [mode] filename。数字模式使用八进制数表示权限,每个数字对应一组(所有者、所属组、其他用户)的权限。例如,数字
755
表示设置所有者具有读、写、执行权限,所属组和其他用户具有读、执行权限。
chmod 755 hello.txt
bash
- 1
755
是一种简化的权限表示法,具体含义如下:
7 表示所有者拥有读(4)、写(2)和执行(1)权限。7 = 4 + 2 + 1 7=4+2+17=4+2+1。
5 表示组和其他用户拥有读(4)和执行(1)权限。5 = 4 + 1 5=4+15=4+1,之所以有两个5,是分别指所属组、其他用户的权限。
6.3 chown
:修改所有者
chown
用于修改文件或目录的所有者。
比如,chown user:group file
可以将 file
的所有者改为 user
,所属组改为 group
。如只指定所有者,则所属组不变。
chown user:group hello.txt
bash
- 1
示例输出:
-rwxr-xr-x 1 user group 0 Oct 1 12:34 hello.txt
bash
- 1
6.4 chgrp
:修改文件或目录所属组
chgrp
命令用于修改文件或目录的所属组。
chgrp newgroup filename # 将文件的所属组修改为newgroup
bash
- 1
七、文件与目录的压缩与解压
7.1 tar
:打包与解包
tar
命令可以让你将多个文件或目录打包成一个文件。比如,tar -cvf archive.tar file1 file2
可以将 file1
和 file2
打包成 archive.tar
。
tar -cvf archive.tar file1 file2 # 创建归档文件 tar -xvf archive.tar # 解压归档文件
bash
- 1
tar -cvf archive.tar file1 file2 dir1 # 创建归档文件 tar -xvf archive.tar # 解压归档文件
bash
- 1
7.2 gzip
:压缩与解压缩
gzip
命令就像是你的“压缩器”,可以让你将文件压缩成 .gz
格式。比如,gzip file.txt
可以将 file.txt
压缩成 file.txt.gz
。
gzip file.txt
- 1
此外,还可以使用bzip2
**来压缩文件。
bzip2 file.txt # 使用 bzip2 压缩文件
bash
- 1
八、文件与目录的链接
8.1 硬链接与软链接
在 Linux 系统中,链接就像是文件的“快捷方式”。硬链接和软链接是两种不同的链接方式。
- 硬链接:硬链接就像是文件的“分身”,删除一个硬链接不会影响其他硬链接和原文件。
- 软链接:软链接(也称符号链接)就像是文件的“快捷方式”,删除原文件后,软链接会失效。
8.2 ln
:创建链接
ln
命令就是“链接创建器”,可以让你创建硬链接或软链接。
ln file1 file2 # 创建 `file1` 的硬链接 `file2` ln -s file1 file3 # 创建 `file1` 的软链接 `file3`
bash
- 1
- 2
现在输入ls -l
输出:
-rw-r--r-- 2 user user 0 Oct 1 12:34 file1 -rw-r--r-- 2 user user 0 Oct 1 12:34 file2 lrwxrwxrwx 1 user user 5 Oct 1 12:34 file3 -> file1
bash
- 1
- 2
- 3
九、文件与目录的高级操作
9.1 rsync
:远程同步
rsync
命令用于在本地和远程之间同步文件和目录。
rsync -avz /source/dir user@remote:/destination/dir # 同步本地目录到远程服务器
bash
- 1
9.2 scp
:远程复制
scp
命令用于在本地和远程之间复制文件。
$ scp file.txt user@remote:/path/to/destination # 将本地文件复制到远程目录
bash
- 1
十、文件与目录的备份与恢复
10.1 dd
:磁盘备份
dd
命令就像是你的“磁盘克隆器”,可以让你备份整个磁盘或分区。比如,dd if=/dev/sda of=/backup/sda.img
可以将 /dev/sda
备份到 /backup/sda.img
。
$ dd if=/dev/sda of=/backup/sda.img
bash
- 1
10.2 tar
:增量备份
tar
命令还可以用来进行增量备份。比如,tar -cvzf backup.tar.gz --listed-incremental=snapshot.file /path/to/backup
可以创建一个增量备份。
$ tar -cvzf backup.tar.gz --listed-incremental=snapshot.file /path/to/backup
bash
- 1
十一、文件与目录的安全与加密
11.1 gpg
:文件加密
gpg
命令用于加密和解密文件。比如,gpg -c file.txt
可以加密 file.txt
,生成 file.txt.gpg
。
$ gpg -c file.txt
bash
- 1
11.2 chattr
:文件属性
chattr
命令用于修改文件的属性。比如,chattr +i file.txt
可以让 file.txt
不可修改。
$ chattr +i file.txt
bash
- 1
十二、实用技巧与最佳实践
12.1 使用通配符
通配符可以帮助你批量处理文件和目录。以下是一些常见的通配符:
-
*
:匹配任意数量的字符。rm *.txt # 删除所有 .txt 文件
bash- 1
-
?
:匹配单个字符。ls file?.txt # 列出 file1.txt, file2.txt 等文件
bash- 1
-
[ ]
:匹配方括号内的任意字符。ls [abc]*.txt # 列出 a*.txt, b*.txt, c*.txt 文件
bash- 1
12.2 使用管道和重定向
管道(|
)和重定向(>
、>>
)是提高命令行效率的重要工具。它们允许你将一个命令的输出作为另一个命令的输入,或将输出保存到文件中。
示例:
ls | grep txt # 列出当前目录下所有 .txt 文件 echo "Hello, World!" > hello.txt # 将字符串写入文件 echo "Another line." >> hello.txt # 追加内容到文件
bash
- 1
- 2
- 3
例如,使用grep命令在文件中搜索特定字符串,并将搜索结果保存到新文件中:
grep "search_string" filename > search_results.txt
bash
- 1
或者,使用管道将两个命令连接起来,查找当前目录下所有包含特定字符串的文件:
grep -rl "search_string" . | less
bash
- 1
这个命令会递归地在当前目录及其子目录中搜索包含"search_string"的文件,并将结果通过管道传递给less命令进行分页查看。
12.3 使用别名简化命令
如果你经常使用某些复杂的命令,可以为其设置别名,从而简化输入。
示例:
alias ll='ls -l' # 定义 ll 为 ls -l 的别名
bash
- 1
注意:别名只在当前终端会话中有效。如果你希望别名永久生效,可以将alias命令添加到你的shell配置文件中(如~/.bashrc)。
12.4 使用环境变量存储常用路径
在Linux中,环境变量用于存储系统或用户级别的配置信息。我们可以利用环境变量来存储常用路径,以便在需要时快速访问。例如,为备份目录设置一个环境变量BACKUP_DIR:
export BACKUP_DIR=/path/to/backup
bash
- 1
以后,我们就可以在需要使用备份目录的地方使用$BACKUP_DIR变量了。
12.5 学习更多命令
Linux终端中有数以百计的命令可供学习和使用。除了本文介绍的基础命令外,还有许多高级命令值得探索。例如:
-
grep
:搜索文件中的文本模式。 -
awk
和sed
:用于文本处理的强大工具。 -
screen
和tmux
:用于管理多窗口终端会话。
十三、实战:打造个人开发环境
掌握了上述文件和目录操作后,我们就可以开始实战演练了。下面,我将引导你打造一个简单的个人开发环境,包括创建项目目录、编写代码文件、设置权限等步骤。
13.1 创建项目目录
首先,我们使用mkdir命令创建一个新的项目目录。例如,创建一个名为MyProject的目录:
mkdir MyProject
bash
- 1
13.2 编写代码文件
接下来,我们使用文本编辑器(如nano、vim等)在MyProject目录下创建一个新的代码文件。例如,创建一个名为main.c的C语言源文件:
cd MyProject nano main.c
bash
- 1
- 2
在nano编辑器中编写你的C语言代码,保存并退出编辑器。
13.3 设置权限
为了确保代码文件的安全性,我们可以使用chmod命令为main.c文件设置合适的权限。例如,只允许所有者读取、写入和执行该文件:
chmod 700 main.c
bash
- 1
13.4 编译和运行代码
最后,我们使用合适的编译器(如gcc)来编译我们的代码,并运行生成的可执行文件。例如,编译main.c文件并运行生成的可执行文件:
gcc main.c -o main ./main
bash
- 1
- 2
如果一切顺利,你应该能够在终端中看到你编写的程序的输出结果。
附:
有关Widows和Linux操作系统的更多知识参见:《Windows、Linux操作系统及常见操作》