基础

man

man 命令是一个帮助命令,用于在 Linux 系统中查看指令、配置文件和编程帮助等信息

  • man ls 查看程序 ls 的帮助文档

pwd

pwd 的含义是 print working directory,用于显示当前工作目录的路径

  • pwd 最常用
  • pwd -P 显示实际的路径,而不是使用连接文件路径。这在查看多层嵌套的连接文件时非常有用

ls

ls 用来列出用于列出目录中的文件和文件夹

  • ls -a 列出所有文件,包括隐藏文件
  • ls -R 列出包括文件,包括子目录
  • ls -l 以树形结构列出目录内容, 列出文件的详细信息,包括权限、所有者、大小和修改日期等
  • ls /path/to/directory 列出指定目录的内容
  • ls -lh 显示文件大小以人类可读的格式(例如,以K、M、G为单位)
  • ls -lt 按修改时间排序文件(默认降序)
  • ls -lhS 按文件大小排序文件(默认降序)
  • ls *.txt 支持通配符

cd

cd 的意思是 change directory,即改变当前的工作目录

  • cd directory_path
  • cd / 进入根目录
  • cd ~ 进入当前用户的主目录
  • cd .. 进入上级目录
  • cd - 进入上一次所在的目录

mv

mv 即 move,用来移动文件重命名文件

  • mv src dst
  • -f 强制覆盖
  • -v verbose,显示更详细的操作信息

mkdir 创建目录

  • mkdir -p /path/to/directory 创建目录(父目录不存在也会创建)
  • mkdir -m 777 dir_name 创建目录并给定权限
  • mkdir -v dir_name 创建时提示创建的文件

rm 删除文件

  • rm -i 删除前提示
  • rm -f 强制删除
  • rm -rf dir_name 删除一个目录及其下面所有的文件和子目录

touch 用于修改时间戳,或者新建空文件

  • touch filename 创建文件(通常用法)

cp

cp 即 copy,用于复制文件或目录

  • cp src dst 将文件从 src 复制到 dst
  • cp -r src dst 递归复制整个目录
  • cp -f src dst 强制覆盖
  • cp -a src dst 保留文件的属性,包括权限、所有者、时间戳
  • cp -v src dst 复制文件时显示更多详细的操作信息

alias & unalias

alias 用于给 linux 中的命令起别名

  • alias kc='kubectl' 给 kubectl 命令起别名 kc,避免打 kubectl 这个又臭又长的命令名
  • unalias kc 取消别名

可以将别名直接写入到自己用户所在的的~/.bashrc

date

date 命令是 linux 中关于日期与时间相关的命令。

  • date 显示当前日期和时间,时区为装系统时所设置的时区
  • date -u 显示UTC时间
  • date +" %Y/%m/%d %A %H:%M:%S" 显示 年/月/日 星期几 时:分:秒
  • sudo date +%Y%m%dT%T -s "20230825T103000" 设置系统时间

查找、搜索、浏览、显示、转换

管道

clear

清空当前终端显示的内容

find 用于搜索文件和目录

  • find <directory> -name filename 在directory目录下搜索名为filename的文件或目录
  • find . -name "*.txt" 在当前目录下查找所有txt格式的我那件
  • find . -size +10M 查找当前目录下所有大小超过10M的文件
  • find . -type d 查找当前目录下所有目录, f是普通文件,s是套接字
  • find . -mtime -30 查找当前目录下最近30天内修改过的文件
  • find . -name "*.txt" -exec echo {} \; 查找当前目录下所有以 “.txt” 结尾的文件,并打印它们的路径

grep

grep 的含义是 global regular expression print,是一个能用正则表达式的文本搜索工具

  • grep "关键词" file.txt 在file.txt文件中搜索关键词pattern, 返回含有关键词的行
  • grep "pattern" file1.txt file2.txt 可以在多个文件中搜索同一个关键词
  • grep -r "pattern" /path/to/directory 递归搜索指定目录
  • grep -i 忽略大小写
  • grep -n 显示行号
  • grep -C 2 "关键词" file.txt 显示包括匹配行在内的上面2行和下面2行

tail

tail 用于查看文件末尾内容的命令

  • tail -n 5 file.txt 查看 file.txt 文件的最后5行
  • tail -f server.log -f 代表 follow,可以实时监视文件的新增内容,通常用来查看日志文件。在日志很多的情况下推荐组合 -n 使用

diff

diff 用的多吗?

head 从文本文件中读取前几行或字节的内容并显示

  • head -n 5 file.txt 显示file.txt文件的前5行
  • head -c 5 file.txt 显示file.txt文件的前5个字符

less

less 命令常用于查看大型文件或日志文件,允许用户按页浏览文件,并且可以向前或向后滚动

  • less -N filename 显示行号
    • 和vim类似的操作
      • 使用j下一行,使用k上一行
      • 使用u上一页,使用d下一页
      • gg 到开头,G 到末尾
      • /: 向后搜索关键字,按n跳转到下一个匹配项
    • 空格键:向下滚动一页
    • 回车键:向下滚动一行
    • Page Down:向下滚动一页
    • End:移动到文件末尾
    • Home:移动到文件开头
    • q:退出less浏览

wc

wc 用来统计指定文件中的字节数、字数、行数的工具

  • wc file.txt 返回 file.txt文件的 字节数(bytes)、字数(words)、行数(lines)
  • 选项
    • -c:只输出字节数
    • -l:只输出行数
    • -m:只输出字数
    • -w:只输出字数,一个字定义为由空白、跳格或换行字符分隔的字符串
    • -L:打印最长行的长度 wc 的使用频率其实也不算高

sort

sort 是一个排序命令,它按文件中的每行进行排序,可以用-k选项指定每行中用于比较的排序键 假设file.txt的内容格式为usernameage:

1
2
3
4
5
6
7
8
ZhangSan 10
WangMaZi 10
ZhangSan 11
WangXiaoMei 18
LiSi 12
XiaoHong 21
XiaoGang 22
WangXiaoMei 18
  • sort file.txt 将按每行的字典序升序排序,10岁的ZhangSan将排在11岁的ZhangSan前面
  • sort -k 2 file.txt 将按age升序排序
  • sort -k2,2 -k1,1 file.txt 先按age排序,age相同则按username进行排序
  • 其他选项
    • -t 指定分割符,默认为空格
    • -r 逆序输出,可以指定列进行逆序输出
    • -u 去重
    • -h human,人类可读的方式,通常用于使用存储单位的数据排序

sed

sed 是 stream editor 的简写,用于对输入数据进行过滤和变换。 它可以根据匹配的规则对输入数据进行删除、插入、替换等操作,是一个非常常用的命令。

  • sed 's/old/new/' filename 在filename文件中将第一个匹配到的old替换为new
  • sed 's/old/new/g' filename 全局替换,匹配支持正则表达式(最常用)
  • sed '3i\a new line' filename 在filename第3行之前新增一行 (即添加到第三行)
  • sed -n '1p' filename 将filename的第1行打印出来
    • sed -n '1,3p' filename 打印1到3行
  • sed '/pattern/d' filename 删除匹配pattern的行

awk

awk 是一个文本分析工具,名字为三个设计者的首字母,常用于生成报告、数据提取和处理等任务。
它能够根据匹配的规则对文本进行扫描和处理,并将结果输出到屏幕或写入文件
格式:awk 'pattern { commands }' file(s), 对文件匹配pattern的行执行commands操作

  • awk '/pattern/ {print $1,$3,$5} 打印匹配行的1、3、5列
  • awk '{ total += $1; if ($2 > max) { max = $2 } } END { print total, max }' file.txt 求和第一列,计算第二列的最大值,并打印
  • awk '$3 > 10 {print $1,$2} file.txt' 将所有第三列大于10的行打印,并且只打印第1列和第2列
  • awk -F ',' '{print $1}' file.txt 自定义分隔符为,
  • awk '{printf "%-10s %5d\n", $1, $2}' filename 格式化输出

xargs

xargs 从标准输入中读取数据,并传递到指定命令中

  • ls *\.txt | xargs -t -i mv {} {}.bak 将当前目录下的所有txt文件重命名为xxx.bak

jq

jq 是一个处理json数据的命令,非常常用,需要额外安装.



打包、压缩

tar

tar 命令可以将多个文件或目录打包成一个tar格式的文件, 同时还提供查看和提取tar文件的功能。

此外提供对应选项,还可以在tar文件的基础上进行压缩

  • tar -cvf archive.tar file directory:创建一个名为 archive.tar 的 tar 文件,包含 file 和 directory
  • tar -czvf archive.tar.gz file directory:创建一个名为 archive.tar.gz 的 tar 文件,并使用 gzip 压缩
  • tar -tf archive.tar:列出 archive.tar 文件中的所有文件
  • tar -xvf archive.tar:提取 archive.tar 文件中的所有文件
  • tar -xzvf archive.tar.gz:提取并解压缩 archive.tar.gz 文件中的所有文件
  • tar -rvf archive.tar file2:将 file2 添加到已有的 archive.tar 文件中
  • tar -xf archive.tar.gz:仅解压缩 archive.tar.gz 文件,不提取其中的文件
  • tar -tvf archive.tar:以详细格式列出 archive.tar 文件中的所有文件
  • tar -cvf archive.tar -T filelist.txt:使用 filelist.txt 中列出的文件创建 archive.tar 文件
  • tar -czvf archive.tar.gz --gzip=9 directory:将名为 directory 的目录使用最高压缩级别压缩成 archive.tar.gz 文件

zip & unzip

用于创建和提取 ZIP 归档文件

  • zip -r archive.zip file directory:将 file 和 directory及其所有子目录 压缩成 archive.zip 文件。
  • zip -u archive.zip file2:将 file2 添加到已有的 archive.zip 文件中
  • unzip -l archive.zip:列出 archive.zip 文件中的所有文件
  • unzip archive.zip:解压缩 archive.zip 文件,将其中的文件提取到当前目录。
  • unzip -d dst archive.zip:将 archive.zip 文件中的所有文件提取到指定的目标目录dst

gzip & gunzip

gzip 是常用的压缩工具,用于对文件进行压缩和解压缩操作

  • gzip file.txt:将 file.txt 文件压缩成 file.txt.gz 文件,并删除原始文件
  • gzip -k file.txt:将 file.txt 文件压缩成 file.txt.gz 文件,保留原始文件
  • gzip -c -k file.txt > out.gz: 将文件压缩成 out.gz,并保留原文件
  • gzip -d file.txt.gz:解压缩 file.txt.gz 文件,将其恢复为 file.txt 文件,并删除压缩文件
  • gunzip file.txt.gz:解压缩 file.txt.gz 文件,将其恢复为 file.txt 文件,保留压缩文件
  • gzip -r directory:递归地压缩 directory 目录下的所有文件和子目录
  • gzip -l file.txt.gz:显示 file.txt.gz 文件的压缩信息,包括原始文件大小、压缩后文件大小和压缩比率


用户、组、权限

sudo

sudo指的是super user do,用于以系统管理员(root)或其他用户的身份执行特定任务,需要当前用户拥有足够的权限才能使用该命令。

  • sudo -i 以超级用户(root)的权限登录并执行命令
  • sudo su 两个命令的组合,切换到root用户

su

用于切换用户身份

  • su username

whoami

显示当前用户名

chmod

chmod 用于修改文件或目录的权限
格式:chmod [permissions] [filename]

  • chmod u=rw,g=r,o=r file 将文件file的权限设置为所有者可读写,组用户可读,其他用户可读
  • chmod -R 644 directory 将目录及其子目录中的文件的权限设置为644
  • chmod u+x go-w file 将文件file的文件所有者添加可执行权限,取出用户组和其他的写权限

chown

chown 用于修改文件或目录的所有者和所属组
格式:chown owner[:group] files

  • chown owner:group file:将文件的所有者和所属组同时修改为指定的用户和组
  • chown -R owner directory:将目录及其子目录中的文件的所有者修改为指定的用户

useradd & userdel

useradd 用于创建新的用户账号,userdel用于删除

  • useradd username:创建一个新的名为 username 的用户账号
  • useradd -d /home/username username:创建一个新的用户账号,并将其主目录设置为 /home/username
  • useradd -s /bin/bash username:创建一个新的用户账号,并将其登录 Shell 设置为 /bin/bash
  • useradd -g groupname username:创建一个新的用户账号,并将其所属的用户组设置为 groupname。
  • useradd -r username:创建一个新的系统用户账号,该用户账号通常用于运行系统服务。

passwd

passwd 用于修改用户账号的密码。

  • passwd:执行命令后,系统会提示输入当前用户的旧密码,然后要求输入新密码两次以确认。
  • sudo passwd username:以管理员权限修改指定用户 username 的密码
  • sudo passwd -e username:以管理员权限将指定用户 username 的密码设置为过期状态,强制用户在下次登录时修改密码。
  • sudo passwd -l username:以管理员权限锁定指定用户 username 的密码,禁用该用户账号
  • sudo passwd -u username:以管理员权限解锁指定用户 username 的密码,启用该用户账号

编码、加密

b64

b64 是一个 Base64 编码和解码的命令行工具

  • b64 < input_file > output_file: 读取 input_file 中的内容,将其编码为 Base64 格式并写入 output_file
  • b64 -d < input_file > output_file: 读取 input_file 并将其解码为原始数据,并将结果写入 output_file
  • echo -n "input_string" | b64: 将 input_string编码为base64

ssh-keygen

SSH-keygen 是一个在 Linux 中用于生成、管理和存储 SSH 密钥的工具

  • ssh-keygen -t [rsa|dsa],将会生成密钥文件(公钥)和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub,可以选择 RSA 或 DSA 类型。
  • ssh-keygen -t rsa -C "youremail@example.com"

ssh-copy-id

如果希望免密码登录到远程主机,需要将公钥复制到远程主机

  • ssh-copy-id remote_username@remote_host: 这将提示输入远程主机的密码,并将公钥复制到远程主机的 .ssh/authorized_keys 文件中。

运维、监控

ps

ps 代表着 produce a snapshot,用于显示进程的状态信息

  • ps:显示当前终端会话中属于当前用户的进程列表,这是ps命令最基本的使用方法。
  • ps -ef:显示系统中所有进程的列表,包括其他用户的进程。使用-ef选项可以显示更详细的信息,例如进程ID、父进程ID、进程状态等。
  • ps -aux:显示详细的进程信息,包括CPU和内存使用情况等。使用-a选项可以显示所有用户的进程,使用-u选项可以显示与指定用户相关的进程信息。
  • ps -p:显示指定进程ID的进程信息。通过指定进程ID,可以查看特定进程的详细信息。
  • ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem, -o 自定义输出格式,此命令按内存使用率降序显示进程信息。
  • ps -C <进程名>:查找指定进程名的进程。
  • ps -U <用户名>:查找指定用户的进程。

df

显示文件系统的磁盘空间使用情况

  • df -h 人性化显示磁盘空间使用情况
  • df /path/to/directory 显示指定目录所在文件系统的磁盘使用情况

du

查看指定文件或目录的磁盘使用情况

  • du -h . 查看当前目录及其子目录的磁盘使用情况(人类可读的格式)
  • du -sh . 仅仅查看当前目录的总大小
  • du -d 1 -h . | sort -rh 显示当前目录直系子目录的文件大小,并按从大到小显示

nohup

no hang up, 不挂起,用于在系统后台不挂起的执行命令,退出终端也不会影响命令

  • nohup command &:在后台运行指定的命令,并且将该进程与当前终端会话分离,即使关闭终端也不会中断该进程。
  • nohup command > myout.file 2>&1 &:在后台运行指定的命令,并将输出重定向到指定的文件myout.file中,同时将标准错误输出重定向到标准输出
  • nohup command < inputfile > outputfile 2>&1 &:在后台运行指定的命令,并将输入重定向到指定的文件inputfile中,将输出重定向到指定的文件outputfile中,同时将标准错误输出重定向到标准输出
  • nohup ./test.out &:在后台运行指定的可执行文件test.out,并将输出重定向到nohup.out文件中

kill

格式: kill [signal_option] pid

  • kill -l:列出所有可用的信号名称。例如,常见的信号有HUP(1)、KILL(9)、TERM(15)等
  • kill -9 <进程ID>:强制终止指定进程ID的进程及其子进程
  • kill <进程名称>:终止指定进程名称的进程。例如,kill -9 nginx将终止名为nginx的进程。
  • kill -s <信号名称> <进程ID>:向指定进程发送指定的信号。例如kill -s SIGTERM 12345将向进程ID为12345的进程发送SIGTERM信号

uname

uname命令是一个用于显示系统信息的工具。它提供了关于操作系统的不同方面的详细信息,如内核版本、硬件架构、操作系统类型和发行版等。

常见参数: -s:显示操作系统名称。 -n:显示网络节点主机名。 -r:显示内核版本。 -m:显示硬件架构。 -v:显示操作系统版本。 -a:显示所有可用的系统信息。

最常用命令

  • uname -a 显示全部信息

top

top命令是一个动态查看系统进程信息的实用工具,可以实时地显示系统中各个进程的资源占用状况,例如CPU使用率、内存使用量、运行时间等

  • top:不带任何参数的top命令将显示当前系统的进程列表,包括进程ID、用户、CPU使用率、内存使用量等信息。
    • 在列表中,可以实时地看到各个进程的状态变化,也可以通过键盘操作来过滤出特定类型的进程或者对进程进行排序等。
    • shift + m: 按内存从大到小进行排序
    • shift + p: 按cpu占用从大到小进行排序

history

history命令用于显示和操作命令历史记录

  • history:不带任何参数的history命令将显示当前会话中执行过的所有命令的历史记录,并列出每个命令的执行时间、命令编号以及命令本身
  • history -c:清空当前历史命令列表,只是清空当前会话的历史记录。
  • history -a:将当前会话中执行的新命令追加到历史命令文件中。这样,即使在另一个终端会话中也可以查看当前会话执行的新命令。
  • history -d <offset>:删除历史记录中指定偏移量的命令。例如,history -d 3将删除历史记录中的第3个命令。

lsof

list open file, 列出打开的文件,在linux中,所有的连接都是文件

  • lsof -p <PID> 查看某个进程打开的文件
  • lsof /path/to/file 查看某个文件被哪个进程打开
  • lsof -i [tcp, udp] 查看网络连接
  • lsof -i:8080: 显示8080端口的网络连接
  • lsof -t -i:443 -t获取pid号

sysctl

systemctl



网络相关

ping

ping [hostname or ip address]

curl

  • curl -x http:xxxx.com:<port> -o k3s https://github.com/k3s-io/k3s/releases/download/v1.27.2%2Bk3s1/k3s 使用代理下载k3s二进制文件
  • curl ipinfo.io/ip 查看ip
  • curl -L 跟随跳转

nslookup

nslookup用于查询DNS(Domain Name System)来获取域名或IP地址的相关信息

  • nslookup example.com 查询域名对应的IP地址, 这将返回域名example.com对应的IP地址
  • nslookup example.com 8.8.8.8 指定查询8.8.8.8(Google的公共DNS服务器)上的example.com域名对应的IP地址
  • nslookup 192.0.2.1 这将返回IP地址192.0.2.1对应的域名。
  • nslookup 192.0.2.1 8.8.8.8 查询8.8.8.8上的IP地址192.0.2.1对应的域名
  • nslookup -debug example.com 8.8.4.4 使用-debug参数可以获得更详细的输出,包括与DNS服务器的通信信息

hostname

hostname是一个用于显示和设置系统主机名称的Linux命令

  • hostname 显示当前主机名
  • hostname 新主机名 修改当前主机名
  • hostname -i 显示本机回环IP
  • hostname -I 显示本机配置IP

traceroute

traceroute命令用于追踪网络数据包从源主机到目标主机的路径,并显示每个跃点的延迟时间

  • traceroute <目标主机地址或域名> 追踪到目标主机的路径, 默认情况下,traceroute将发送3个数据包到目标主机,然后等待每个跃点的回复。它会显示每个跃点的IP地址和延迟时间。

ssh

SSH(Secure Shell)是一种安全网络协议,用于在不安全的网络上安全地进行远程登录和执行命令

  • ssh [user@]hostname 远程登录主机(交互式输入密码)
  • ssh -p <port> [user@]hostname 使用-p选项可以指定连接目标主机的非默认端口(默认为22)
  • ssh -i ~/Desktop/cvm.pem root@43.xxx.xxx.113 指定使用秘钥cvm.pem以root用户名登录服务器43.xxx.xxx.113
  • ssh -L <local_port>:<remote_host>:<remote_port> [user@]hostname 使用-L选项可以建立本地端口与远程主机的端口之间的转发
  • ssh -L 9000:localhost:9000 -i ~/Desktop/cvm.pem root@43.xxx.xxx.113 隧道技术, 将本地9000端口转发到远端机器的9000端口

scp

scp是secure copy的缩写,它基于ssh协议用于在本地和远程服务器之间复制文件和目录

  • scp local_file remote_user@remote_host:remote_directory 将local_file复制到remote_host上的remote_directory目录中,需要输入远程主机的登录密码
  • scp remote_user@remote_host:remote_file local_directory 将远程主机上的remote_file复制到本地的local_directory目录中
  • scp -r local_directory remote_user@remote_host:remote_directory 将本地的local_directory及其内容复制到remote_host上的remote_directory目录中`
  • scp -F /path/to/ssh_config remote_user@remote_host:remote_file local_directory 使用指定的SSH配置文件进行连接和文件复制
  • scp -v remote_user@remote_host:remote_file local_directory 在复制过程中显示详细的进度信息,包括传输速度、已传输的文件数量等
  • scp -i xxx.pem filename username@ip:targetPath 使用秘钥

netstat

  • netstat -ntlp
  • netstat -s

ss

  • ss -n | grep ESTAB | wc -l

dig

dig是一个用于查询DNS域名的工具,可以显示从请求的域名服务器返回的答复

wget

httpie


包管理

apt-get

apt

dnf

apkadd

apk

快捷键

ctrl c

ctrl z

ctrl d