🐇明明跟你说过:个人主页
🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》 🏅
🔖行路有良友,便是天堂🔖
目录
一、前言
1、Linux的起源与发展
1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他的初衷只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。然而,当他将这个内核发布在Internet上并开放源代码后,全球各地的程序员开始参与到这个项目中来,共同完善这个内核。最终,这个内核被命名为Linux,这个名字是由Linus Torvalds的名字和Unix操作系统的名字组合而成的。
Linux从一开始就坚持源代码的公开和免费使用,任何人都可以对其进行修改和分发。这种开放性和自由性吸引了大量的开发者和用户,使得Linux逐渐成长并成熟起来。如今,Linux已经发展成为一个性能稳定、功能强大的多用户网络操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。同时,Linux也有上百种不同的发行版,如基于社区开发的Debian、ArchLinux,以及基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
二、 目录与路径
1、相对路径与绝对路径
在Linux中,文件路径用于定位文件或目录在系统层次结构中的位置。路径可以是绝对的,也可以是相对的。
绝对路径
- 绝对路径是从文件系统的根目录(/)开始,一直到要访问的文件或目录的完整路径。它总是以斜杠(/)开头,并明确指定了文件或目录在系统中的确切位置。
- 例如,假设有一个名为example.txt的文件位于/home/user/documents目录下,那么该文件的绝对路径就是/home/user/documents/example.txt。
- 使用绝对路径的好处是它们总是指向同一位置,无论当前工作目录是什么。
相对路径
- 相对路径是从当前工作目录开始,到目标文件或目录的路径。它不包含从根目录到当前工作目录的完整路径,而是仅包含从当前位置到目标位置所需的路径信息。
- 例如,如果当前工作目录是/home/user/documents,并且想要访问同目录下的example.txt文件,那么可以使用相对路径example.txt。如果example.txt位于一个名为subfolder的子目录中,那么相对路径就是subfolder/example.txt。
- 相对路径的好处是它们更加灵活,因为它们依赖于当前工作目录。这使得在编写脚本或程序时能够更轻松地移动和重用文件路径。
2、目录的相关操作
一些比较特殊的标识符
cd (change directory,切换目录)
cd 是 Unix 和 Linux 操作系统中用于切换当前工作目录的命令,其全称为 "change directory"。通过 cd 命令,用户可以轻松地导航到文件系统的不同部分。
示例:
切换到根目录:
cd /
切换到用户的主目录:
cd ~
或者
cd
(不带任何参数的 cd 命令也会切换到用户的主目录)
切换到上一级目录:
cd ..
切换到相对路径的目录:
假设当前目录是 /home/user,并且想要切换到 /home/user/documents:
cd documents
切换到绝对路径的目录:
cd /home/user/documents
切换到之前访问过的目录:
使用 cd - 可以切换到上一个工作目录。
cd -
切换到特定的目录(基于环境变量):
如果有一个环境变量指向某个目录,我们可以直接使用这个环境变量来切换:
cd $MY_DIRECTORY
在使用 cd 命令时,如果目录存在并且有权限访问,那么命令会成功执行,并且当前工作目录会改变。如果目录不存在或者没有访问权限,cd 命令通常会显示一个错误消息。
pwd(显示目前所在的目录)
pwd 是 Unix 和 Linux 操作系统中用于显示当前工作目录(Present Working Directory)的命令。执行 pwd 命令后,会在终端输出当前所在的目录的绝对路径。
当我们在终端中浏览文件系统时,可能会切换到多个不同的目录。有时,为了确认当前所在的确切位置,或者为了在其他命令中使用当前目录的路径,pwd 命令就非常有用了。
示例:
显示当前工作目录:
pwd
执行这个命令后,终端会输出类似 /home/user 这样的路径,表示你当前所在的目录。
在脚本中使用:
如果你正在编写一个脚本,并且需要获取当前工作目录的路径,可以使用 pwd 命令并将其输出赋值给一个变量:
current_dir=$(pwd)
echo "当前目录是: $current_dir"
与其他命令结合使用:
有时,我们可能想要基于当前工作目录的路径来执行其他操作。例如,我们可以使用 pwd 命令的输出作为 cp 或 mv 命令的目标目录:
cp somefile.txt $(pwd)/backup/
这个命令会将 somefile.txt 复制到当前工作目录下的 backup 子目录中。
mkdir(建立新目录)
mkdir 是 Unix 和 Linux 操作系统中用于创建新目录的命令,其全称为 "make directory"。通过 mkdir 命令,用户可以指定一个新的目录名称,并在当前工作目录下创建它。如果提供了完整的路径,那么新目录会在指定的位置创建。
示例:
在当前目录下创建一个新目录:
mkdir newdir
这将在当前工作目录下创建一个名为 newdir 的新目录。
创建多级目录:
默认情况下,mkdir 命令不会创建嵌套的目录结构。但是,我们可以使用 -p 选项来创建多级目录:
mkdir -p dir1/dir2/dir3
这将创建 dir1,并在其中创建 dir2,再在 dir2 中创建 dir3。如果 dir1 或 dir2 已经存在,mkdir 命令不会报错。
设置目录的权限:
在创建目录时,你也可以使用 -m 选项来设置目录的权限模式:
mkdir -m 755 newdir
这将创建一个名为 newdir 的新目录,并设置其权限为 755(即所有者有读/写/执行权限,组用户有读/执行权限,其他用户有读/执行权限)。
在指定路径下创建目录:
我们可以使用完整的路径来指定新目录的位置:
mkdir /path/to/newdir
这将在 /path/to/ 下创建一个名为 newdir 的新目录。
显示创建信息:
使用 -v 选项(verbose,详细模式)可以在创建目录时显示详细信息:
mkdir -v newdir
执行命令后,如果目录成功创建,我们将看到类似于 mkdir: created directory 'newdir' 的输出信息。
rmdir(删除空目录)
rmdir 是 Unix 和 Linux 操作系统中用于删除空目录的命令。与 rm 命令不同,rmdir 只能用于删除空目录,而不能删除文件或包含文件的目录。这是为了确保不会意外地删除重要数据。
示例:
删除一个空目录:
rmdir emptydir
如果 emptydir 是一个空目录,那么这条命令会将其删除。如果目录非空,rmdir 会报错。
删除多个空目录:
我们可以一次指定多个目录来删除它们,只要它们都是空的:
rmdir dir1 dir2 dir3
这将会尝试删除 dir1、dir2 和 dir3,只要它们都是空的。
删除多级空目录:
通常情况下,rmdir 不能用于删除非空目录或包含其他目录的目录。但是,如果我们使用 -p 选项并指定一个多级目录结构,rmdir 会尝试从最深层的子目录开始向上删除,只要每个目录都是空的:
rmdir -p dir1/dir2/dir3
如果 dir3 是空的,并且 dir2 只包含 dir3(没有其他文件或目录),那么 dir2 也会被删除。同样地,如果 dir1 只包含 dir2,那么它也会被删除。
使用通配符删除空目录:
我们可以使用通配符来匹配多个目录名,并删除它们,只要它们是空的:
rmdir emptydir*
这将会删除所有以 emptydir 开头的空目录。
请注意,rmdir 命令在删除目录时不会询问确认,因此在使用它时要格外小心,以免意外删除重要目录。在删除目录之前,最好先使用 ls 命令检查目录是否为空,或者使用 find 命令结合 -empty 选项来查找并删除空目录。
三、文件与目录管理
1、文件与目录查看(ls)
ls 是 Unix 和 Linux 操作系统中用于列出目录内容的命令,全称为 "list"。通过 ls 命令,用户可以查看当前工作目录或指定目录中的文件和子目录列表。
基本用法
列出当前工作目录的内容:
ls
执行此命令后,会在终端显示当前目录下的所有文件和子目录。
常用选项
列出详细信息:
使用 -l 选项可以以长格式显示文件和目录的详细信息,包括权限、所有者、大小、最后修改时间等。
ls -l
列出隐藏文件:
在 Unix 和 Linux 中,以点(.)开头的文件被视为隐藏文件。使用 -a 选项可以显示所有文件和目录,包括隐藏文件。
ls -a
以人类可读的格式显示文件大小:
使用 -h 选项可以以 KB、MB、GB 等单位显示文件大小,使其更易于阅读。
ls -lh
逆序排列:
使用 -r 选项可以将文件和目录按照逆序排列。
ls -r
按时间排序:
使用 -t 选项可以按照文件的修改时间排序。最近的文件将首先显示。
ls -lt
以目录优先排序:
默认情况下,ls 会先列出文件,然后列出目录。使用 -d 选项可以仅列出目录本身,而不是其内容。
ls -d */
使用颜色区分不同类型的文件:
大多数现代版本的 ls 默认使用颜色来区分目录(通常是蓝色)、可执行文件(通常是绿色)等。如果想要禁用颜色,可以使用 --color=never 选项;如果想要强制启用颜色,可以使用 --color=always。
结合使用
可以组合多个选项来定制 ls 的输出。例如,要以长格式列出当前目录的所有文件和目录,并按修改时间排序,可以使用:
ls -lt
指定目录
还可以使用 ls 命令来查看其他目录的内容,只需在命令后面跟上目录的路径即可:
ls /path/to/directory
这将列出 /path/to/directory 目录下的文件和子目录。
2、复制、删除、与移动:cp、rm、mv
cp、rm、mv 是 Unix 和 Linux 操作系统中用于复制、删除和移动文件或目录的命令。
1. cp 命令(复制):
- 功能:用于复制文件或目录。
- 基本语法:cp [选项] 源文件或目录 目标文件或目录
- 常用选项:
- -i:交互式复制,在覆盖文件前询问用户。
- -r 或 -R:递归复制,用于复制目录及其内容。
- -u:更新复制,只有当源文件比目标文件新,或者目标文件不存在时,才复制文件。
- -a:归档复制,复制文件和目录,同时保持其原有属性。
- 例子:cp original.txt copy.txt 将 original.txt 复制为 copy.txt。
2. rm 命令(删除):
- 功能:用于删除文件或目录。
- 基本语法:rm [选项] 文件或目录
- 常用选项:
- -r 或 -R:递归删除,用于删除目录及其内部的所有文件和子目录。
- 注意事项:使用 rm 命令删除文件或目录是永久性的,无法恢复,因此在使用时要格外小心,确保不会误删重要数据。
- 例子:rm test.txt 删除名为 test.txt 的文件;rm -r directory_name 删除名为 directory_name 的目录及其内部的所有文件和子目录。
3. mv 命令(移动或重命名):
- 功能:用于移动文件或目录,或者重命名文件或目录。
- 基本语法:mv [选项] 源文件或目录 目标位置或新名称
- 常用选项:
- -i:交互式移动,在覆盖文件前询问用户。
- -u:更新移动,只有当源文件比目标文件新,或者目标文件不存在时,才移动文件。
- 例子:mv file.txt /path/to/directory 将 file.txt 移动到指定目录;mv old_filename new_filename 将 old_filename 重命名为 new_filename。
3、rm(删除文件或目录)
rm 是 Unix 和 Linux 系统中用于删除文件或目录的命令。使用 rm 命令时必须小心,因为删除的文件或目录将无法恢复。
基本用法
删除单个文件:
rm filename
这将删除名为 filename 的文件。
删除多个文件:
rm file1 file2 file3
这将删除 file1、file2 和 file3 这三个文件。
删除目录(需要递归选项 -r 或 -R):
rm -r directoryname
这将删除名为 directoryname 的目录及其包含的所有文件和子目录。
常用选项
-r 或 -R:递归删除,用于删除目录及其内容。
rm -r dir
-f:强制删除,不询问确认。
rm -f file
这将强制删除文件,不会询问是否确定删除。
-i:交互式删除,在删除每个文件或目录之前询问确认。
rm -i file
在删除 file 之前,系统会询问你是否确定要删除。
--preserve-root:当尝试删除根目录(/)时,使用这个选项可以确保 rm 不会删除根目录。
四、文件内容查看
在Linux中,查看文件主要有以下几个命令
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出tac是cat的倒着写
- nl 显示的时候,同时输出行号
- more 一页一页的显示文件内容
- less 与more类似,但是比more更好的是,它可以往前翻页
- head 只看前面几行
- tail 只看后面几行
- od 以二进制的方式读取文件内容
1、直接查看文件内容 (cat tac nl)
在Unix和Linux系统中,cat、tac和nl是用于直接查看文件内容的常用命令。这些命令提供了不同的方式来查看和显示文件内容
cat 命令
cat(concatenate的缩写)命令用于连接并显示文件的内容。它是最简单、最常用的文件查看命令之一。
基本语法:
cat [选项] 文件名
常用选项:
- -n:对输出的每一行进行编号。
- -b:只对非空行进行编号。
- -s:当遇到有连续两行或两行以上的空白行时,就代换为一行的空白行。
例子:
cat file.txt # 显示file.txt的内容
cat -n file.txt # 显示file.txt的内容,并对每一行进行编号
tac 命令
tac命令是cat命令的反向版本,它会按文件内容的逆序显示。也就是说,它会先显示文件的最后一行,然后是倒数第二行,依此类推。
基本语法:
tac 文件名
例子:
tac file.txt # 显示file.txt的内容,但顺序是反向的
nl 命令
nl(number lines的缩写)命令用于显示文件内容,并且会在每一行前加上行号。
基本语法:
nl [选项] 文件名
常用选项:
- -b:指定行号指定的方式,主要有两种:
- -b a 或 --body-numbering:除了空白行不编号外,其他行都编号(默认)。
- -b t 或 --tail-numbering:空白行不编号,编号从第一个非空行开始。
- -n:设置行号的显示格式。
- -n ln:在行号字段最左端显示。
- -n rn:在行号字段最右边显示,且不加0。
- -n rz:在行号字段最右边显示,且加0。
- -w:行号字段占用的位数。
例子:
nl file.txt # 显示file.txt的内容,并在每行前加上行号
nl -b t -n rz -w 3 file.txt # 显示file.txt的内容,从第一个非空行开始编号,行号右对齐且加0,行号字段占3位
这些命令都允许通过管道(|)与其他命令结合使用,以执行更复杂的文本处理任务。例如,可以使用grep来过滤文件内容,然后再通过cat、tac或nl来查看或格式化输出。
2、可翻页查看(more、less)
在Unix和Linux系统中,more和less命令用于分页查看文件内容,特别适用于查看大文件。这两个命令允许用户逐页浏览文件,同时提供了搜索和导航功能。
more 命令
more命令用于分页显示文件内容。当使用more命令打开文件时,它会显示文件的第一页内容,并在底部显示当前页码和可用操作。
基本语法:
more 文件名
常用操作:
- 空格键:向下滚动一页。
- 回车键:向下滚动一行。
- b 键:向上滚动一页(back)。
- = 键:显示当前行号。
- q 键:退出more命令。
例子:
more largefile.txt
less 命令
less命令比more命令更加强大和灵活,它提供了更多的导航和搜索选项。less命令在显示文件内容时允许用户向前和向后翻页,以及进行搜索。
基本语法:
less 文件名
常用操作:
- 空格键:向下滚动一页。
- b 键或 Page Up 键:向上滚动一页。
- 回车键:向下滚动一行。
- k 键或上箭头键:向上滚动一行。
- / 键:后跟搜索词,向前搜索。
- n 键:重复前一个搜索(next)。
- ? 键:后跟搜索词,向后搜索。
- N 键:反向重复前一个搜索。
- = 键:显示当前行号。
- g 键:跳转到文件的第一行。
- G 键:跳转到文件的最后一行。
- q 键:退出less命令。
例子:
less largefile.txt
在less命令中,我们还可以使用上下箭头键来逐行滚动,以及使用Page Up和Page Down键来快速翻页。
比较
- more命令比较简单,主要用于分页查看文件,但不支持向后翻页或搜索功能。
- less命令则更为强大,不仅支持分页查看,还提供了向后翻页、搜索以及更复杂的导航功能。
通常,对于大文件或需要更强大功能的场景,推荐使用less命令。而对于简单的分页查看,more命令就足够了。这两个命令都是文本模式操作,因此在没有图形界面的环境中特别有用。
3、数据截取(head、tail)
在Unix和Linux系统中,head和tail命令用于从文件的开头或结尾截取数据。这两个命令通常用于快速查看文件的开头或结尾部分,或者用于从文件中提取特定的行数。
head 命令
head命令用于输出文件的开头部分。默认情况下,它会显示文件的前10行。
基本语法:
head [选项] 文件名
常用选项:
- -n <行数>:指定要显示的行数。
- -c <字节数>:指定要显示的字节数。
例子:
- head file.txt # 显示file.txt的前10行
- head -n 20 file.txt # 显示file.txt的前20行
- head -c 100 file.txt # 显示file.txt的前100个字节
tail 命令
tail命令与head命令相反,它用于输出文件的结尾部分。同样,默认情况下,它会显示文件的后10行。
基本语法:
tail [选项] 文件名
常用选项:
- -n <行数>:指定要显示的行数。
- -f:实时追踪文件内容的变化并显示。常用于查看日志文件。
- -c <字节数>:指定要显示的字节数。
例子:
tail file.txt # 显示file.txt的后10行
tail -n 30 file.txt # 显示file.txt的后30行
tail -f logfile.txt # 实时查看logfile.txt的末尾内容(常用于监控日志)
tail -c 150 file.txt # 显示file.txt的后150个字节
tail -f选项特别有用,因为它允许你实时地查看文件的变化,这在监控日志文件或其他动态更新的文件时非常有帮助。例如,当系统管理员想要实时查看服务器日志文件以监控潜在问题时,可以使用tail -f命令。
4、非纯文本文件读取(od)
非纯文本文件读取在Unix和Linux系统中,通常使用od(Octal Dump)命令。od命令用于以八进制、十进制、十六进制或其他格式转储文件内容。这对于查看非纯文本文件(如二进制文件)特别有用,因为这类文件无法被常规的文本查看命令(如cat、more、less等)正确显示。
基本语法:
od [选项] 文件名
常用选项:
- -t:指定输出格式。可以使用a(默认字符)、c(ASCII字符)、d[size](十进制)、f[size](浮点数)、o[size](八进制)、x[size](十六进制)等。
- -A:指定地址基数。例如,x表示十六进制。
- -w:指定输出宽度。
- -v:显示不可打印字符。
例子:
od -t c file.bin # 以ASCII字符格式显示file.bin的内容
od -t x1 file.bin # 以十六进制格式显示file.bin的内容,每个字节占一个十六进制数
od -A x -t x1 file.bin # 以十六进制地址和十六进制格式显示file.bin的内容
使用od命令时,我们可以通过-t选项指定输出格式。例如,-t c会以ASCII字符格式显示文件内容,这对于查看包含可打印字符的二进制文件很有用。而-t x1则会以十六进制格式显示每个字节的内容,这对于分析文件结构和内容特别有帮助。
5、创建新文件(touch)
在Unix和Linux系统中,touch命令用于创建新的空文件或更新现有文件的访问和修改时间戳。如果指定的文件不存在,touch命令会创建一个新的空文件;如果文件已经存在,touch命令会更新该文件的访问和修改时间戳。
基本语法:
touch 文件名
例子:
touch newfile.txt # 创建名为newfile.txt的新文件
touch existingfile.txt # 更新existingfile.txt的访问和修改时间戳
当使用touch命令创建一个新文件时,这个文件不包含任何内容,它的大小是0字节。但是,这个文件现在存在于文件系统中,并且具有一个与之关联的时间戳。
除了创建新文件外,touch命令还常用于以下几种情况:
- 占位符文件:在某些情况下,我们可能需要创建一个空文件作为占位符,以便稍后进行填充或用于某种特定的目的。
- 确保脚本中的文件存在:在编写脚本时,我们可能希望在操作文件之前确保它确实存在。如果文件不存在,可以使用touch命令创建它。
- 更新时间戳:如果我们想要更新文件的访问和修改时间戳,而不需要修改文件的内容,可以使用touch命令。这对于某些需要基于时间戳进行操作的场景(如日志轮转)很有用。
6、文件默认权限(umask)
在Unix和Linux系统中,文件的默认权限是通过umask(用户文件创建权限掩码)来控制的。umask命令用于设置文件和目录的默认权限掩码,从而决定新建文件或目录的默认权限。
需要了解的是,在没有umask的情况下,文件的默认权限为0666(即所有用户都具有读写权限,但没有执行权限),而文件夹的默认权限为0777(即所有用户都具有读、写和执行权限)。然而,系统为了保护用户创建文件和文件夹的权限,会引入一个默认的用户掩码(umask)。
umask的值是一个三位八进制数,用于禁用文件或目录的默认权限。当创建新文件或目录时,系统会根据文件类型(文件或目录)和umask值来确定其默认权限。具体来说,umask的值会从默认权限中“减去”,从而得到文件或目录的实际默认权限。
例如,如果umask设置为022,那么新建文件的默认权限将是0666-022=0644(即所有者具有读写权限,而组用户和其他用户只有读权限)。对于文件夹,由于需要执行权限来打开文件夹,所以默认权限会从0777中减去umask值,得到0755(即所有者具有读、写和执行权限,而组用户和其他用户只有读和执行权限)。
用户可以通过在shell中直接运行umask命令来查看当前shell的umask值。如果需要修改umask值,可以使用umask命令后跟上新的umask值来设置。例如,umask 022会将umask设置为022。
7、文件的隐藏属性(chattr)
在Linux系统中,文件的隐藏属性可以通过chattr命令进行修改。这些隐藏属性对于系统安全尤为重要,它们提供了额外的保护机制,防止文件被误操作或恶意篡改。
chattr命令的语法格式是:chattr [+-=][选项] 文件或目录名称。其中,+表示增加某个特殊参数,-表示删除某个特殊参数,=表示直接设置参数。
这些隐藏属性包括:
- A:当设置了A属性后,存取文件或目录时不会修改其存取时间(atime),有助于避免I/O较慢的机器过度读写磁盘。
- S:设置S属性后,对文件的修改会同步写入磁盘,确保数据的一致性。
- a:文件只能增加数据,不能删除或修改数据,只有root用户才能设置此属性。
- c:文件会自动压缩,读取时会自动解压缩,有助于节省存储空间。
- i:设置此属性后,文件不能被修改或删除,增加了文件的安全性。
8、文件的查找(find)
在Linux系统中,find命令是用于查找文件和目录的强大工具。它可以根据各种条件,如文件名、文件类型、大小、修改时间等,来搜索指定的目录树。
基本语法:
find [路径] [表达式]
常用选项:
- -name:按文件名查找。
- -type:按文件类型查找,如普通文件(f)、目录(d)、符号链接(l)等。
- -size:按文件大小查找。
- -user:按文件所有者查找。
- -mtime:按文件修改时间查找。
- -exec:对查找到的文件执行指定的shell命令。
例子:
查找当前目录及其子目录下所有名为example.txt的文件:
find . -name example.txt
查找/etc目录下所有以.conf结尾的文件:
find /etc -name "*.conf"
查找/home/user目录下所有大小为100MB的文件:
find /home/user -size 100M
查找最近7天内被修改过的文件:
find . -mtime -7
查找所有者为john的文件,并删除它们:
find / -user john -exec rm {} \;
注意:上面的删除命令需要谨慎使用,因为它会删除所有匹配的文件。在实际应用中,最好先使用find命令查找文件,确认无误后再执行删除操作。
查找所有空文件并删除它们:
find . -type f -empty -exec rm {} \;
结合多个条件查找,例如查找/var目录下所有最近7天内修改过且大小为100MB至200MB之间的文件:
find /var -size +100M -size -200M -mtime -7
find命令非常灵活,它允许你组合多个条件来精确查找你需要的文件。同时,通过-exec选项,我们可以对查找到的文件执行几乎任何shell命令,这使得find命令在自动化脚本和系统管理中非常有用。
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!