基础知识 - 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