,家人们
点击上方蓝字关注我
上篇文章,我们介绍了 Shell 中的很多基础概念,Shell、终端、环境变量和一些基本的命令,今天我们继续。
概念解释
先把基础概念讲一下,然后我们再来实践。
Shell 中的路径是什么
在 Shell 中,路径(path)是用来表示文件或目录在文件系统中的位置的一种方式。路径可以是绝对路径或相对路径,每种路径都有其特定的表示方法。
绝对路径是从文件系统的根目录开始,一直精确到目标文件或目录的完整路径,它不依赖于当前的工作目录。
以大家熟悉的 Windows 为例:
C:UsersuserDocumentsfile.txt
表示从 C 盘根目录 C: 开始,依次进入 Users 目录、user 目录,最后到达 Documents 目录下的 file.txt 文件,这一大长串就是绝对路径。
相对路径是相对于当前工作目录(就像上篇文章中的 Home)的路径。它不需要从根目录开始,而是从当前目录出发,到达目标文件或目录,相对路径依赖于当前工作目录。
如果当前工作目录是:
/home/user
下面的相对路径实际上表示的路径就是工作目录 + 相对路径,也就是:/home/user/documents/file.txt
documents/file.txt
Win 和 Linux 下路径的区别
Windows 和 Linux 的路径在表示方式和一些基本概念上有显著的区别。
1.路径分隔符不同
Windows:使用反斜杠 作为路径分隔符:
C:UsersuserDocumentsfile.txt。
Linux 和 macOS:使用正斜杠 / 作为路径分隔符:
/home/user/documents/file.txt。
2.根目录不同
Windows:
每个驱动器(例如 C:、D:)都有一个根目录,C: 表示 C 盘的根目录。
Linux 和 macOS:
整个文件系统只有一个根目录 /,所有的文件和目录都在这个根目录下,如:
/home、/usr 等目录都是根目录 / 的子目录。
3.盘符
Windows:
文件系统基于不同的驱动器,每个驱动器都有一个盘符(例如 C:、D:)。
路径通常以盘符开头,例如,C:WindowsSystem32
Linux 和 macOS:没有盘符的概念。所有的存储设备都挂载在单一的文件系统树下。
例如,外部硬盘可能挂载在 /mnt/external_drive
4.文件和目录大小写的区分
Windows:文件名和目录名不区分大小写。
例如,C:UsersuserDocuments 和 C:usersUSERdocuments 是相同的路径
Linux 和 macOS:
文件名和目录名区分大小写。
例如,/home/user/Documents 和 /home/user/documents 是不同的路径。
5.路径的表示不同
Windows:
路径可以包含空格和某些特殊字符,但需要使用引号包围路径,或使用转义字符。
例如,"C:Program FilesExamplefile.txt"。
Linux 和 macOS:
路径也可以包含空格和某些特殊字符,但一般使用反斜杠转义空格。
例如,/home/user/My Documents/file.txt。
6.环境变量表示不同
Windows:使用分号 ; 作为路径环境变量的分隔符。
例如,PATH=C:WindowsSystem32;C:Program Files。
Linux 和 macOS:
使用冒号 : 作为路径环境变量的分隔符。
例如,PATH=/usr/local/bin:/usr/bin:/bin。
了解以上区别对于在不同操作系统之间工作和编写跨平台脚本非常重要,由于本文是给新手看的,写这些就是为了说明:你搞一个 Linux 虚拟机来学 Shell 是很重要的。
在 Shell 中切换路径
OK,假设你现在用的是 Linux 发行版,我们知道以 / 开头的路径称为绝对路径。任何其他路径都是相对路径。相对路径是相对于当前工作目录的,我们可以用 pwd 命令查看当前工作目录,并用 cd 命令更改。在路径中,. 代表当前目录,.. 代表其父目录。例如:
在 Shell 中输入 pwd 会显示当前所在的目录路径。使用 cd 命令可以更改当前工作目录。输入 cd /home/user 会将当前工作目录更改为 /home/user。
接下来我给出部分常用的基本目录操作命令:
ls:列出目录内容
cd(change directory):改变当前目录
pwd:显示当前目录路径
mkdir 和 rmdir:创建和删除目录
cp 和 mv:复制和移动文件/目录
rm:删除文件和目录
touch:创建空文件
还有两个获取系统帮助的命令需要记住:
man 你要的命令
你要的命令 --help
--help:
一般是简短的帮助信息。它列出了命令的基本用法、常用选项和参数。适用于快速查阅某个命令的基本使用方法。
man(manual):
命令用于显示命令的详细手册页。手册页通常包含命令的详细描述、所有选项和参数的解释、示例、作者信息等。适合于深入了解某个命令的完整功能和用法。
更多命令我就不介绍了,放一个 Linux Commands Cheat Sheet 好咯,这个对新手学习足够了,常见的命令能记住,不太用的命令知道怎么搜就可以:
https://www.geeksforgeeks.org/linux-commands-cheat-sheet/
PDF 下载:
https://phoenixnap.com/kb/linux-commands-cheat-sheet
Shell 中的输入与输出流
另一个很重要的概念是 Shell 中的输入输出流,前面的文章我们说过,Shell 本身作为解释器是可以运行 Shell 脚本的,也就是可编程。有时候我们想把一个运行程序的输出写到文档内,但程序本身(例如 date )又没有这个功能怎么办呢?
输出到文件 “>”
例如上篇文章中我们提到过 date,它用于显示当前的日期和时间。我们想把这个输出保存到一个文本文件中,而不是仅仅在屏幕上显示。这种操作就可以通过重定向符 > 来实现,输入命令:
date > date_output.txt
这条命令会将当前的日期和时间写入到名为 date_output.txt 的文件中,而不是在终端上显示。现在,我们可以用 cat 命令来查看文件的内容:
cat date_output.txt
假设当前时间是 2024 年 5 月 23 日 15:45:00,这会在终端上显示:
Thu May 23 15:45:00 UTC 2024
通过这种方法,我们就能将任何程序的输出保存到文件中。再举一个更复杂的例子,假设我们运行一个命令 ps aux 来列出当前系统中所有运行的进程,并想把这个列表保存到一个文件中:
ps aux > 1.txt
然后查看一下这个文件:
cat 1.txt
看吧,通过这种方式,我们可以灵活地将程序的输出保存到文件中,便于后续查看和处理。
将文件输入到程序“<”
我们可以使用 sort 程序对文件中的文本行进行排序,例如我有一个 2.txt 文件,内容如下:
apple
banana
orange
grape
我们运行命令:
sort < 2.txt
会输出:
apple
banana
grape
orange
这个例子有点抽象可能,我们可以换一个更贴近应用的例子,假设我们有一个日志文件 logfile.txt,其中记录了很多行的日志信息。我们想要提取其中的特定信息,就需要使用 grep 程序并将 logfile.txt 文件的内容作为输入,搜索包含 "ERROR" 的行,那命令就这样写:
grep "ERROR" < logfile.txt
这时候终端就会输出:
2024-05-23 15:46:00 ERROR .........
管道简介 Pipe “|”
上面写查日志的只是举例子,在实际应用中,很多情况下我们直接在命令行上使用管道 (|) 来连接命令,而不需要通过文件重定向。
在 Shell 中,管道是一种允许将一个命令的输出直接作为另一个命令的输入的机制。管道符号用 | 表示。使用管道可以将多个命令连接在一起,形成一个命令链,使得数据能够顺序流动并进行处理。
例如我们有一个包含许多文本内容的文件 file.txt,我们想要统计这个文件中的 examlpe 数量:
# 搜索包含 "example" 单词的行,并统计行数
grep "example" file.txt | wc -l
这个命令链执行以下操作:
grep "example" file.txt:
从 file.txt 文件中搜索包含 "example" 单词的行
wc -l:
统计 grep 命令输出的行数。
管道在实际应用中非常有用,尤其在数据处理和系统管理中。以下是一些常见的应用场景:
日志处理:
将日志文件中的特定信息提取并分析。
"ERROR" 的行,并显示其行号 提取日志文件中包含
grep -n "ERROR" logfile.txt | less
数据统计:
统计文本文件中的单词、行或字符数。
# 统计文本文件中的单词数
cat file.txt | wc -w
系统信息:
获取系统信息并进行过滤和格式化。
# 获取当前系统中运行的进程,并显示占用内存最多的前10个进程
ps aux | sort -nrk 4 | head -10
网络诊断:
分析网络请求和响应。
netstat -tuln | grep ":80"
总结
本文我们初步探讨了 Shell 中的路径、输入输出流以及管道的概念和应用。希望通过本文,你能对以上功能有一个基本的认知,文章只是引你入门,多实践,多敲命令,多写代码总是没错的。
点点赞 点点关注 点点文末广告 抱拳了家人们
创作不易
关注一下
帮忙点点文末广告
原文始发于微信公众号(imBobby的自留地):Shell 入门指南(二):路径、输入输出流、管道
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论