基础
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 复制到 dstcp -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浏览
- 和vim类似的操作
wc
wc 用来统计指定文件中的字节数、字数、行数的工具
wc file.txt
返回 file.txt文件的 字节数(bytes)、字数(words)、行数(lines)- 选项
-c
:只输出字节数-l
:只输出行数-m
:只输出字数-w
:只输出字数,一个字定义为由空白、跳格或换行字符分隔的字符串-L
:打印最长行的长度 wc 的使用频率其实也不算高
sort
sort 是一个排序命令,它按文件中的每行进行排序,可以用-k
选项指定每行中用于比较的排序键
假设file.txt
的内容格式为username
和age
:
|
|
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替换为newsed '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 和 directorytar -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
将目录及其子目录中的文件的权限设置为644chmod 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/usernameuseradd -s /bin/bash username
:创建一个新的用户账号,并将其登录 Shell 设置为 /bin/bashuseradd -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_fileb64 -d < input_file > output_file
: 读取 input_file 并将其解码为原始数据,并将结果写入 output_fileecho -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
查看ipcurl -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
显示本机回环IPhostname -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.113ssh -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域名的工具,可以显示从请求的域名服务器返回的答复