在Linux命令行环境中,sudo !! 是一个非常实用且高效的快捷命令。它允许用户以超级用户(root)权限重复执行上一个命令,从而避免了在需要超级用户权限的情况下重新输入整个命令。这一小技巧对于系统管理员和开发人员来说尤其有用,因为它节省了时间并减少了重复输入错误的可能性。
例如:
sudo !! 的工作原理基于两个命令的组合:
因此,sudo !! 实际上是将上一个命令前加上 sudo,从而以超级用户权限重新执行该命令。这在需要提升权限的情况下非常有效。
python3 -m http.server 命令启动一个HTTP服务器,该服务器会将当前工作目录作为根目录,提供文件访问。它通过指定的端口号来监听请求,并在浏览器中显示当前目录的内容。这个命令适用于临时文件共享和开发测试,但不适合生产环境中的高性能需求。
基本用法非常简单,只需在命令行中输入以下命令:
python3 -m http.server [port]
其中,[port] 是你希望HTTP服务器监听的端口号,默认为8000。如果不指定端口号,默认会使用8000端口。
下面带实战一下:
在当前工作目录中启动HTTP服务器,使用默认端口8000:
python3 -m http.server
这将启动一个HTTP服务器,你可以在浏览器中访问 http://192.168.3.66:8000 来查看当前目录中的文件列表。
访问后还有日志输出:
如果你希望使用其他端口号(如7070),可以在命令中指定:
python3 -m http.server 7070
这将启动一个监听在7070端口的HTTP服务器,你可以在浏览器中访问 http://192.168.3.66:7070。
默认情况下,HTTP服务器绑定到所有可用的网络接口。如果你只想让服务器在本地回环接口上可用,可以指定 --bind 参数:
python3 -m http.server 7070 --bind 127.0.0.1
这将使服务器仅在 127.0.0.1 地址上可用,即仅限于本地访问。
这个时候在服务器外想要访问就访问不了了:
这个时候,我们两外开一个SSH窗口去curl 这个地址,发下直接curl http://127.0.0.1:7070是可以正常通的:
在开发静态网站或前端应用时,python3 -m http.server 提供了一个快速的方式来测试和调试。你可以在本地服务器上查看网页效果,无需配置复杂的Web服务器。
当需要与其他用户共享文件时,可以利用这个HTTP服务器。只需将文件放在当前目录下,并启动服务器,其他用户即可通过浏览器访问这些文件。
这个HTTP服务器不适合生产环境。它缺乏安全性和性能优化,只适用于开发和测试。
启动HTTP服务器时,它将公开当前目录的内容。确保你不在此目录中包含敏感文件。对外公开目录时,最好先确认目录中没有隐私或重要数据。
如果指定的端口号已被其他服务使用,HTTP服务器将无法启动。请检查端口使用情况,确保选择的端口号未被占用。
mtr(My Traceroute)是一个集成了 ping 和 traceroute 功能的网络诊断工具。它能够实时显示网络路径中每一跳的丢包率和延迟,帮助网络管理员和开发人员分析和排查网络连接问题。与传统的 ping 和 traceroute 工具相比,mtr 提供了更为详尽和动态的网络状态信息。
mtr 将 ping 和 traceroute 的功能结合在一起,它的主要特点包括:
mtr 通常可以通过系统的包管理工具安装:
sudo apt install mtr
sudo yum install mtr
sudo emerge -a sys-apps/mtr
sudo apk add mtr
sudo pacman -S mtr
sudo zypper install mtr
sudo pkg install mtr
使用 mtr 命令非常简单。只需在命令后指定目标主机名或IP地址:
mtr baidu.com
该命令将开始对 baidu.com 进行网络路径测试,并显示结果。
假设你遇到网络连接问题,可以使用 mtr 来诊断:
mtr -r -c 10 baidu.com
这将以报告模式(-r)运行 mtr,并在完成10次测试后退出。输出会显示每一跳的详细统计信息。
你还可以使用 mtr 来测试到特定中转点的路径:
mtr -r -c 10 -i 1 baidu.com
这里,-i 选项指定了时间间隔(以秒为单位)。
mtr 的输出包含多个列,每列提供不同的信息:
可以使用 -m 选项设置最大跳数,例如限制为20跳:
mtr -m 20 baidu.com
使用 -r 选项,可以在 mtr 完成后显示路由表:
mtr -r baidu.com
sudo mtr baidu.com
Ctrl+x+e 是一个在终端中非常实用的快捷键组合,用于在默认文本编辑器中编辑当前命令行。这个功能尤其对系统管理员和开发人员有用,因为它可以帮助你更方便地编辑复杂或长的命令。
当你在终端中输入 Ctrl+x+e,当前命令行内容会被复制到你系统配置的默认文本编辑器中(如 vim、nano、emacs 等)。在编辑器中,你可以对命令进行详细编辑和修改,然后保存并退出编辑器。保存后,命令会自动回到终端中,并准备好执行。
对于较长或复杂的命令,直接在命令行中编辑可能会比较困难。使用 Ctrl+x+e 可以在更友好的编辑环境中进行修改:
Ctrl+x+e
这会将当前命令行内容(例如长路径或包含多个选项的命令)复制到编辑器中,允许你更方便地进行编辑。
如果你在命令行中输入了错误的命令,使用 Ctrl+x+e 可以在编辑器中进行修正而不必重新输入整个命令。例如,纠正拼写错误或更改选项:
Ctrl+x+e
当你编写较长的命令或脚本时,可能需要多次修改。Ctrl+x+e 允许你在一个熟悉的编辑环境中进行修改,然后返回终端继续执行:
Ctrl+x+e
默认文本编辑器由环境变量 EDITOR 或 VISUAL 决定。你可以通过设置这些变量来指定默认编辑器。例如,设置 vim 为默认编辑器:
export EDITOR=vim
或者设置 nano 为默认编辑器:
export EDITOR=nano
假设你有一个长命令,如:
cp /home/user/very_long_path_with_many_directories/file.txt /another/very_long_path_with_many_directories/
使用 Ctrl+x+e,可以在 vim 或 nano 中进行编辑,确保命令的正确性:
Ctrl+x+e
在编辑器中,你可以方便地检查和修改路径。
如果你正在编写一个复杂的命令或脚本,并且希望在执行之前检查它,可以使用 Ctrl+x+e:
echo "Long command with lots of parameters and options"
Ctrl+x+e
在编辑器中编辑并保存后,命令会自动回到终端中,并准备好执行。
nl 命令用于给文本文件中的每一行添加行号,帮助用户更清晰地查看和处理文本数据。这个命令特别适合于需要进行文本分析、调试代码或查看日志文件的场景。
nl 是一个简单但功能强大的工具,能够为文件或标准输入的每一行添加行号。它支持多种编号样式和选项,可以自定义行号的格式。
要为文件添加行号,只需在命令后指定文件名:
nl wljslmz
这将输出带有行号的 wljslmz.txt 文件内容。
也可以通过管道将标准输入传递给 nl 命令。例如,将 cat 命令的输出传递给 nl:
cat wljslmz | nl
输出结果将与直接使用 nl 命令相同。
使用 -n 选项来指定行号的格式。可以选择 ln(左对齐)、rn(右对齐)、rz(右对齐且用零填充):
nl -n ln wljslmz
这将使用右对齐的行号格式显示内容。
使用 -v 选项可以指定行号的起始值。例如,从行号 3 开始:
nl -v 3 wljslmz
输出将从行号 3 开始:
使用 -w 选项指定行号宽度。例如,使用宽度为 5 的行号:
nl -w 5 wljslmz
输出将具有宽度为 5 的行号:
使用 -b 选项指定如何编号行。可以选择 a(对所有行编号)、t(仅对非空行编号)或 n(不对任何行编号):
我们修改一下原来的文件wljslmz,在中间文字部分增加一行:
然后再执行以下命令:
nl -b t wljslmz
这将只对非空行编号。
当处理代码或脚本时,使用 nl 为代码添加行号可以帮助定位错误和调试。例如:
nl script.sh
这使得检查和讨论代码行更容易。
在查看日志文件时,添加行号有助于定位日志条目。例如:
nl /var/log/syslog
这将使分析日志更为方便。
在处理文档时,为文档添加行号可以帮助组织和引用文档中的内容。例如:
nl document.txt
这可以使审阅和校对文档内容更为清晰。
nl largefile.txt > numbered_largefile.txt
shuf 是一个用于打乱文件行顺序或生成随机排列的命令行工具。它可以从文本文件或标准输入中随机选择行,并以随机顺序输出。这对于生成随机数据、进行随机抽样或测试程序时非常有用。
shuf 命令的主要功能是对输入的文本行进行随机化,输出结果可以按需排序或选择特定数量的随机行。
要对文件中的行进行随机排序,可以使用以下命令:
shuf wljslmz
这将输出 wljslmz 文件中的行,顺序是随机的。
你可以选择从文件中随机选择一定数量的行。例如,从文件中选择 3 行:
shuf -n 3 wljslmz
输出将是文件中随机选择的 3 行:
每次输出的都不一样:
shuf 也可以用于生成随机数。例如,生成从 1 到 10 的随机数:
shuf -i 1-10 -n 1
输出将是 1 到 10 之间的一个随机数:
shuf 还可以处理标准输入。例如,打乱从 echo 命令传递的数据:
echo -e "one\ntwo\nthree\nfour\nfive" | shuf
输出将是 one、two、three、four 和 five 的随机顺序:
使用 --random-source 选项可以指定一个文件作为随机种子源,从而控制随机数生成的种子。例如,使用 /dev/urandom 作为随机源:
shuf --random-source=/dev/urandom -n 5 wljslmz
生成特定范围内的随机数时,可以指定起始和结束范围。例如,从 100 到 200 生成 5 个随机数:
shuf -i 100-200 -n 5
输出将是 100 到 200 之间的 5 个随机数:
当需要生成测试数据时,shuf 可以用来打乱数据行的顺序。例如,在测试应用程序时,可以使用 shuf 随机化测试用例:
shuf test_cases.txt > randomized_test_cases.txt
在进行数据抽样时,shuf 可以帮助从大量数据中随机选择样本。例如,从客户列表中随机抽取 10 个客户:
shuf -n 10 customer_list.txt
在游戏中,shuf 可以用来生成随机的游戏场景或内容。例如,打乱游戏关卡的顺序:
shuf levels.txt > randomized_levels.txt
ss 命令用于显示套接字(socket)统计信息,是 netstat 的替代工具。它可以提供比 netstat 更加详细和快速的网络连接信息,特别是在高负载的系统中。ss 主要用于网络诊断和性能监控。
ss 命令可以显示与套接字相关的详细信息,包括 TCP 和 UDP 连接、监听的端口、网络状态等。它支持多种选项来过滤和格式化输出,以便用户可以获取所需的信息。
要查看系统上的所有网络连接,可以使用以下命令:
ss
这将显示所有套接字的基本信息,包括协议、接收和发送队列、状态等。
要查看所有的网络连接(包括 TCP 和 UDP):
ss -a
这将显示所有套接字,包括监听和非监听的连接。
要只查看 TCP 连接:
ss -t
这将显示当前所有的 TCP 连接。
要只查看 UDP 连接:
ss -u
这将显示所有的 UDP 连接。
我现在服务器上还没有:
要显示当前正在监听的端口:
ss -l
这将列出所有正在监听的套接字(包括 TCP 和 UDP)。
要显示更详细的信息(包括进程信息):
ss -tuln
这将显示 TCP 和 UDP 连接的详细信息,不解析服务名称(-n 选项)。
要显示连接的状态(例如 ESTAB、LISTEN 等):
ss -s
这将提供总结性的网络统计信息。
要过滤并显示特定端口的连接(例如端口 80):
ss -tuln | grep :80
这将显示与端口 80 相关的所有网络连接。
要显示与套接字关联的进程信息(需要 root 权限):
ss -tp
这将列出每个连接的进程 ID 和进程名称。
使用 -i 选项来显示每个套接字的详细统计信息:
ss -i
输出将包括每个连接的详细信息,如丢包统计和延迟等。
要查看 IPv6 套接字连接:
ss -6
这将显示所有的 IPv6 套接字。
使用 ss 命令可以帮助你诊断网络问题,例如查看某个服务是否在监听预期的端口:
ss -tuln | grep :80
这可以确认 Web 服务器是否正在运行并监听端口 80。
通过 ss -s 命令,可以监控系统的网络性能,查看是否有异常的流量或连接:
ss -s
这有助于识别网络瓶颈或异常流量模式。
查看特定应用程序的连接状态,例如数据库连接:
ss -tuln | grep :3306
这将帮助确认数据库服务是否正在正常运行并接受连接。
last 命令用于显示系统上用户的登录历史记录。它从 /var/log/wtmp 文件中读取数据,该文件记录了系统启动、登录、注销以及系统关机等事件。last 命令对于系统管理员来说非常有用,可以帮助跟踪用户活动和排查登录相关的问题。
last 命令提供系统上用户登录和注销的详细记录,包括登录时间、注销时间、持续时间、终端号以及登录来源等信息。它可以帮助系统管理员了解用户的活动和系统的使用情况。
要查看最近的登录记录,只需运行 last 命令:
last
这将显示所有用户的最近登录记录。
要查看特定用户的登录记录,例如 user1:
last user1
这将显示用户 user1 的所有登录记录。
要查看系统重启记录:
last reboot
这将显示系统重启的详细记录。
使用 -n 选项来限制显示的记录数量,例如显示最近的 5 条记录:
last -n 5
这将显示最新的 5 条记录。
要查看某个时间段的记录,可以结合 grep 使用,例如查看 7 月 24 日的登录记录:
last | grep 'Jul 25'
这将显示 7 月 25 日的所有登录记录。
last 命令本身不支持直接指定时间范围,但可以结合其他工具(如 grep 和 awk)进行过滤。例如,查看 2024 年 7 月 24 日到 2024 年 7 月 25 日的记录:
last | awk '$5 == "Jul" && $6 == "24" || $5 == "Jul" && $6 == "25"'
这将过滤出指定日期范围内的记录。
如果你想查看用户的注销记录,可以使用 -x 选项:
last -x
这将显示包括系统关机和重启在内的所有事件。
要查看特定终端的登录记录,例如 tty7:
last tty7
这将显示所有通过 tty7 终端的登录记录。
系统管理员可以使用 last 命令来监控用户的登录活动,识别异常行为或未授权访问。例如,检测是否有用户在非工作时间登录系统:
last | grep '2024-07-24'
在系统出现问题时,last 命令可以帮助排查是否存在频繁的重启或异常关机记录。例如,查看系统重启记录:
last reboot
last 命令可以用于安全审计,检查是否有未授权用户登录系统。通过审查登录记录,管理员可以识别潜在的安全威胁:
last | grep 'unauthorized_user'
curl ifconfig.me 是一个非常实用的命令,用于获取和显示公共 IP 地址。curl 是一个命令行工具,用于与服务器进行数据传输,ifconfig.me 是一个简单的服务,它返回请求发起者的公共 IP 地址。
curl 是一个强大的工具,可以用来发送 HTTP 请求,并处理响应。通过 curl 发送请求到 ifconfig.me 可以迅速获取请求者的公共 IP 地址。这在需要确认外部访问点时非常有用,尤其是在调试和配置网络时。
要查看你的公共 IP 地址,只需运行以下命令:
curl ifconfig.me
这将返回你的公共 IP 地址,例如:
如果你希望获取更多的网络信息,可以使用 -i 选项查看 HTTP 响应头信息:
curl -i ifconfig.me
输出将包括 HTTP 响应头和 IP 地址:
ifconfig.me 提供了不同的服务来显示信息。如果你想获取详细的 JSON 格式信息,可以使用:
curl ifconfig.me/all.json
这将返回包含 IP 地址及其他网络信息的 JSON 数据:
如果你的网络连接通过代理服务器,可以使用 -x 选项指定代理:
curl -x http://proxyserver:port ifconfig.me
这将通过指定的代理服务器访问 ifconfig.me 服务。
你可以通过 -H 选项添加自定义请求头,例如设置 User-Agent:
curl -H "User-Agent: CustomAgent" ifconfig.me
这将以自定义的 User-Agent 访问 ifconfig.me。
如果你需要调试请求,可以使用 -v 选项查看详细的请求和响应信息:
curl -v ifconfig.me
这将显示包括连接过程在内的详细调试信息。
在调试网络连接时,获取公共 IP 地址可以帮助确认网络设置是否正确。例如,检查 VPN 连接是否成功地更改了你的公共 IP 地址:
curl ifconfig.me
当配置防火墙规则或访问控制时,了解你的公共 IP 地址是非常重要的。例如,允许特定的公共 IP 地址访问你的服务器:
curl ifconfig.me
在自动化脚本中,你可能需要动态获取当前的公共 IP 地址,例如用于更新动态 DNS 服务:
PUBLIC_IP=$(curl -s ifconfig.me)
这将把你的公共 IP 地址存储在变量 PUBLIC_IP 中,便于后续操作。
tree 命令用于以树状图形式显示目录和文件结构。它提供了一种可视化的方式来查看目录中的内容,使得用户可以更直观地了解文件系统的层次结构。这对于系统管理员、开发人员和普通用户来说,都是一个非常有用的工具。
tree 命令以层次结构的树状图形式展示指定目录及其子目录的内容。它可以显示文件和目录的树状结构,帮助用户快速了解目录的结构和内容。
要显示当前目录的树状结构,可以使用以下命令:
tree
这将列出当前目录及其所有子目录和文件的结构。
要显示指定目录的结构,例如 /home/user:
tree /dev
这将列出 /dev 目录及其子目录和文件的树状结构。
使用 -L 选项限制树状图的显示深度,例如显示到深度为 2:
tree -L 2
这将显示当前目录及其直接子目录和文件,但不会显示更深层次的目录结构。
使用 -f 选项显示完整的文件路径:
tree -f
这将列出每个文件和目录的完整路径,而不仅仅是相对路径。
使用 -s 选项显示每个文件的大小:
tree -s
这将显示文件的大小信息,帮助你了解每个文件的占用空间。
要将树状图导出到一个文件,例如 directory_structure.txt:
tree > directory_structure.txt
这将把树状结构输出到指定的文件中,方便查看和分享。
使用 -a 选项显示所有文件和目录,包括隐藏的文件:
tree -a
这将包括以点号开头的隐藏文件和目录在内的所有内容。
使用 -P 选项来过滤显示特定类型的文件。例如,只显示 .txt 文件:
tree -P '*.txt'
这将仅显示符合指定模式的文件和目录。
使用 --charset 选项可以选择显示的字符集。例如,使用 ASCII 字符集:
tree --charset=ASCII
这将以 ASCII 字符集显示树状结构,适用于终端环境不支持 Unicode 的情况。
使用 -d 选项仅显示目录而不显示文件:
tree -d
这将仅列出目录结构,不包括文件。
使用 --ignore 选项忽略某些文件或目录。例如,忽略 *.log 文件:
tree --ignore '*.log'
这将忽略所有 .log 文件,仅显示其他文件和目录。
使用 tree 命令可以帮助审核文件系统结构,检查是否有不必要的文件或目录。例如:
tree -L 2
这可以帮助系统管理员快速了解目录结构。
当需要整理目录结构时,tree 命令提供了一种可视化的方式,帮助你决定如何重新组织文件和目录:
tree -C -L 3
这可以帮助你直观地了解当前目录结构,从而进行有效的整理。
在备份或同步文件时,可以使用 tree 命令生成目录结构报告,以确保备份和同步操作的准确性:
tree > backup_structure.txt
这将创建备份目录的结构文件,便于与备份结果进行比对。
pstree 命令用于以树状图的形式显示当前系统上运行的进程。它展示了进程的层次结构,使得用户能够更直观地了解各个进程之间的父子关系。pstree 是系统管理员和开发人员常用的工具,特别是在调试和监控系统时。
pstree 命令以树状结构显示当前系统上所有进程,并且显示每个进程的父进程。它比 ps 命令的输出更为直观,特别是当系统上运行了多个进程时,可以很方便地查看进程之间的关系。
要查看当前系统上所有进程的树状结构,可以简单地运行 pstree 命令:
pstree
这将显示以树状结构组织的当前系统上运行的所有进程。
使用 -p 选项显示进程的 PID:
pstree -p
输出示例:
这将显示进程的 PID,使得你可以更清楚地知道每个进程的标识号。
使用 -A 选项以 ASCII 字符集显示进程树:
pstree -A
这将使用 ASCII 字符集绘制树状结构,适用于不支持 UTF-8 的终端。
使用 -c 选项显示进程的完整命令行:
pstree -c
输出示例:
这将显示每个进程的完整命令行信息。
使用 -u 选项显示特定用户的进程树,例如显示 root 用户的进程:
pstree -u root
这将仅显示由指定用户运行的进程及其树状结构。
使用 grep 过滤特定的进程。例如,查看包含 sshd 的进程树:
pstree | grep sshd
这将显示所有包含 sshd 的进程树。
要将进程树输出保存到文件,例如 process_tree.txt:
pstree > process_tree.txt
这将把进程树保存到指定的文件中,方便后续查看和分析。
pstree 不支持实时更新,但你可以使用 watch 命令结合 pstree 来实现实时查看进程树:
watch pstree
这将每隔几秒钟刷新一次 pstree 输出,帮助你实时监控进程状态。
使用 -l 选项显示长格式的进程树:
pstree -l
这将显示详细的进程树结构,帮助你了解复杂的进程关系。
pstree 命令可以帮助系统管理员监控系统上运行的进程及其父子关系。通过查看进程树,管理员可以快速识别进程的来源和依赖关系,从而更好地管理系统资源。
pstree -p
这将帮助你了解系统的进程层次结构,从而优化系统性能。
在系统出现问题时,pstree 可以帮助你分析进程间的关系,从而定位问题。例如,检查是否有进程被异常终止或存在僵尸进程:
pstree -p
这将帮助你快速定位进程相关的问题。
pstree 可以用于安全审计,检查是否有异常的进程或未授权的进程运行。例如,识别异常的父子进程关系:
pstree -c
这将帮助你发现潜在的安全威胁和系统漏洞。