基础知识 - 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 | tac |
- 顺带提一句,这一些命令之所以可以直接使用(例如
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)- …
关于文件权限
- 📙 Linux 文件基本属性
r(读权限, 4)w(写权限, 2)x(执行权限, 1)
关于重定向
- 📙 Shell 输入/输出重定向
- 管道:
|(将前一个命令的输出作为后一个命令的输入)- 例如:
ls | grep .txt(列出当前目录下所有的 txt 文件)
- 例如:
关于 find 命令
shell 脚本
hello.sh:
1 | !/bin/bash |
这里第一行的
#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用/bin/bash来执行这个脚本- 当脚本具有可执行权限时,可以直接执行脚本:
./hello.sh,此时会调用/bin/bash来执行脚本
- 当脚本具有可执行权限时,可以直接执行脚本:
更多资料可查看 👉 📘 ShellScript Doc