目录
一、Shell介绍
Shell是Linux系统中的一种特殊程序,位于用户和内核之间,充当“翻译官”;登录Linux系统时,自动加载一个Shell程序,它的功能是它接收用户发来的命令,将命令解释为机器语言,然后传递给内核来调用相应的硬件资源。
Bash是Linux系统中默认使用的Shell程序,路径是 ./bin/bash
二、Linux命令的分类
1、内部命令与外部命令
内部命令 | 外部命令 |
---|---|
集成于Shel解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行/bin,/usr/bin,/usr/local/bin等 |
1)切换工作目录
格式 | 说明 |
---|---|
cd 目标位置 | 切换到目标位置 |
cd ~ cd | 若不指定目标位置,切换到当前用户的宿主目录 |
cd - | 切换到上一次执行 cd 命令之前所在的目录 |
2)绝对路径:以“/”根目录为起始的
3)相对路径
表现形式 | 说明 | 示例 |
---|---|---|
直接使用目录名或文件名 | 表示当前工作目录中的子目录、文件的位置 | grub.conf |
以一个点号“.”开头 | 表示以当前的工作目录作为起点 | ./grub.conf |
以两个点号“..”开头 | 表示以当前目录的上一级目录(父目录)作为起点 | ../vmlinuz |
以“~用户名”形式开头 | 表示以指定用户的宿主目录作为起点 | ~teacher |
以“~”形式开头 | 表示以当前用户的宿主目录作为起点 | ~ |
三、Linux常用命令
1、查看及切换目录
1)pwd命令
pwd
命令是Linux和Unix系统中的一个常用命令,用于显示当前工作目录的完整路径。pwd
是"print working directory"的缩写。
使用pwd
命令,你可以快速地确定当前所处的位置,以及相对于根目录的路径。它在命令行界面下特别有用,可以帮助用户了解自己在文件系统中的位置,方便进行文件和目录操作。
通常情况下,当你在终端输入pwd
并按下回车键时,系统会立即返回当前工作目录的完整路径。
例如,如果你在/home/user1/Documents目录下运行pwd
命令,系统会返回/home/user1/Documents
,指示你当前的工作目录是在用户user1的Documents目录下。
pwd
pwd
命令不需要任何参数,只是简单地打印出当前工作目录的路径。
2)ls命令
ls命令是Linux和Unix系统中常用的一个命令,用于列出文件和目录的信息。以下是ls命令的一些常见选项:
- -l:以长格式显示文件和目录的详细信息,包括文件权限、所有者、大小、修改时间等。
- -a:显示所有文件和目录,包括隐藏文件(以点开头的文件)。
- -h:以人类可读的方式显示文件和目录的大小,例如使用K、M、G等单位。
- -r:反向排序,按照字母顺序逆序排列文件和目录。
- -t:按照修改时间排序,最新修改的文件和目录显示在前面。
- -R:递归显示所有子目录及其内容。
- -i:显示文件和目录的inode号码。
使用ls命令可以快速查看当前目录下的文件和目录,也可以结合其他命令进行筛选和操作,是日常系统管理和文件浏览的重要工具之一。如果需要查看更多关于ls命令的信息,可以通过man ls命令查看详细的帮助文档。
3)cd命令
cd命令是Linux和Unix系统中的一个常用命令,用于改变当前工作目录。cd是"change directory"的缩写。
使用cd命令,你可以快速地在文件系统中导航,进入到其他目录或者返回上一级目录。
cd命令的基本用法很简单,只需在终端中输入cd命令,后面跟着要进入的目录路径。如果路径是相对路径,则相对于当前工作目录进行导航;如果路径是绝对路径,则直接进入到指定的目录。
常见的`cd`命令选项包括:
- cd ..:返回到上一级目录。
- cd ~或者cd:返回到当前用户的主目录(home目录)。
- cd -:返回到之前所在的目录。
- cd directory_name:进入到指定的目录。
- cd /path/to/directory:进入到绝对路径所指定的目录。
例如,如果你当前在/home/user1目录下,想要进入到Documents目录,你可以运行
cd Documents
cd命令是在命令行界面下进行文件和目录导航的重要工具,能够帮助用户快速定位到需要操作的目录。
4)alias命令
alias命令用于创建或显示命令别名,可以简化长命令的输入或者将一些常用的选项设置为默认值。在Linux和Unix系统中,用户可以通过alias命令将一个长的命令或者一系列参数绑定到一个简短的名称上,从而提高工作效率。
以下是alias命令的一些常见用法和选项:
alias
:不带任何参数时,直接输入alias命令会显示当前系统中定义的所有别名列表。alias name='command'
:用于创建一个新的别名。其中,name是你为命令设置的别名,command是你要关联的原始命令或命令序列。unalias name
:用于删除指定的别名。-p
:显示当前shell中的所有别名。
例如,你可以使用alias命令将常用的长命令简化为一个短别名,比如:
alias ll='ls -l'
这样,以后只需输入ll
即可代替ls -l
来列出当前目录的详细信息。
需要注意的是,通过alias创建的别名只在当前shell会话中有效,如果想要永久保存别名,可以将其添加到shell的配置文件(如~/.bashrc或~/.bash_profile)中。
5)du命令
du
命令用于显示文件和目录的磁盘使用情况。它会递归地统计指定目录及其子目录下所有文件的磁盘空间占用情况,并以可读的方式输出结果。以下是du
命令的一些常见用法和选项:
du [选项] [文件或目录]
:统计指定文件或目录的磁盘使用情况。-h
:以人类可读的方式显示文件大小,使用K、M、G等单位。-s
:仅显示每个指定文件或目录的总计磁盘使用情况,而不显示具体每个子目录的大小。-c
:在显示最后的总计磁盘使用情况时,同时显示所有指定文件或目录的总计。-a
:显示所有文件和目录的磁盘使用情况,包括隐藏文件。--max-depth=N
:限制显示的目录层级深度,只显示到指定深度的目录磁盘使用情况。
例如,要查看当前目录下所有文件和子目录的磁盘使用情况,可以简单地运行du -h
命令。如果要查看特定目录的使用情况,可以指定目录作为参数,例如
du -h /path/to/directory
du
命令对于了解文件和目录占用的磁盘空间情况非常有用,特别是在需要释放磁盘空间或者查找大文件时。
2、创建目录和文件
1)mkdir命令
mkdir
命令是Linux和Unix系统中的一个常用命令,用于创建新的目录。mkdir
是"make directory"的缩写。
使用mkdir
命令,你可以在文件系统中创建一个新的空目录,可以指定目录的名称以及路径。如果未指定路径,默认会在当前工作目录下创建新目录。
mkdir
命令的基本用法很简单,只需在终端中输入mkdir
命令,后面跟着要创建的目录名称。如果要在指定的路径下创建目录,则在命令后面加上路径。
常见的mkdir
命令选项包括:
-p
:递归创建目录,即如果指定的目录路径中的某些父目录不存在,会一并创建它们。-m mode
:设置新目录的权限模式(权限掩码),例如-m 755
。--mode=mode
:另一种设置新目录权限模式的方式,例如--mode=755
。
例如,要在当前工作目录下创建一个名为"new_directory"的新目录,你可以运行
mkdir new_directory
如果你想在/home/user1目录下创建一个名为"new_directory"的新目录,可以运行
mkdir /home/user1/new_directory
mkdir
命令是在命令行界面下创建新目录的常用工具,非常有用于组织文件和目录结构。
2)touch命令
touch
命令是Linux和Unix系统中的一个常用命令,用于创建新的空文件或者更新已有文件的访问时间和修改时间。
使用touch
命令,你可以快速地创建一个新的空文件,或者更改已有文件的时间戳。如果指定的文件不存在,touch
命令会创建一个新的空文件;如果文件已经存在,touch
命令会更新该文件的访问时间和修改时间为当前时间。
touch
命令的基本用法很简单,只需在终端中输入touch
命令,后面跟着要创建或者更新的文件名称。
常见的touch
命令选项包括:
-a
:只更新访问时间。-c
:不创建任何文件,只是检查指定的文件是否存在,不存在则不进行任何操作。-m
:只更新修改时间。-r file
:将指定文件的时间戳复制到新创建的文件上。-t time
:使用指定的时间设置新文件的时间戳,格式为[[CC]YY]MMDDhhmm[.ss]。
例如,要创建一个名为"new_file.txt"的新文件,你可以运行
touch new_file.txt
如果你想将一个已有文件"existing_file.txt"的时间戳更新为当前时间,可以运行
touch existing_file.txt
touch
命令在命令行界面下创建和更新文件的时间戳非常方便,也是一种常用的文件操作工具。
3)In命令
ln
命令是Linux和Unix系统中的一个常用命令,用于创建链接(link)。它的作用是创建一个文件的链接,让一个文件指向另一个文件或目录,这样在文件系统中就会出现两个文件名指向同一个文件或目录,从而实现文件或目录的共享。
ln
命令主要有两种类型的链接:
-
硬链接(Hard Link):硬链接是文件系统中的一个普通文件,它指向了文件系统中的另一个文件。如果你删除了原始文件,硬链接仍然存在,并且可以继续访问原始文件的内容。硬链接不能指向目录,并且不能跨越文件系统边界创建链接。硬链接与源文件inode号一致。
-
符号链接(Symbolic Link,也称为软链接):符号链接是一个特殊类型的文件,它包含了另一个文件或目录的路径。符号链接类似于Windows系统中的快捷方式,它指向了另一个文件或目录的路径,而不是文件本身。如果原始文件或目录被删除或移动,符号链接就会失效。符号链接可以指向文件或目录,也可以跨越文件系统边界创建链接。软链接与源文件inode号不一致。
ln
命令的基本用法如下:
ln [options] <target> <link_name> #target是要创建链接的目标文件或目录,link_name是链接的名称。
常见的ln
命令选项包括:
-s
:创建符号链接(软链接)。-f
:强制创建链接,如果目标已存在,则覆盖它。-d
:允许超级用户创建指向目录的硬链接。-i
:在覆盖现有文件之前进行确认提示。-v
:显示创建链接的详细信息。
例如,要创建一个指向文件"file.txt"的硬链接"hard_link.txt",可以运行以下命令:
ln file.txt hard_link.txt
要创建一个指向目录"directory"的符号链接"symbolic_link",可以使用-s
选项:
ln -s directory symbolic_link
ln
命令是在命令行界面下管理文件系统链接的常用工具,可以用于创建硬链接和符号链接,实现文件共享和管理。
3、复制、删除、移动目录和文件
1)cp命令
cp
命令是Linux和Unix系统中的一个常用命令,用于复制文件和目录。
cp
命令的基本语法如下:
cp [options] <source> <destination>
其中,source
是要复制的源文件或源目录,destination
是目标位置,即复制后的文件或目录的名称或路径。
常见的cp
命令选项包括:
-r
:递归复制目录及其内容。-i
:在覆盖现有文件之前进行确认提示。-f
:强制复制,如果目标已存在,则覆盖它。-p
:保持属性一致。-a
:效果= -rp-v
:显示复制过程中的详细信息。
以下是一些常见的cp
命令示例:
-
复制文件到目标位置:
cp file.txt destination/file.txt
-
复制多个文件到目标目录:
cp file1.txt file2.txt directory/
-
递归复制目录及其内容:
cp -r directory/ destination/
-
复制目录及其内容,并显示详细信息:
cp -rv directory/ destination/
cp
命令可以用于文件和目录的复制,是一个非常实用的命令行工具。它可以帮助你在Linux系统中快速、灵活地进行文件和目录的复制操作。
2)rm命令
rm
命令是Linux和Unix系统中的一个常用命令,用于删除文件或目录。
rm
命令的基本语法如下:
rm [options] <file1> <file2> ... #file1、file2等参数是要删除的文件或目录的名称
常见的rm
命令选项包括:
-i
:在删除每个文件之前进行确认提示。-r
或-R
:递归删除目录及其内容。-f
:强制删除,忽略不存在的文件,不给出任何提示。-v
:显示删除过程中的详细信息。
以下是一些常见的rm
命令示例:
-
删除单个文件:
rm file.txt
-
删除多个文件:
rm file1.txt file2.txt
-
递归删除目录及其内容:
rm -r directory/
-
删除文件并显示详细信息:
rm -v file.txt
-
强制删除文件,不给出任何提示:
rm -f file.txt
注意:使用rm
命令要非常小心,因为删除的文件通常无法恢复。确保在执行rm
命令之前仔细检查文件列表,并且谨慎使用-f
选项,以免意外删除重要文件。不要使用rm -rf /*命令!
3)mv命令
mv
命令是Linux和Unix系统中的一个常用命令,用于移动文件或重命名文件。
mv
命令的基本语法如下:
mv [options] <source> <destination>
其中,source
是要移动或重命名的源文件或源目录,destination
是目标位置,即移动后的文件或目录的名称或路径。
常见的mv
命令选项包括:
-i
:在移动文件之前进行确认提示。-f
:强制执行,如果目标已存在,则覆盖它而不提示。-v
:显示移动过程中的详细信息。
以下是一些常见的mv
命令示例:
-
移动文件到目标位置:
mv file.txt destination/file.txt
-
重命名文件
mv oldname.txt newname.txt
-
移动目录到目标位置:
mv directory/ destination/
-
移动文件并显示详细信息:
mv -v file.txt destination/file.txt
-
强制移动文件,不给出任何提示:
mv -f file.txt destination/file.txt
mv
命令不仅可以用于文件的移动,还可以用于文件的重命名,是一个非常实用的命令行工具。
4、查找目录和文件
1)which命令
which
命令是Linux和Unix系统中的一个常用命令,用于查找指定命令的可执行文件的路径。
which
命令的基本语法如下:
which [options] <command>
其中,command
是要查找的命令名称。
which
命令会在系统的环境变量 $PATH
所列出的目录中搜索指定的命令,并返回匹配的可执行文件的路径。如果找到多个匹配项,which
命令只会返回第一个匹配项。
以下是一些常见的which
命令示例:
-
查找命令的可执行文件路径:
which ls
输出示例:
/bin/ls
-
查找命令的可执行文件路径,并显示详细信息:
which -a python
输出示例:
/usr/bin/python /usr/local/bin/python
-
查找命令是否存在:
which grep
如果找到匹配项,将输出可执行文件的路径;如果找不到匹配项,将没有任何输出。
which
命令对于确定系统中是否已安装特定命令及其可执行文件的位置非常有用。它可以帮助用户在终端中快速找到要执行的命令的路径。
2)whereis命令
whereis
命令是Linux和Unix系统中的一个常用命令,用于查找指定命令的可执行文件、源代码和帮助文档的位置。
whereis
命令的基本语法如下:
whereis [options] <command>
其中,command
是要查找的命令名称。
whereis
命令会在默认的系统目录中搜索指定命令的可执行文件、源代码和帮助文档。它会搜索以下三个类型的文件:
- 可执行文件(binaries):存放命令的可执行文件。
- 源代码文件(sources):存放命令的源代码文件。
- 手册页文件(man pages):存放命令的帮助文档。
以下是一些常见的whereis
命令示例:
-
查找命令的可执行文件、源代码和帮助文档的位置:
whereis ls
输出示例:
ls: /bin/ls /usr/share/man/man1/ls.1.gz
-
只查找命令的可执行文件的位置:
whereis -b python
输出示例:
python: /usr/bin/python
-
只查找命令的帮助文档的位置:
whereis -m grep
输出示例:
grep: /usr/share/man/man1/grep.1.gz
whereis
命令对于快速定位命令的可执行文件、源代码和帮助文档的位置非常有用。它可以帮助用户了解命令所在的目录,以便进一步进行操作或查阅帮助文档。
3)locate命令
locate
命令是Linux系统中的一个用于查找文件的工具。它通过搜索系统中已建立的数据库,快速定位文件的位置。locate
命令比find
命令快速,因为locate
命令只搜索文件名,而不搜索文件内容。
基本的locate
命令语法如下:
locate [options] <pattern>
其中,pattern
是要搜索的文件名模式。
默认情况下,locate
命令会搜索整个文件系统中与指定模式匹配的文件,并输出它们的路径。
以下是一些常见的locate
命令示例:
-
搜索以
.conf
为扩展名的所有文件:locate '*.conf'
-
搜索以
nginx
开头的所有文件:locate 'nginx*'
-
搜索包含
log
关键字的文件:locate '*log*'
-
搜索以
test
开头且以.txt
为扩展名的文件:locate 'test*.txt'
locate
命令在搜索文件时非常快速,并且可以在大型文件系统中快速定位文件。但是需要注意的是,locate
命令的搜索结果可能不是实时的,因为它依赖于预先构建的数据库。因此,如果在数据库中没有及时更新,可能会导致搜索结果不准确。为了更新数据库,可以使用updatedb
命令手动更新或者设置定时任务来自动更新数据库。
4)find命令
find
命令是Linux和Unix系统中一个功能强大的文件搜索工具,可以根据指定的条件在文件系统中搜索文件和目录。它支持多种搜索条件和选项,可以根据文件名、文件类型、文件大小、权限等进行搜索。
基本的find
命令语法如下:
find <path> [options] [expression]
其中,path
是要搜索的目录路径,可以指定多个路径。如果不指定路径,则默认从当前目录开始搜索。
options
是一些控制搜索行为的选项,例如指定搜索深度、限制搜索结果数量等。
expression
是搜索条件,可以是文件名模式、文件类型、文件大小等。expression
可以是单个条件,也可以是多个条件的组合。
-type
:按照文件类型进行搜索,type
可以是f
(普通文件)、d
(目录)、l
(符号链接)等。-size [+|-][单位]
:按照文件大小进行搜索,+
表示大于,-
表示小于,size
是大小,单位可以是k
(千字节)、M
(兆字节)等。-user username
:按照文件属主进行搜索。-mtime days
:按照文件的修改时间进行搜索,days
是天数,表示文件最后修改时间距今的天数。-atime days
:按照文件的访问时间进行搜索,days
是天数,表示文件最后访问时间距今的天数。-ctime days
:按照文件的状态改变时间进行搜索,days
是天数,表示文件状态最后改变时间距今的天数。-exec command {} \;
:对搜索到的每个文件执行指定的命令,{}
会被替换为文件名,\;
表示命令结束。-a
:对多个表达式进行逻辑与操作。-o
:对多个表达式进行逻辑或操作。
以下是一些常见的find
命令示例:
-
在当前目录下搜索所有文件和目录:
find .
-
在指定目录下搜索以
.txt
为扩展名的文件:find /path/to/directory -name '*.txt'
-
在用户家目录下搜索所有以
.jpg
为扩展名的文件,并删除它们:find ~/ -name '*.jpg' -delete
-
在根目录下搜索所有大于1MB的文件:
find / -size +1M
-
在当前目录下搜索所有类型为普通文件(Regular File)且具有可执行权限的文件:
find . -type f -executable
find
命令非常灵活,可以根据实际需求组合不同的选项和表达式来实现各种搜索操作。它是系统管理员和用户进行文件管理和搜索的重要工具之一。
思考:如何运用上述命令搜索到Linux系统中最大文件?