Shell是什么?
Shell简介
Shell是操作系统的外壳,是用户与操作系统内核之间的主要接口。它接收用户的命令并将其传递给内核执行,然后将执行结果返回给用户。Shell不仅是一个命令解释器,也是一种强大的编程语言。常见的Shell分为图形界面Shell和命令行Shell两类,如Windows的资源管理器和cmd命令窗口。不同系统有不同的Shell,比如在Linux系统中常见的是Bourne Again Shell(即bash)。
-
在Windows系统中,资源管理器(explorer.exe)是图形Shell,而cmd和PowerShell则是命令行Shell。
Shell脚本
Shell脚本是由一系列Shell命令组成的文件,利用Shell的功能编写的程序。通过编写Shell脚本,用户可以轻松地执行多个命令,实现批量处理和自动化维护。
Shell用途
- 控制进程和文件,以及启动和控制其他程序。
- 减少重复输入和交互操作,实现批量处理和自动化维护,减轻管理负担。
日常使用
常用命令总结
-
ls: 列出当前目录的文件清单。
ls -a
:显示所有文件,包括隐藏文件。ls -l
:显示详细文件信息。
-
cd: 切换当前目录。
cd /
:进入根目录。cd ..
:返回上一级目录。cd -
:返回上一次的目录。
-
pwd: 显示当前工作目录。
-
mkdir 和 rmdir: 创建和删除目录。
mkdir -p /path/to/directory
:递归创建目录。rmdir -p /path/to/directory
:递归删除目录。
-
cp: 复制文件或目录。
cp file1 ../destination
:复制文件到另一个目录。cp file1 file2
:复制并重命名文件。cp -r directory1 directory2
:复制目录并重命名。
-
mv: 移动或重命名文件或目录。
mv file1 ../destination
:移动文件到另一个目录。mv file1 file2
:重命名文件。mv file1 ../destination/file2
:移动并重命名文件。
-
rm: 删除文件或目录。
rm -i
:交互式删除,会提示确认。rm -r
:递归删除目录及其内容。rm -f
:强制删除文件或目录。
-
du 和 df: 显示磁盘使用情况和剩余空间。
du -sh directory
:显示目录总大小。du -sh ./*
:显示当前目录下所有文件和目录的大小。
-
cat: 查看文件内容。
cat file1
:显示文件内容。cat file1 file2 > file3
:合并文件1和文件2,并保存为文件3。
-
head 和 tail: 显示文件头部和尾部。
head -n file
:显示文件的前n行。tail -n file
:显示文件的后n行。tail -f file
:实时查看文件新增内容。
-
wc: 统计文件的行数、字数和字节数。
wc -l
:统计行数。wc -w
:统计字数。wc -c
:统计字节数。
-
grep: 在文件中搜索指定模式。
-
grep 'pattern' file
:在文件中搜索模式。 -
grep 'pattern' file1 file2
:在多个文件中搜索模式。Example:
shell# 在文件中搜索包含指定关键字(`keyword`)的行,并将匹配到的行输出到标准输出。 grep 'keyword' file1 grep 'keyword' file1 file2
-
grep 'keyword' file1
:这个命令在单个文件file1
中搜索包含关键字keyword
的行。grep
命令会打开文件file1
,逐行搜索文件内容,如果找到包含关键字的行,就将该行输出到标准输出。如果file1
中有多个匹配行,它们将以原始顺序输出到标准输出。 -
grep 'keyword' file1 file2
:这个命令与前一个命令类似,但它在两个文件file1
和file2
中搜索关键字keyword
。grep
命令会逐个打开这两个文件,逐行搜索文件内容,如果找到包含关键字的行,就将该行输出到标准输出。如果两个文件中都有匹配行,它们将按照文件顺序先后输出到标准输出。
-
-
-
管道和xargs: 用于命令之间的数据传输和处理。
-
command1 | command2
:将command1的输出作为command2的输入。 -
command | xargs
:将命令输出作为参数传递给另一个命令。Example:
shell# 这段代码是两个常用的Unix/Linux命令行操作的结合,用于查找特定文件并删除它们。 ls | grep keyword find /path/to/directory -name "*.txt" | xargs rm
-
ls | grep keyword
:这个命令首先使用ls
命令列出当前目录下的所有文件和文件夹,然后通过管道|
将其输出传递给grep
命令。grep
命令用于在输入中搜索包含指定模式(即keyword
)的行,并将匹配到的行输出到标准输出。因此,这个命令的作用是在当前目录下搜索包含特定关键字的文件或文件夹。 -
find /path/to/directory -name "*.txt" | xargs rm
:这个命令首先使用find
命令在指定目录下(/path/to/directory
)递归搜索所有以.txt
为后缀的文件,并将搜索到的文件名输出到标准输出。然后,通过管道|
将这些文件名传递给xargs
命令,xargs
命令用于构造和执行命令行命令。在这个例子中,xargs
将每个文件名作为参数传递给rm
命令,rm
命令用于删除文件。因此,这个命令的作用是删除指定目录下所有以.txt
为后缀的文件。
-
-
-
awk: 用于文本处理的强大工具。
-
awk '{print $1}' file
:打印文件的第一列。Example:
shell# 这句命令是一个典型的Unix/Linux命令行管道操作,显示系统中最近5个登录用户的用户名。。 last -n 5 | awk '{print $1}'
-
last
:这是一个用于显示系统登录日志的命令。通常,它会列出系统中所有用户的登录历史记录。如果没有参数指定,它会列出所有的登录历史记录。但是,在这个命令中,使用参数-n 5
,它告诉last
命令只显示最近的5个登录记录。 -
|
:这是一个管道符号,它的作用是将一个命令的输出发送到另一个命令的输入。在这个命令中,它将last
命令的输出传递给awk
命令。 -
awk '{print $1}'
:这是一个用于文本处理和数据提取的强大工具。在这个命令中,awk
将每一行输入作为记录,并根据空格将每行分割成字段(默认情况下,字段分隔符是空格)。{print $1}
表示打印每行的第一个字段。
-
-