Second CertStone

Linux 常用命令

2024-08-23 · 12 min read

一、学会“学习命令”

在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;

  • 需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令;
  • 查看命令在哪个位置,我们需要使用which;
  • 而对于命令的具体参数及使用方法,我们需要用到强大的man;

简单说明

简要说明命令的作用(显示命令所处的man分类页面):

$ whatis command

更加详细的说明文档:

$ info command

使用man(详细)

查询命令command的说明文档:

$ man command
eg:man date

使用page up和page down来上下翻页

⭐⭐⭐知道命令但是忘了参数怎么写?

在命令后面加--help-h即可查看用法

for example:

cat --help

会得到下面的内容:

root@dkqhdNzD50ucsy0:~# cat --help
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s) to standard output.

With no FILE, or when FILE is -, read standard input.

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       equivalent to -vT
  -T, --show-tabs          display TAB characters as ^I
  -u                       (ignored)
  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
      --help     display this help and exit
      --version  output version information and exit

Examples:
  cat f - g  Output f's contents, then standard input, then g's contents.
  cat        Copy standard input to standard output.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report any translation bugs to <https://translationproject.org/team/>
Full documentation <https://www.gnu.org/software/coreutils/cat>
or available locally via: info '(coreutils) cat invocation'

能联网?当然要上网去搜了!

上网搜索往往能得到更容易于理解的答案,不过缺点就是比较麻烦,效率较低

二、基础 Shell 命令

image-20240630170703163

Prompt 能告诉我们什么

  • Prompt 即命令提示符,用来等待输入并给你提供一些信息

  • 其中最重要的信息就是工作路径(Working directory)工作路径(Working directory)工作路径Working directory,是当前 shell 所处的“位置”

    • 一定要时时刻刻知道自己“在哪里”
    • ⚠️ rm -rf ./*
  • *nix 下的路径分隔符是 /,Windows 下是 \

  • 通常还要有的信息是当前正在操作的用户

    • 和权限有关,比如普通用户还是 root
  • 向其中输入命令然后回车,就可以执行命令

常见命令⭐⭐⭐

  • pwd 获取当前路径
  • 可见 ~ 代表的就是当前用户的 “home” 目录

怎么没有 C:\

  • Windows 下有多个“根目录”,即不同“盘符”,比如 C:\D:\
  • *nix 没有分盘概念,所有的文件都挂载在唯一的根目录 /
  • whoami:显示当前用户名称

  • ls:显示指定工作目录下的内容;用法:ls 文件或目录
    (1)ls:./ 查看当前目录所有的文件和目录
    (2)ls -l:以长格式显示目录下的内容列表
    (3)ls -a:查看所有的文件,包括隐藏文件,以.开头的文件

  • cd:切换当前工作目录;用法:cd后面加目录
    (1)cd /root:进入/root 目录
    (2)cd ../:返回上一级目录
    (3)cd ./:进入当前目录

  • cp:拷贝文件;用法:cp 要复制的文件 目标路径
    (1)cp xx.txt /home/backup.txt ,拷贝文件至/home目录下并且重命名为bak.txt
    (2) cp xx –r /home:拷贝xx目录到/home目录下

  • cat:查看文件内容;用法:cat 文件路径
    (1)cat test.txt:查看当前文件夹下 test.txt 文件内容

  • echo:回显;用法:输入什么就打印什么
    (1)echo "hello"

  • mkdir:创建目录;用法:mkdir 目录名

  • rmdir:删除空目录,非空不可删除;用法:rmdir 空目录名称

  • rm:删除文件或者目录,用法:rm –rf 文件名或目录 (-r 表示递归,-f 表示强制)

  • touch:创建文件;用法:touch 文件名,如果文件存在,则修改当前文件时间,文件内容不变

  • mv:重命名或者移动文件/目录;用法: mv 原文件名 新文件名 或 mv 原文件位置 新文件位置

  • chmod:修改文件或目录的权限
    chmod u+x 目录/文件:给该目录/文件所有者赋予执行权限
    chmod ug-x 目录/文件:给该目录/文件所有者和组用户减去执行权限
    chmod 777 目录/文件:给该目录/文件所有者、组用户、其他用户赋予所有权限
    chmod 764 目录/文件:给该目录/文件所有者赋予全部权限,组用户赋予读写权限,其他用户赋予读权限
    Linux 文件权限

  • hexdump: 用法:hexdump filename

    :以十六进制输出文件内容

    • -C:并排输出十六进制与 ASCII

    • -n N:输出前 N 个字节

  • >:表示将前面命令的执行结果写入后面的文件中,会覆盖原有文件内容;

    ​ 常见用法echo world > test.txt

  • >>:表示追加;常见用法echo world >> test.txt

  • find:查找指定文件;用法:find 目录 -name 文件
    (1)find /home -name “*.txt” :查找/home目录下,所有以.txt 结尾的文件或者目录。

  • groupadd:创建组;用法:groupadd 组名;注:在/etc/group中查看组名;

    注:将某用户加入root用户组:usermod –g root 用户名

  • groupdel:删除组;用法:groupdel 组名

  • grep:用于查找文件里符合条件的字符串;用法:grep [参数] 目标
    -r:指定要查找目标的是目录而非文件时使用
    -n:显示具体行数
    –include:指定后缀文件
    (1)grep -rn “eval“ target:搜索target目标(目录/文件)中是否含有eval的文件,并且确定在所含有的文件中是第几行
    (2)grep -rn --include=‘*.php’ ‘eval(’ target:搜索target目标(目录/文件)中是否含有eval的文件(注:这里是指定只搜索.php后缀的文件),并
    且确定在所含有的文件中是第几行

  • head:默认查看文件前10行内容;用法:head 文件名;如果查看前20行,用法:head -20 文件名

  • tail:默认查看文件后10行内容;用法:tail 文件名,如果查看后20行,用法:tail -20 文件名

  • more或less:分页查看文件内容;用法:more 文件名或less 文件名
    注:cat 和 more 同时使用例如: cat test.txt |more 分页显示 text 内容,|符号是管道符,用于把|前的输出作为后面命令的输入

  • useradd:创建用户;用法:useradd 用户名,注:在/etc/passwd中可查看
    (1)将用户添加到指定组中: useradd -g 组名 用户

  • userdel:删除用户;用法:userdel 用户名

  • passwd: 设置密码;passwd 用户名,不加用户名默认修改当前用户

  • vi:修改文件(命令行模式、文本输入模式、末行模式),vi或vim打开一个文件,首先是命令行模式,然后按 i 进入文本输入模式,可以
    在文件里写入字符等信息。写完后,按 esc 进入命令模式,然后输入:进入末行模式,例如输入 :wq 表示保存退出。如果想直接退出,不
    保存,可以执行 :q , 如果无法退出可以使用 q! 强制退出。

  • id:显示用户的ID,以及所属群组的ID

  • ifconfig:显示网络详情

  • netstat:显示网络状态
    netstat –anplt:查看所有tcp端口
    netstat –anplu:查看所有udp端口

  • kill:停止运行执行中的程序或工作
    kill -9:强制执行

  • ping:检测主机;用法:ping ip

  • ps:显示当前进程的状态,类似于 windows 的任务管理器。 -a 列出全部进程

  • reboot:重启;用法:reboot -f(强制重启)

  • su:切换用户;用法:su 用户名

  • sudo:使用root用户执行命令;用法:sudo 命令

  • uname:显示系统信息;用法:uname –a(显示系统详细信息)

  • clear:清空命令行

重定向

  • 即文件流重定向
  • 三种流:stdin 标准输入流,stdout 标准输出流,stderr 标准错误流
  • 如何更便捷地将输出存入文件/将文件内容作为程序输入?通过重定向
  • 通过 > file 将 stdout 重定向到文件,通过 < file 将文件重定向到 stdin
  • 通过 2> file 将 stderr 重定向到文件
    • 2 是什么意思?stderr 的文件描述符
  • 两个右箭头(大于号)>> 表示追加模式,即不覆盖原文件,而是追加到文件末尾
  • 通过 &> file 将 stdout 和 stderr 都重定向到文件

常见用法:

  • echo "Hello world" > file:将字符串 Hello world 写入 file
  • cat file1 file2 > file3:将 file1file2 拼接,输出到 file3
  • diff file1 file2 > file3:将 file1file2 的差异写入 file3
  • ./a.out < file:将 file 作为 a.out 的输入

管道

  • 通过管道(pipe)可以将一个命令的输出作为另一个命令的输入
  • 使用管道操作符 |,将左侧命令的 stdout 连接到右侧命令的 stdin
  • 通过管道可以将多个命令连接起来,形成一个命令序列,可以通过一行命令来完成相对复杂的操作(e.g. SadServers Saskatoon)
$ cat /home/admin/access.log | cut -d ' ' -f 1 | sort | uniq -c | sort | tail -n 1

常见用法:

  • some cmd | tail -n lines:只输出最后 lines
  • some cmd | less:分页输出
  • some cmd | grep pattern:在输出中查找匹配 pattern 的行
  • 与 cut / sort / uniq / awk 等命令搭配,处理文本数据
  • ...
curl https://www.baidu.com/robots.txt | grep User

环境变量

  • 记录了系统信息的变量,可供程序读取
  • 通过 echo $var 来输出某一环境变量的值,env 命令查看所有环境变量
  • 一个关于环境变量和 shell 命令执行的例子
    • 🤔 命令是什么(例如 ls)?
    • -> 绝大部分都是可执行文件(/bin/ls),执行命令就是执行程序
    • 🤔 为什么 shell 可以只通过 ls 就找到 /bin/ls 这个可执行文件?
    • -> 在 PATH 环境变量中查找
    • 🤔 为什么一定要用 ./a.out 而不是 a.out 来执行程序?
    • -> 因为 .(即当前目录)并不在 PATH 变量中
  • 设置环境变量
    • export var=value:设置环境变量
      • 仅在当前执行的 shell 中有效。如何持久化?写入配置文件
    • unset var:删除环境变量

使用printenvenv可以列出当前用户会话的所有环境变量及其值。

补充

  1. chown:更改文件或目录的所有者和所属组。例如,chown user:group file.txtfile.txt 的所有者更改为 user,所属组更改为 group
  2. tar:用于归档文件。例如,tar -czvf archive.tar.gz directory/directory/ 目录及其内容压缩为 archive.tar.gz 文件。
  3. df:显示磁盘空间使用情况。
  4. du:估计文件和目录的磁盘使用情况。例如,du -sh directory/ 将显示 directory/ 目录的总磁盘使用情况。
  5. ps:显示当前运行的进程。使用 ps aux 可以查看所有进程的详细信息。
  6. kill:终止一个进程。你需要知道进程的ID(PID),然后使用 kill PID 来终止它。
  7. tophtop:实时显示系统状态和运行的进程。htop 是一个增强版的 top,界面更加友好。
  8. nanovimemacs:这些是文本编辑器,用于编辑文件。nano 是一个简单的命令行文本编辑器,适合初学者;vimemacs 是更强大的编辑器,有大量的快捷键和功能。
  9. wget:从网络上下载文件。例如,wget http://example.com/file.txt 将从 http://example.com 下载 file.txt
  10. curl:在命令行中发送HTTP请求或下载文件。与 wget 类似,但提供了更多的选项和功能。
  11. apt(或 yumdnf,取决于Linux发行版):用于安装、更新和删除软件包。例如,apt update 更新软件包列表,apt upgrade 升级所有可升级的软件包,apt install package-name 安装一个软件包。
  12. rebootshutdown:分别用于重启和关闭系统。