基础知识 - shell 💻

基础知识 - Shell

  • 版本:2023秋季学期

前置知识

  • 🤔 什么是 Shell ?
    • 简单来说,Shell 是一个程序,能够从键盘接收命令并转给系统去执行。
    • CLI(Command-line interface) vs GUI(Graphical user interface)
      • CLI: 命令行界面
      • GUI: 图形界面
    • 在大多数 Linux 发行版中,Shell 默认是 Bash(Bourne Again Shell), 除此之外还有很多种 Shell, 如 zsh, ksh, tcsh 等等;Windows 上的 Shell 有 PowerShell, cmd.exe 等等。
  • 📙 shell vs terminal vs command line vs Bash?

shell 的基本命令

命令 作用
ls 列出当前目录内容
cd 切换工作目录
pwd 打印当前工作目录
touch 创建文件
mkdir / rmdir 创建 / 删除目录
mv 移动
cp 复制
rm 删除
echo 输出字符串
man 查看帮助文档
date 打印当前日期时间
which 从环境变量($PATH)中寻找目标文件
cat 查看文件内容
head 查看文件头部内容
tail 查看文件尾部内容
more 分页显示文件内容
less 也是分页显示,比 more 好使,能灵活翻页
clear 清屏
find 寻找文件
grep 筛选出文件中匹配的行
chown 修改所属用户与组
chmod 修改用户权限

还有很多基本命令,就不一一解释了,自行使用 man 查询即可

  • 除了 man 之外,用 tldr (Too Long Didn’t Read)可能是一个方便一点的选择(也还行吧)
    • 安装: pip3 install tldr
    • 更新数据库: tldr -u
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
tac
wc
sort
uniq
diff
comm
cut
xargs
sed
awk
ln
df
free
id
uname
hostname
jobs
fg
bg
whoami
ps
top
w
du
tar
reboot
shutdown
poweroff
mount
umount
sudo
env
apt
kill
type
history
...
  • 顺带提一句,这一些命令之所以可以直接使用(例如 ls),是因为 ls 程序所在目录(/usr/bin)已经被加入了环境变量 $PATH中,执行 ls/usr/bin/ls 是一样的
    • 当然,还有一些命令是 shell 内置的,例如 cd, eval 等,更多信息可以自行搜索 Shell builtin 查看学习
  • 再提一句,执行目标程序可以使用绝对路径或相对路径,例如执行当前目录(假设在 /tmp)下的 hello.sh 脚本,可以输入 ./hello.sh/tmp/hello.sh 回车后执行

一些琐碎的知识点

  • 当前目录: .
  • 上一级目录: ..
  • 根目录: /
  • 家目录: ~
  • cd - (切换到上一次所在的目录)
  • command ; command (顺序执行命令)
  • command1 || command2 (command1 执行失败时执行 command2)
  • command1 && command2 (command1 执行成功时执行 command2)
  • command & (后台执行命令)
  • 变量
    • 定义变量: var=1
    • 使用变量: $var
      • 单引号中的变量不会被解析
      • 双引号中的变量会被解析
    • 取消变量: unset var
  • 环境变量:
    • $PATH (用于存放可执行文件的路径)
    • $HOME (家目录)
    • $USER (当前用户)
    • $PWD (当前工作目录)
    • $? (上一条命令的返回值)
    • 使用 export 命令可以将变量导出到环境变量中
  • 通配符:
    • * (匹配任意多个字符)
    • ? (匹配任意一个字符)
    • [] (匹配任意一个字符)
    • {} (匹配任意一个字符串)

一些常用的快捷键

  • Ctrl + C (中断当前程序)
  • Ctrl + Z (挂起当前程序)
  • Ctrl + A (移动光标到行首)
  • Ctrl + E (移动光标到行尾)

一些常用的软件命令

  • vim (文本编辑器)
  • git (版本控制工具)
  • wget (下载工具)
  • curl (下载工具)
  • ssh (远程登录工具)
  • tmux (终端复用工具)
  • htop (进程查看工具)
  • tree (目录树查看工具)
  • ifconfig (查看网络信息, 需安装 net-tools)

关于文件权限

关于重定向

  • 📙 Shell 输入/输出重定向
  • 管道: | (将前一个命令的输出作为后一个命令的输入)
    • 例如:ls | grep .txt (列出当前目录下所有的 txt 文件)

关于 find 命令

shell 脚本

  • hello.sh:
1
2
#!/bin/bash
echo "Hello World!"
  • 这里第一行的 #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用 /bin/bash 来执行这个脚本

    • 当脚本具有可执行权限时,可以直接执行脚本: ./hello.sh,此时会调用 /bin/bash 来执行脚本
  • 更多资料可查看 👉 📘 ShellScript Doc

学习资料

扩展练习