返回

Linux Common Commands

Linux常用命令。


Linux常用命令有很多,本文不会逐个介绍。以下命令是我在后期使用中遇到的,算是我对Linux常用命令的补充、回顾、总结。本篇文章阅读需要一定的Linux基础。更多常见命令可参考:600条Linux命令总结

持续更新中…


ln

  • ln命令在Linux系统中用于创建文件链接

    • Linux中文件链接的方式有两种:
      • 符号链接(也称为软链接Symbolic Link):包含了到原文件的路径信息,相当于一个指向原文件的快捷方式
        • 符号链接有自己的文件属性及权限等。
        • 可对不存在的文件或目录创建符号链接。
        • 符号链接可交叉文件系统,即可以在不同的文件系统之间创建。
        • 删除符号链接并不影响被指向的文件,但若被指向的原文件被删除,则相关符号链接被称为死链接(dangling link)。若被指向的文件重新被创建,死链接可恢复为正常的符号链接。
        • 符号链接文件的大小是其指向的文件的路径字符串的字节数。
      • 硬链接:硬链接本质上是给一个文件取一个新的名称,原文件和硬链接在物理上仍然是同一个文件。它们共享相同的inode(索引节点)和数据块。
        • 创建硬链接会在对应的目录中增加额外的记录项以引用文件。
        • 原文件和硬链接文件对应于同一文件系统上的一个物理文件。
        • 创建硬链接时原文件的连接数(i_nlink)会递增。即硬链接数递增。
        • 删除文件时,rm命令会递减计数的链接数。文件要是存在,至少有一个链接数。当链接数为零时,该文件才会被真正删除。
        • 硬链接不能跨域驱动器或分区,也不支持对目录创建硬链接。
    • 总结来说,符号链接(软链接)和硬链接的主要区别在于:
      • 符号链接是一个独立的文件,它包含了到原文件的路径信息(快捷方式);而硬链接则与原文件共享相同的inode和数据块(文件别名)。
      • 符号链接可以跨文件系统,并且可以对不存在的文件或目录创建;而硬链接则不能跨域驱动器或分区也不能对目录创建
      • 删除符号链接不影响原文件,但删除原文件会使符号链接成为死链接;而删除硬链接文件时,只有当所有硬链接都被删除且原文件的链接数为零时,文件才会被真正删除。即硬链接数为0,文件才真正被删除。
  • 这个命令允许你在不同的位置为同一个文件或目录建立同步的链接,从而避免了在多个位置重复存储相同的文件内容,节省了磁盘空间

  • ln命令的基本语法如下

    1
    
    ln [选项] <源文件或目录> <链接文件或目录>
    
    • 常用选项包括:
      • -s:创建符号链接(软链接)。这会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,而是保存了原始文件的路径。(创建快捷方式)
        • 不使用-s选项时创建硬链接
      • -f:强制执行,如果链接文件已存在则覆盖。
      • -v:显示详细的输出信息。
      • --help:查看帮助文档。
    • 理解记忆:ln可以理解为link的缩写,s可以理解为soft软的意思。
    • 注意:源文件一般用绝对路径,相对会出现死链接情况。

简单介绍一些ls -lh输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ ls -lh
total 20K
-rw-r--r--. 1 root root 19K May  8 22:49 abc.txt
drwxr-xr-x. 2 root root  18 May  8 23:15 demo
# l显示详细信息,h文件大小用人类可读懂的方式显示。
-rw- r-- r-- 
-开头表示文件,d表示目录,l表示链接,三位为一组用rwx
drwx     	r-x       		r-x
当前用户权限  用户所属组权限		其他用户权限

数字1表示硬链接数,理解为别名,别名为0,文件才会被删除。
有多少种方式可以访问该文件或目录
	文件一般为1:绝对路径
	目录只有一层一般为2(不包含子目录):绝对和cd ..

root :拥有者
root :所在组,没指定默认同名。

5月 8 22:49 文件最后修改日期时间

最后:文件或目录名称

有箭头表示软连接,没有硬链接。

演示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
localhost test $ ls -lh
total 20K
-rw-r--r--. 1 root root 19K May  8 22:49 abc.txt
drwxr-xr-x. 2 root root  18 May  8 23:46 demo

localhost test $ ln -sv ~/test/abc.txt ./demo/soft
‘./demo/soft’ -> ‘/root/test/abc.txt’

localhost test $ ln -v ~/test/abc.txt ./demo/hard 
‘./demo/hard’ => ‘/root/test/abc.txt’

localhost test $ ls -lh                          
total 20K
-rw-r--r--. 2 root root 19K May  8 22:49 abc.txt
drwxr-xr-x. 3 root root  42 May  8 23:46 demo

localhost test $ cd demo

localhost demo $ ls -lh
total 20K
-rw-r--r--. 2 root root 19K May  8 22:49 hard
lrwxrwxrwx. 1 root root  18 May  8 23:46 soft -> /root/test/abc.txt

注意:

  • 测试环境是在Linux中,ln命令并不适用于windows环境。创建的文件链接无效。
  • 目录只能创建软链接,不能创建硬链接
  • 文件两种链接都可以创建

curl

curl命令是一个利用URL规则在命令行下工作的文件传输工具,它支持文件的上传和下载,因此被视为综合传输工具,但传统上习惯称其为下载工具。curl支持包括HTTP、HTTPS、FTP等众多协议,并具备多种特性,如POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等。这些特性使得curl在处理网页处理流程和数据检索自动化方面非常有用。

总结:用于发送网络请求,可以下载和上传文件。而wget只能用于下载文件,但wget下载文件的功能比curl强大。

安装:

  1. linux系统:根据你的Linux发行版,使用相应的包管理器来安装curl。
    • 对于Debian/Ubuntu系统,使用apt-get命令安装:sudo apt install curl
    • 对于CentOS/Fedora系统,使用yum命令安装:sudo yum install curl
    • 对于Arch Linux系统,使用pacman命令安装:sudo pacman -S curl
  2. windows系统:
    1. 官网下载对应版本,添加一个CURL_HOME环境变量名,指向的是curl.exe文件所在路径。并将其添加到path环境变量中。
    2. 或者安装msys2利用pacman包管理器安装。【推荐】:sudo pacman -S curl
    3. 或者安装Mingw自带curl,Mingw也可以用msys2来安装。
  3. MacOS系统自带。

基本使用

  • curl命令的基本语法格式为:curl [选项] URL。其中,URL是要请求的目标地址,而选项则用于指定各种参数和功能。

  • -X--request:用于指定HTTP请求方法,如GET、POST、PUT、DELETE等。

    • 默认发送get请求。
    1
    
    curl -X POST http://example.com/
    
  • -H--header: 添加自定义的 HTTP 头信息。

    1
    
    curl -H "Content-Type: application/json" http://example.com/
    
  • -d--data: 发送 POST 请求时,将数据作为请求体发送。

    1
    
    curl -d "param1=value1&param2=value2" http://example.com/
    

    对于 JSON 数据:

    1
    
    curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" http://example.com/
    
  • -F--form: 用于发送 multipart/form-data 格式的数据,通常用于文件上传。

    • 参数"文件名=@path",还可以指定类型"文件名=@path;type=MIME"
    1
    
    curl -F "file=@filename.txt" http://example.com/upload
    
  • -o--output: 将响应输出到文件,而不是显示在终端上。默认当前目录

    1
    
    curl -o output.html http://example.com/
    
    • -O: 将响应保存到本地文件,文件名与远程文件的文件名相同。在当前目录

      1
      
      curl -O http://example.com/file.txt
      
  • -s--silent: 静默模式,不显示进度或错误消息。常用S组合使用,显示错误消息。

  • -v--verbose: 详细模式,显示详细的通信过程,包括请求头和响应头。

  • -i: 显示响应头信息以及返回的内容 body。

  • -I: 只显示响应头信息。

  • -u 用户名:密码: 指定用户名和密码进行身份验证。

    1
    
    curl -u username:password http://example.com/
    
  • -L: 跟随重定向。当 HTTP 响应是一个重定向时,curl 会自动获取重定向后的内容。

  • -k--insecure: 允许连接到不安全的 SSL 站点,即忽略 SSL 证书验证。

常用组合:curl -fsSL,默认get请求。

  • f不显示客户端错误。
  • s不显示进度、错误消息。配合S显示错误消息
  • L接受重定向。

wget

wget 是一个在 Unix 和 Linux 系统上常用的命令行工具,用于从网络上下载文件。

优点:

  • 支持断点续传:如果下载过程中连接中断,可以在之后从断点处继续下载。
  • 支持递归下载:可以下载网页上的所有链接文件,并重建目录结构。
  • 强大的重试机制:在下载过程中如果网络出现问题,wget 会自动重试,直到下载完成。
  • 后台执行:支持在后台运行下载任务,用户无需保持登录状态。

curl没有以上优点,但它支持更多的协议。wget只支持HTTP、HTTPS和FTP协议。curl使用更广泛。

安装:

  1. linux系统:根据你的Linux发行版,使用相应的包管理器来安装wget。

    • 对于Debian/Ubuntu系统,使用apt-get命令安装:sudo apt install wget

    • 对于CentOS/Fedora系统,使用yum命令安装:sudo yum install wget

    • 对于Arch Linux系统,使用pacman命令安装:sudo pacman -S wget

  2. windows系统:

    • 官网GNU Wget下载安装或其他可靠的软件下载,然后路径添加到环境变量path中。
    • 或者安装msys2利用pacman包管理器安装。【推荐】:sudo pacman -S wget
  3. macos系统:

    • 对于macOS,使用Homebrew包管理器来安装wget。

      1
      
      brew install wget
      

基本使用

  1. -b, –background:在后台执行下载任务。

  2. -c, –continue:继续下载之前未完成的文件。

  3. -r, –recursive:递归下载,下载指定 URL 中的所有链接。可以下载整个目录及其子目录。

    1
    
    wget -r http://www.example.com/
    

    注意:在使用递归下载时,建议加上 -np-nH 选项,以避免下载过多的不必要文件和创建复杂的目录结构。

  4. -np, –no-parent:不递归下载上级目录。

  5. -nH, –no-host-directories:不创建主机目录,将文件保存在当前目录。

  6. -P DIRECTORY, –directory-prefix=DIRECTORY:将下载的文件保存到指定的目录。

    1
    
    wget -P /tmp http://www.example.com/file.zip
    
  7. -O FILE, –output-document=FILE:将下载的文件保存为指定的文件名。如果存在会覆盖。-N(时间戳检查),如果旧会覆盖,反之不会。

    1
    
    wget -O new_file.zip http://www.example.com/file.zip
    
  8. -nc, –no-clobber:如果文件已经存在,不覆盖原有文件。

  9. -nv, –no-verbose:下载时只显示更新和出错信息,不显示详细的执行过程。

  10. -v, –verbose:详细模式,增加输出信息。

  11. -q, –quiet:静默模式,减少输出信息。

  12. –no-check-certificate:下载 HTTPS 网站资源时,跳过证书检测过程。

  13. -t NUM 或 –tries=NUM:指定最大尝试次数。如果下载失败,wget 会尝试重新下载指定的次数。

  14. -U AGENT 或 –user-agent=AGENT:指定 User-Agent 字符串。这可以用来伪装为不同的浏览器或客户端。

  15. -N 或 –timestamping:如果本地文件存在且时间戳较新,则不重新下载文件。

  16. -T SEC 或 –timeout=SEC:指定超时时间(以秒为单位)。

  17. -A TYPES 或 –accept=TYPES:指定下载文件的类型。例如,-A jpg,png,gif 表示只下载 jpg、png 和 gif 文件。

  18. -d 或 –debug:打印调试输出。这会在标准错误上输出大量信息,通常用于诊断问题。

常用组合:

wget -O-:O表示指定文件名,后面-表示没有指定文件名,内容将输出到TTY。

通常配合bash -c "$(wget -O- url)"运行脚本。url为脚本地址。

  • 其中$()表示在当前TTY中运行子命令,下载脚本。

  • [bash -c](#bash -c)表示将下载的字符串做为命令执行。


bash -c

bash -c 命令用于在 Bash shell 中执行一个字符串作为命令。

基本语法

1
bash -c 'command_string' [arg0 [arg1 ...]]
  • command_string 是你想要执行的命令字符串。
  • arg0arg1 等是可选的,它们会被用作 $0$1$2 等 shell 变量在 command_string 内部。
    • 注意这里的$0并不是脚本名或终端名,而是第一个参数。
  • 字符串可以用""/'',区别在于双引号会转义特殊字符,单引号不会。执行脚本时建议双引号。

示例:

1
2
3
4
5
6
7
$ bash -c 'echo Hello, World!'
Hello, World!

$ bash -c 'echo $0 $1' bash test
bash test 

# bash -c "$(wget -O- https://gist.githubusercontent.com/lss233/2fdd75be3f0724739368d0dcd9d1367d/raw/62a790da4a391af096074b3355c2c2b7ecab3c28/chatgpt-mirai-installer-gocqhttp.sh)" chatgpt-qq-bot安装脚本

pacman

Pacman是Arch Linux及其衍生发行版(如Manjaro、EndeavourOS等)使用的包管理器。总结它,是因为我们可以在Windows上安装msys2来使用pacman包管理器,进而在Windows上安装Linux命令。

基本用法

1
sudo pacman [选项] [软件名]

常用选项如下:

  • -S:安装软件包、软件源列表。
    • -y:刷新软件源列表。
    • -u:更新软件包到最新版。
  • 以上三个选项可以组合使用。常用
    • -Syu:更新软件源列表,并升级已安装的包到最新版。【推荐】*
    • -Sy:更新软件源列表并安装。【推荐】*
    • -Su:只升级已安装的包到最新版。
  • -S package_name安装软件包。多个用空格隔开。【推荐】*
  • -R package_name:卸载软件包(会保留依赖)。
    • -Rs package_name卸载一个软件包及其依赖(未被其他包使用的依赖)
    • -Rns package_name卸载一个软件包并删除不再使用的依赖。【推荐】*
  • -Sc:清理未使用的包缓存。
    • -Scc:清理所有包缓存。
  • -Ss keyword:搜索包含关键字的软件包。
    • -Si package_name:显示软件包信息。【推荐】*
  • -Q:列出所有已安装的软件包。
    • -Qs keyword:列出已安装的包含关键字的软件包。【推荐】
    • -Qi package_name:显示已安装软件包的信息。【推荐】*
    • -Ql package_name:列出软件包中包含的文件。【推荐】
    • -Qk:检查系统中所有已安装包的完整性。
      • -Qkk package_name:检查指定软件包的完整性。

Licensed under CC BY-NC-SA 4.0
最后更新于 Aug 16, 2024 19:24 +0800