Linux Shell 学习笔记
文件管理
ls
命令
ls
来自英文单词中的 "list"
的缩写,用于列出目录中文件以及其属性信息。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-a |
显示所有文件及目录 |
-A |
在 -a 的基础上不显示当前目录和父目录 |
-d |
显示目录本身的属性信息 |
-i |
显示文件的 inode 属性 |
-l |
显示文件的详细属性信息,包括类型、权限等 |
-m |
以逗号为间隔符,水平显示文件信息 |
-r |
依据首字母将文件以相反次序显示 |
-R |
递归显示所有子文件 |
-S |
依据内容大小将文件排序显示 |
-t |
依据最后修改时间将文件排序显示 |
-X |
依据拓展名将文件排序显示 |
--color |
显示信息带有着色效果 |
不添加任何参数的情况下,
ls
命令会列出当前工作目录的文件信息。
cp
命令
cp
命令来自英文单词中 "copy"
的缩写,用于复制文件或目录。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-b |
覆盖目标文件前先进行备份 |
-d |
复制链接文件时,将目标文件也建立成链接文件 |
-f |
若目标文件已存在,则会直接覆盖 |
-i |
若目标文件已存在,则会询问是否覆盖 |
-l |
对源文件建立硬链接,而非复制文件 |
-p |
保留源文件或者目录的所有基本属性 |
-r |
递归复制所有子文件 |
-s |
对源文件建立软链接,而非复制文件 |
-a |
功能等同于 -d -p -r |
-v |
显示执行过程详细信息 |
示例:
在同一目录下复制
demo.txt
的副本:1
cp demo.txt demo_copy.txt
将
demo.txt
复制到./demo_dict
目录,如果目标文件存在则覆盖:1
cp -f demo.txt ./demo_dict
建立
dmeo.txt
的软链接:1
cp -s demo.txt demo_soft_link
mkdir
命令
mkdir
命令来自于英文 "Make directories"
的缩写,用于创建目录文件。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-m |
创建目录的同时设置权限 |
-p |
递归创建多级目录 |
-v |
显示执行过程详细信息 |
-z |
设置目录安全上下文 |
示例:
创建一个权限为
740
的文件:1
mkdir -m 740 dir_test
1
2
3ls -ld dir_test
# 输出结果:
drwxr-----@ 2 username staff 64 9 29 23:20 dir_test一次创建多个嵌套关系的目录:
1
mkdir -p dir1/dir2/dir3
mv
命令
mv
指令,来自于英文单词中的
"move",用于移动或者更改文件名。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-b |
覆盖前为目标文件创建备份 |
-f |
若文件已存在,强制覆盖目标文件 |
-i |
若文件已存在,则询问用户是否覆盖 |
-n |
不要覆盖已有文件 |
-u |
当源文件比目标文件更新时,才执行覆盖操作 |
-v |
显示执行过程详细信息 |
-Z |
设置文件安全上下文 |
示例:
将
demo.txt
改名为demo2.txt
:1
mv demo.txt demo2.txt
将
dir1
移动到dir2
:1
mv dir1 ./dir2
在 (1) 的基础上将
dir1
重命名为dir0
1
mv dir1 ./dir2/dir0
pwd
命令
pwd
指令来自于英文中的 "Print working directory"
的缩写,用于显示当前工作目录的路径。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-L |
显示逻辑路径(默认) |
-P |
显示实际物理地址 |
tar
命令
tar
指令用于压缩和解压文件,能解压或压缩 Linux
系统中常见的 .tar
、.tar.gz
、tar.bz2
等格式的压缩包文件。
1 |
|
常用参数:
参数 | 说明 |
---|---|
-A |
添加文件到已存在压缩包 |
-B |
设置区块大小 |
-c |
创建新的压缩包 |
-C |
解压缩到指定目录 |
-d |
记录文件的差别 |
-f |
指定压缩包文件 |
-j |
使用 bzip2 压缩格式 |
-l |
设置文件系统边界 |
-m |
保护文件不被覆盖 |
-N |
只将较新日期的文件保存到压缩包中 |
-p |
保留原来的文件权限和属性 |
-t |
显示压缩包的内容 |
-u |
更新压缩包内的文件 |
-v |
显示执行过程详细信息 |
-w |
确认压缩包的完整性 |
-x |
从压缩包内提取文件 |
-z |
使用 gzip 压缩格式 |
--exclude |
排除指定的文件不压缩 |
--remove-files |
操作完后删除源文件 |
示例:
使用
gzip
压缩格式将demo
目录打包,压缩包后缀指定为.tar
:1
tar -czvf demo.tar ./demo
将
demo.tar
解压到当前工作目录:1
tar -xvf demo.tar
查看压缩包
demo.tar
内到文件信息:1
tar -tvf demo.tar
chmod
命令
chmod
,来自英文缩写 "change
mode",用于更改文件权限。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-c |
改变文件权限成功后再输出成功信息 |
-f |
改变文件权限失败后不显示错误信息 |
-R |
递归处理所有子文件 |
权限:
权限可以用数字表示,例如 755,表示 rwxr-xr-x
权限,也可以使用 +
和 -
进行权限追加。
文件所属者、群组用户和外部用户分别用 u
、g
、o
表示;
读、写、执行的权限分别用 r
、w
、x
表示。
示例:
将
demo.txt
的权限设置为 755:1
chmod 755 demo.txt
给所有用户增加读
demo.txt
的权限:1
chmod +r demo.txt
剥夺外部用户写
demo.txt
的权限:1
chmod o-w demo.txt
lsof
命令
lsof
(List Open Files)是在 Unix、Linux 以及其他类 Unix
操作系统中非常强大的命令行工具,用于列出系统中当前打开的文件。在 Unix 和
Linux
中,几乎一切都被视为文件,包括硬件设备、管道、套接字和目录。lsof
命令因此能提供关于系统中正在使用哪些文件的宝贵信息。
lsof
可以用来:
- 列出所有打开的文件
- 列出某个特定用户打开的文件
- 列出某个特定进程打开的文件
- 列出打开特定文件的所有进程
- 列出所有打开某个特定端口的进程
- 列出所有网络连接和监听端口
示例
列出所有打开文件:
1
lsof
列出特定用户打开的文件:
1
lsof -u username
列出特定进程打开的文件:
1
lsof -p 945 # 945 是 PID
查找监听特定端口的进程:
1
lsof -i :3306 # 3306 是端口号
列出所有网络连接:
1
lsof -i
列出某个目录下被打开的文件:
1
lsof +D /path
找出删除文件后仍被进程占用的情况:
1
lsof | grep deleted
文档编辑
cat
命令
cat
命令来自于英文中 "concatenate files and print"
的缩写,用于在终端设备上显示文件内容。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-b |
显示行数 |
-E |
每行结束时以 $ 结尾 |
-n |
显示行数,空行也编号 |
-s |
显示行数,多个空行算一个编号 |
示例:
查看文件
demo.txt
并显示行数:1
cat -n demo.txt
查看当前操作系统的用户列表:
1
cat /etc/passwd
more
命令
more
是一个用于在 Linux Shell
中分页显示文本文件内容的命令行工具,它允许用户逐页查看文件。
1 |
|
使用方法:
- 按空格键:向下滚动一页。
- 按 Enter 键:向下滚动一行。
- 按
q
键:退出more
,返回到 Shell 提示符。 - 按
/
键:进行文本搜索,然后输入要搜索的文本并按 Enter 键。 - 按
n
键:查找下一个匹配的搜索结果。 - 按
p
键:查找上一个匹配的搜索结果。
参数:
参数 | 解释 |
---|---|
-l |
显示进程名和 PID |
-d |
显示文件名和当前行号 |
-c |
清屏后显示内容 |
-f |
忽略控制字符 |
-s |
合并多个空行为一个空行 |
wc
命令
wc
(word count)用于计算字数、行数、字符数(byte 和
character)以及文件中最长行的长度的常用工具。这个命令在文本处理、统计信息以及编程中非常有用,尤其是在处理大量文本数据时,可以迅速给出文件或输入的基本统计信息。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-l |
计算行数 |
-w |
计算词数 |
-c |
计算字节数 |
-m |
计算字符数 |
awk
命令
awk
是一种强大的文本处理工具,广泛用于 Unix 和类 Unix
系统中。它非常擅长处理结构化数据,并对文本和数据进行分析、转换和生成报告。awk
通过在数据流或文件上执行定义好的脚本来工作,脚本中包含了一系列的模式和对应的动作。当数据匹配到特定模式时,awk
就执行对应的动作。
1 |
|
示例:
打印文件
demo.txt
每一行:1
awk '{ print }' demo.txt
打印文件
demo.txt
第一列:1
awk '{ print $1 }' demo.txt
使用条件语句:
1
awk '$2 > 5000 { print $1 $2}' demo.txt
echo
命令
echo
在英文中译为回声,用于在终端输出字符串或提取后的变量值。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-E |
禁止转义字符 |
-e |
启动转义字符的解释 |
-n |
不输出结尾的换行符 |
示例:
打印两行话到终端:
1
echo -e "Hello\nWorld!"
打印环境变量
PATH
:1
echo ${PATH}
显示当前系统的运行时间和当前系统负载的信息:
1
echo $(uptime)
rm
命令
rm
命令来自英文单词 "remove"
的缩写,用来删除文件或目录。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-d |
删除无子文件的空目录 |
-f |
强制删除文件不询问 |
-i |
删除文件前询问用户是否删除 |
-r |
递归删除目录及其全部子文件 |
-v |
显示执行过程详细信息 |
示例:
强制删除当前工作目录下所有
.txt
后缀的文件:1
rm -f *.txt
强制删除目录
dir
以及其所有子文件:1
rm -rf dir
grep
命令
grep
命令来自英文 "Global search regular expression and
print out the line" 的缩写,是一个强大的文本搜索工具。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-b |
显示匹配行距文件头部的偏移量 |
-c |
只显示匹配的行数 |
-E |
支持拓展正则表达式 |
-F |
匹配固定字符串的内容 |
-h |
搜索多文件时不显示文件名 |
-i |
忽略关键词大小写 |
-l |
只显示符合匹配条件的文件名 |
-n |
显示所有匹配行及其行号 |
-o |
显示匹配词距文件头部的偏移量 |
-q |
静默执行模式 |
-r |
递归搜索模式 |
-s |
不显示没有匹配文本的错误信息 |
-v |
显示不包括匹配文本的所有行 |
-w |
精准匹配整词 |
-x |
精准匹配整行 |
示例:
查找文件
OS.md
中所有包含process
的行,并且显示其行号:1
grep -n process OS.md
搜索当前工作目录中包含关键词
Java
的文件:1
grep -lrs Java *
tail
命令
顾名思义,tail
命令用于查看文件尾部内容。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-c |
设置显示文件尾部的字符数 |
-f |
持续显示文件尾部的最新内容 |
-n |
设置显示文件尾部的行数 |
示例:
显示
demo.txt
最后 15 行:1
tail -n 15 demo.txt
显示
demo.txt
最后 20 个字符:1
tail -c 20 demo.txt
rmdir
命令
rmdir
命令来自于英文中的 "Remove directory"
的缩写,用于删除空目录文件。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-p |
递归处理所有子文件 |
-v |
显示执行过程详细信息 |
diff
指令
diff
指令是一个非常有用的工具,它可以比较两个文件或者两组文件之间的差异。diff
不仅能帮助用户理解文件之间的不同,还常被用于程序代码的版本比较,从而辅助代码的审查和合并工作。
1 |
|
示例:
并排查看两个文件的差异:
1
diff -y demo1.txt demo2.txt
比较两个目录:
1
diff -r dir1 dir2
使用上下文格式:
1
diff -c demo1.txt demo2.txt
生成补丁文件:
1
diff -u demo1.txt demo2.txt > patchfile
系统管理
find
命令
find
命令的功能是用于根据给定的路径和条件查找相关文件或目录,参数灵活方便,且支持正则表达式。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-name |
匹配文件名 |
-perm |
匹配文件权限 |
-user |
匹配文件所属主 |
-group |
匹配文件所属组 |
-mtime |
匹配最后修改文件内容的时间 |
-atime |
匹配最后读取文件内容的时间 |
-ctime |
匹配最后修改文件属性的时间 |
-type |
匹配文件类型 |
-size |
匹配文件大小 |
-exec ... {} \ |
进一步执行语句 |
示例:
查找当前目录下所有
zip
压缩包:1
find ./ -name *.zip
查找当前目录下
demo_dir
文件夹下所有大于 1M 的文件:1
find ./demo_dir -size +1M
查找工作目录最近 3 天被修改过的文件并且打印其长格式:
1
find ./ -mtime +3 -exec ls -l {} \;
ps
命令
ps
命令是 "process" 的缩写,用于显示进程信息。
1 |
|
如果
ps
不添加任何参数,则会显示当前 Shell 的进程。
常用参数:
参数 | 解释 |
---|---|
-a |
显示当前终端会话的所有进程 |
-x |
显示没有控制终端的进程 |
-e |
显示系统所有进程 |
-f |
显示详细的进程信息 |
-l |
以长格式显示进程信息 |
aux |
也是显示系统所有进程,但输出格式更加详细 |
-u |
显示与指定用户标识符(UID)相关的进程 |
-d |
显示指定用户正在运行的进程 |
-p |
显示特定 PID 的进程 |
-o |
自定义输出进程格式 |
-t |
显示在特定终端运行的进程 |
-H |
显示进程的层次结构,包括父进程和子进程 |
示例:
显示系统所有进程,展示其 PID 和控制终端:
1
ps -eo pid,tty
显示 PID 为 100 的进程信息:
1
ps -p 100
pstree
命令
pstree
命令是一个用于显示进程树的实用程序。它以一种层次结构的方式展示正在运行的进程,显示进程之间的父子关系。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-u |
显示与指定用户标识符(UID)相关的进程 |
-p |
显示特定 PID 的进程 |
-h |
以水平格式显示进程树 |
pgrep
命令
pgrep
命令来自英文词组 "process global regular
expression print" 的缩写,其功能是用于检索进程 PID
号码。pgrep
命令通过正则表达式进行检索,因此用户只需要输入服务名称中的一部分即可进行搜索操作,对于不记得全名的服务程序特别好用。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-f |
匹配进程名 |
-g |
匹配进程组 ID |
-u |
匹配有效用户 ID |
-t |
匹配终端号 |
-c |
显示进程数量 |
kill
命令
kill
命令用于向单个进程发送一个信号,以请求其终止。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-a |
不限制命令行与进程号的对应关系 |
-l |
显示系统支持的信号列表 |
-p |
不发送任何信号 |
-s |
设置向进程发送的信号 |
pkill
命令
pkill
命令用于根据进程名或其他进程属性来终止进程。它可以一次终止多个匹配的进程。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-c |
匹配进程 ID |
-g |
匹配进程组 |
-u |
匹配用户 ID |
-n |
匹配最近生成的进程 |
-o |
匹配最早生成的进程 |
top
命令
top
是一个非常常用的命令行工具,用于实时监视和显示正在运行的进程的系统性能信息。它在类
Unix 系统(如Linux、MacOS)上非常有用,可以让用户实时查看 CPU
使用率、内存利用率、进程列表和其他系统性能指标。
1 |
|
操作:
- 使用键盘上的箭头键可以在进程列表中滚动。
- 按下
q
键可退出top
。 - 按下
k
键可终止选定的进程。 - 按下
F
键可调整排序顺序或显示的字段。 - 按下
h
键可查看帮助和快捷键列表。
一般情况下,top
显示的信息包括:
- 进程ID(PID):每个进程的唯一标识符。
- 用户(USER):运行该进程的用户。
- 调度优先级(PR):表示进程的调度优先级(Priority)。
- Niceness(NI):表示进程的 Niceness 值。
- 虚拟内存使用量(VIRT):
VIRT
表示进程的虚拟内存(Virtual Memory)使用量 - 物理占用内存(RES):
RES
表示进程的实际物理内存占用(Resident Set Size),也就是实际分配给进程并存储在物理内存中的内存量。 - 共享内存大小(SHR):
SHR
表示进程共享的内存大小(Shared Memory),也就是多个进程之间共享的内存量。这包括进程使用的共享库和共享的内存段。 - 状态(S):进程的状态(如运行、休眠、停止等)。
- CPU% (CPU%):进程占用的CPU百分比。
- 内存% (MEM%):进程占用的内存百分比。
- 累计时间(TIME+):
TIME+
列表示自进程启动以来的累积 CPU 时间。这个值以小时、分钟和秒的格式表示,显示了进程占用 CPU 的时间量。 - 命令 (COMMAND):启动进程的命令行。
uname
命令
uname
命令来自英文中的 "Unix
name",用于查看系统主机名、内核及硬件架构等信息。
1 |
|
常用参数:
参数 | 说明 |
---|---|
-s |
显示内核名称(默认) |
-a |
显示系统所有相关信息 |
-i |
显示硬件平台 |
-m |
显示计算机硬件架构 |
-n |
显示主机名称 |
-o |
显示操作系统名称 |
-p |
显示主机处理器类型 |
-r |
显示内核发行版本号 |
-v |
显示内核版本 |
set
命令
set
指令是一个内建命令,用于设置和查看 shell
的运行时参数。它可以用来更改 shell 环境的行为,或者设置定位参数,即
$1
、$2
等。set
指令非常灵活,提供了多种选项来影响 shell
的行为,以及处理脚本中的参数。
示例:
列出所有可以被设置的选项及其当前状态:
1
set -o
如果任何命令以非零状态退出,则立即退出脚本:
1
set -e # 使用 set +e 取消s
当尝试使用未初始化的变量时,则立即退出脚本:
1
set -u
在执行命令前,将命令打印在标准错误输出中:
1
set -x
只要管道中的任何命令失效,整个管道就会失效:
1
set -o pipefail
磁盘管理
df
命令
df
命令是 "Report file system disk space usage"
的缩写,用于显示磁盘空间的使用情况。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-a |
显示所有文件系统 |
-h |
以更易读的方式显示 |
-H |
以 1 KB = 1000 Byte 为换算单位 |
-i |
显示索引字节信息 |
-k |
设置显示时块的大小 |
-l |
只显示本地文件系统 |
示例:
以容量单位显示系统全部磁盘的使用量情况:
1
df -h
指定具体分区:
1
df -h /boot
网络通讯
ssh
命令
ssh
命令可以让我们轻松地基于 SSH
加密协议进行远程主机访问,从而实现对远程服务器的管理工作。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-1 |
使用 SSH 协议版本 1 |
-2 |
使用 SSH 协议版本 2 |
-4 |
基于 IPv4 网络协议 |
-6 |
基于 IPv6 网络协议 |
-l |
设置登录用户名 |
-f |
后台执行 SSH 命令 |
-p |
设置远程服务器的端口号 |
示例:
基于 SSH 指令访问远程主机:
1
ssh 192.168.10.10
制定登录用户:
1
ssh -l linuxprobe 192.168.10.10
scp
命令
scp
(安全拷贝协议)是一个在 Linux 和 Unix
系统上用来在本地和远程之间安全传输文件的命令行工具。它利用 SSH
为文件传输提供安全的加密连接,确保数据在传输过程中的安全和隐私。scp
命令可以用来复制文件和目录,既可以在本地计算机之间传输文件,也可以在本地计算机和远程计算机之间传输文件。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-P |
指定端口号 |
-r |
递归复制整个文件 |
-C |
自动压缩文件,减少传输时间 |
示例:
将本地文件复制到远程服务器:
1
scp localfile.txt username@server:/path/file
从远程服务器复制文件到本地:
1
scp username@server:/path/file localfile.txt
递归复制整个目录到远程服务器:
1
scp -r localdir username@server:/path/file
netstat
命令
netstat
命令来自英文词组 “Network statistics”
的缩写,其功能是显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-a |
显示所有连接中的接口信息 |
-c |
持续显示网络状态 |
-C |
显示路由配置信息 |
-F |
显示路由缓存信息 |
-n |
直接使用 IP 地址 |
-p |
显示正在使用接口的程序识别码和名称 |
-r |
显示路由表信息 |
-i |
显示网络界面信息表单 |
-t |
显示 TCP 传输协议的连接状态 |
-u |
显示 UDP 传输协议的连接状态 |
示例:
显示网络所有连接信息:
1
netstat -a
显示系统网络状态中的 UDP 连接信息:
1
netstat -nu
显示网卡当前状态:
1
netstat -i
nc
命令
nc
(或称
Netcat)是一个功能强大的网络工具,常被称为“网络瑞士军刀”。它可以通过 TCP
或 UDP 的方式读写数据,对于网络调试和探测非常有用。nc
可以用于创建任何种类的连接,包括端口扫描、发送原始数据包、监听传入连接等。
1 |
|
常用参数:
参数 | 解释 |
---|---|
-l |
侦听传入的连接,而不是发起连接 |
-p |
指定监听的端口 |
-u |
使用 UDP 而不是默认的 TCP |
-v |
在操作中提供更多的输出信息,可以帮助调试 |
-w |
设置超时时间,防止命令永久挂起 |
-z |
扫描监听模式,用于扫描开放的端口,而不是建立真正的连接 |
常用工具
bc
命令
bc
是一个用于进行任意精度计算的命令行计算器。它的名称是
"Basic Calculator"
的缩写,它允许你进行大数运算,包括整数和浮点数,而不受标准计算器或编程语言中固定精度的限制。bc
是一个非常强大的工具,特别适用于需要高精度计算的数学任务。
bc
支持的运算如下:
基本算术运算:
- 加法:
+
- 减法:
-
- 乘法:
*
- 除法:
/
- 模运算:
%
- 幂运算:
^
- 自增运算:
++
- 自减运算:
--
- 加法:
逻辑运算:
- 逻辑非(取反):
!
- 逻辑与:
&&
- 逻辑或:
||
- 逻辑非(取反):
比较运算:
- 等于:
==
- 不等于:
!=
- 大于:
>
- 小于:
<
- 大于等于:
>=
- 小于等于:
<=
- 等于:
数学函数:
bc
支持许多数学函数,包括但不限于以下几种:- 平方根:
sqrt(x)
- 指数函数:
e(x)
- 自然对数:
l(x)
- 正弦函数:
s(x)
- 余弦函数:
c(x)
- 正切函数:
a(x)
- 对数函数:
l(x)
- 阶乘函数:
factorial(x)
- 取整函数:
floor(x)
- 绝对值函数:
abs(x)
- 四舍五入函数:
scale(n)
- 平方根:
控制结构:
if
语句:if (condition) { ... } else { ... }
for
循环:for (init; condition; update) { ... }
while
循环:while (condition) { ... }
变量和函数:
- 定义变量:
var_name = value
- 自定义函数:
define function_name(parameters) { ... }
- 定义变量:
位运算:
bc
也支持位运算,包括按位与、按位或、按位异或等位运算操作符。
date
& ntpdate
命令
date
date
命令在 Unix 和 Linux
系统中用于显示和设置系统的日期和时间。这个命令可以显示当前的日期和时间,也可以根据用户的需要调整系统的日期和时间。date
命令的基本用法非常简单,仅通过输入 date
就可以查看当前的日期和时间。
1 |
|
ntpdate
ntpdate
命令用于通过网络时间协议(NTP)设置系统的日期和时间,以便与世界上其他计算机同步。它通常在系统启动时运行,或者在需要手动校正系统时钟时使用。ntpdate
会与一个或多个 NTP
服务器通信,根据这些服务器的时间来设置本地系统时间。这对于需要高精度时间同步的网络服务和应用非常重要。
1 |
|
示例:
与
pool.ntp.org
这个公共 NTP 服务器同步时间:1
sudo ntpdate pool.ntp.org
使用多个 NTP 服务器:
1
sudo ntpdate 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org
请注意,由于
ntpdate
直接更改系统时间,通常需要超级用户权限来执行,因此在命令前使用sudo
。
管道表达式
在 Linux Shell
中,管道表达式是一种非常有用的工具,它允许将一个命令的输出直接传递给另一个命令的输入,以便进行数据处理和流水线操作。管道操作符是
|
。
基本语法: 管道操作符
|
用于连接两个或多个命令。它的一般语法如下:1
command1 | command2 | command3
这将使
command1
的输出成为command2
的输入,而command2
的输出成为command3
的输入,依此类推。用途: 管道表达式在 Shell 中广泛用于以下情况:
- 数据筛选:通过将数据传递给
grep
、awk
或sed
等工具,可以筛选、搜索和处理文本数据。 - 数据排序:使用
sort
命令对数据进行排序。 - 数据计算:使用工具如
awk
和bc
进行数学计算。 - 数据统计:使用
wc
命令进行行、单词和字符的统计。 - 数据转换:将数据从一种格式转换为另一种格式,例如将文本数据转换为 CSV 格式。
- 数据筛选:通过将数据传递给
示例: 以下是一些使用管道表达式的示例:
使用
ls
列出当前目录的文件,然后使用grep
过滤文件名中包含 "txt" 的文件名:1
ls | grep "txt"
统计一个文件中的行数、单词数和字符数:
1
cat myfile.txt | wc
从一个文本文件中读取数据,然后使用
awk
对数据进行处理:1
cat data.txt | awk '{print $2, $1}' | sort
使用管道连接多个命令以完成一系列复杂的任务。
错误处理: 管道中的每个命令都运行在自己的子 Shell 中,因此如果其中一个命令失败,管道可能会终止。您可以使用
set -o pipefail
来使管道在任何命令失败时终止整个管道。例如:
1
2set -o pipefail
command1 | command2 | command3这将确保如果
command1
、command2
或command3
中的任何一个失败,整个管道将失败。
管道表达式是 Linux Shell 中非常强大和有用的功能,它允许将多个命令组合在一起,以便以更有效的方式处理和操作数据。