Linux-常用命令

# curl

  • 发送GET请求
curl http://example.com/file
1
  • 发送POST请求
curl -d "param1=value1&param2=value2" http://example.com/file
1
  • 发送JSON数据
curl -H "Content-Type: application/json" -X POST -d '{"key1":"value1", "key2":"value2"}' http://example.com/file
1
  • 下载文件
# 下载文件并重命名
curl -o filename http://example.com/file
# 下载文件并保留服务器文件名
curl -O http://example.com/file
# 下载文件到指定目录
curl -o /path/filename http://example.com/file

1
2
3
4
5
6
7
  • 上传文件
curl -F "file=@filename" http://example.com/file
1

# wget

  • 下载文件
# 下载文件并重命名
wget -O filename http://example.com/file
# 下载文件到指定目录
wget -P /path http://example.com/file
# 下载文件并保留服务器文件名
wget http://example.com/file
# 断点续传
wget -c http://example.com/file

1
2
3
4
5
6
7
8
9

# 桌面环境开启与关闭

# ubuntu

  • 开启桌面环境systemctl start gdm
  • 关闭桌面环境systemctl stop gdm

# 查找

# find

格式 find [path] [option] [action]

  • [path]:指定查找的目录
  • [option]:查找选项
    • -name pattern:按文件名查找,支持使用通配符 * 和 ?
    • -type type 按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等
    • -size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)
    • -maxdepth levels:指定查找的最大深度
  • [action]:查找的动作
    • -print:打印文件名
    • -delete:删除文件

使用示例:

  • find . -depth -type d -name 'target' -exec rm -rf {} +:删除当前目录下所有名为 target 的目录

    • -depth:按深度优先搜索,避免出现目录被删除,进入子目录时报错目录不存在的情况
    • -type d:查找目录
    • -exec:执行指定的命令
    • {}:表示查找到的文件
    • +:表示将查找到的文件作为参数传递给命令,一次执行多个文件
  • find /path -type f -maxdepth 2 -name '*.log' -exec cp {} /path2 \;:将 /path 目录下所有后缀为 .log 的文件复制到 /path2 目录

    • -maxdepth 2:查找深度为 2
    • \;:表示将查找到的文件作为参数传递给命令,一次执行一个文件
  • find /path -type f -name '*.log' -exec grep 'pattern' {} \;:查找 /path 目录下所有后缀为 .log 的文件中包含 pattern 的行

  • find . -depth -type d -name "$target_dir" -print0 | xargs -0 rm -rf:删除指定目录,包括深层次的子目录

    • -print0:打印文件名,以空字符作为分隔符
    • xargs -0:将输入转换为命令行参数,以空字符作为分隔符
  • find . -maxdepth 1 -type d ! -path . -exec sh -c 'cd "{}" && git pull' \;

    • ! -path .:排除当前目录
    • -exec:执行指定的命令
    • sh -c 'cd "{}" && git pull':切换到目录并执行 git pull 命令

# 文件传输

# scp

# 从本地主机复制文件到远程主机
scp /path/file user@host:/path
# 从远程主机复制文件到本地
scp user@host:/path/file /path
# 从远程主机复制文件到本地并重命名
scp user@host:/path/file /path/filename
# 传输文件夹
scp -r /path user@host:/path

# 指定端口
scp -P 22 /path/file user@host:/path
1
2
3
4
5
6
7
8
9
10
11

# rsync

rsync -avzP /path/file user@host:/path
1
  • a(归档):这个选项会保留文件的属性(例如时间戳、权限等),并且会递归复制目录。
  • v(详细):这个选项会显示传输过程中的详细信息。
  • z(压缩):这个选项会在传输过程中压缩数据,可以加快传输速度。
  • P(进度):这个选项会显示文件传输的进度信息。

指定端口

rsync -avzP -e 'ssh -p 22' /path/file user@host:/path
1

# 压缩文件

# zip

# 压缩文件

zip -r [压缩文件名].zip [文件夹名称]
1
  • -r 选项表示递归压缩文件夹

# 解压文件

unzip [压缩文件名].zip
1

# tar

# 打包文件

tar -czvf [压缩文件名].tar.gz [文件夹名称]

1
2
  • c 选项表示创建新的归档文件。
  • z 选项表示使用 gzip 来压缩归档文件。
  • v 选项表示在创建归档文件时显示详细信息。
  • f 选项表示后面跟着的是归档文件的名称。

# 解压文件

tar -xzvf [压缩文件名].tar.gz
1
  • x 选项表示解压缩归档文件。

指定解压后的文件名

tar -xzvf [压缩文件名].tar.gz -C /path
1

# awk

# 语法

awk options 'pattern {action}' file
1
  • options:用于控制 awk 的行为
    • -F [分隔符]:指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。
    • -v [变量名]=[值]:设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量
    • -f [脚本文件]:指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载
  • pattern:用于匹配输入数据的模式。如果省略,则 awk 将对所有行进行操作。
  • action:在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行。
  • file:文件名

# 示例

  • 打印文件的第一列
awk '{print $1}' file
1
  • kill进程
ps -ef | grep [进程名] | grep -v grep | awk '{print $2}' | xargs kill -9
1
  • 从docker swarm服务获取镜像版本
docker service ls | grep $service_name: | awk '{print $5}' | awk -F:v '{print $2}'
1

# sed

# 语法

# 示例

  • 替换文件中的字符串
sed -i 's/old/new/g' file
1
  • 删除文件中的空行
sed -i '/^$/d' file
1
  • 删除文件中的指定行
sed -i '3d' file
1

# xargs

xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。

  • a file 从文件中读取参数

  • e flag 当xargs分析到含有flag这个标志的时候就停止

  • p 当每次执行一个argument的时候询问一次用户。

  • n num 每次传递给命令的参数个数为num个。

  • t 先打印命令再执行。

  • l num 一次读取num行作为命令参数。

  • d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。

上次更新: 2025/01/08, 15:27:56
最近更新
01
docker-compose笔记
01-12
02
MySQL数据迁移
11-27
03
Docker部署服务,避免PID=1
11-27
更多文章>