shell是系统的用户界面 ,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送 入内核去执行。实际上shell是一个命令解释器,它解释用户输入的命令并且把用户的意图传达给内核。 (可以理解为用户与内核之间的翻译官角色)
我们可以使用shell实现对Linux系统单的大部分管理,例如:文件管理、用户管理、权限管理、磁盘管理、软件管理、网络管理……
使用shell的两种方式 :
输入命令:效率低,适合少量的工作
shell script:效率高,适合完成复杂,重复性工作
bash shell提示符
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# date
2025年 08月 21日 星期三 11:34:43 CST
[root@localhost ~]# whoami
root
[root@localhost ~]# useradd aaron
[root@localhost ~]# passwd aaron
更改用户 aaron 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
shell 语法
命令 选项 参数
命令:整条shell命令的主体
选项:会影响会微调命令的行为,通常以-或者--开头
参数:命令作用的对象(长参数、短参数)
[root@localhost ~]# ls
[root@localhost ~]# ls -a
[root@localhost ~]# ls -a /home
bash基本特性
自动补全
[root@localhost ~]# yum install -y bash-completion #安装自动补全工具
[root@localhost ~]# ls /etc/sysconfig/network-scripts/
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart crond.service
[root@localhost ~]# date -s 12:30
快捷键
快捷键 | 作用 |
---|---|
^C | 终止前台运行的程序 |
^D | 退出 等价exit |
^L | 清屏 |
^A | 光标移动到命令行的最前端 |
^E | 光标移动到命令行的后端 |
^U | 删除光标前所有字符 |
^K | 删除光标后所有字符 |
^R | 搜索历史命令,利用关键词 |
Alt+. | 引用上一个命令的最后一个参数,等价于!$ |
ESC. | 引用上一个命令的最后一个参数,等价于!$ |
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat [ESC.]
历史命令
[root@localhost ~]# history
查看命令历史:history
命令历史文件:~/.bash_history
登录shell时会读取命令历史文件,并将后续操作命令添加到历史配置文件中(有时间延迟,-a立即添加)
‐ a:追加本次会话执行的命令历史列表至历史文件中
‐ d:删除历史中指定的命令
‐ c:清空历史命令
- 光标上下键 :切换上(下)一条命令
- ^R :搜索历史命令(输入一段某条命令的关键字:必须是连续的)
- !220:执行历史命令中第220条命令
- !字符串:搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser
- !$:引用上一个命令的最后一个参数 ,当上一个命令没有参数的时候,!$代表的是上一个命令本身
[root@localhost ~]# ls /root/home
[root@localhost ~]# cd !$
[root@localhost ~]# ls /root/home
ls: 无法访问/root/home: 没有那个文件或目录
[root@localhost ~]# mkdir !$
mkdir /root/home
[root@localhost ~]# touch !$/file1
touch /root/home/file1
[root@localhost ~]# systemctl restart crond
[root@localhost ~]# ls
anaconda-ks.cfg home
[root@localhost ~]# date
2019年 08月 21日 星期三 12:16:23 CST
[root@localhost ~]# !sy
systemctl restart crond
命令别名
[root@localhost ~]# alias wl=‘cat /etc/sysconfig/network-scripts/ifcfg-ens33‘
# 建立别名(临时的,仅在当前shell生效)
[root@localhost ~]# wl
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="1864a917-1e72-452d-a4c8-0c0d7e6757b0"
DEVICE="ens33"
ONBOOT="yes"
[root@xwz ~]# unalias wl
# 取消wl这个别名
[root@localhost ~]# alias # 查看系统当前的别名
alias cp=‘cp -i‘
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘
alias grep=‘grep --color=auto‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --showtilde‘
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1241 8月 22 2018 anaconda-ks.cfg
drwxr-xr-x. 2 root root 19 8月 21 12:15 home
[root@localhost ~]# type -a ls # 查看命令类型
ls 是 `ls --color=auto‘ 的别名
ls 是 /usr/bin/ls
[root@localhost ~]# /bin/ls
anaconda-ks.cfg home
[root@localhost ~]# ls # 别名优先
anaconda-ks.cfg home
[root@localhost ~]# \ls # 跳过别名
anaconda-ks.cfg home
[root@localhost ~]# cp -rf /etc /tmp # 第一次
[root@localhost ~]# cp -rf /etc /tmp # 第二次
cp:是否覆盖"/tmp/etc/fstab"?
[root@localhost ~]# \cp -rf /etc /tmp
永久别名
[root@localhost ~]# vi /etc/bashrc # 添加如下行
alias wl=‘cat /etc/sysconfig/network-scripts/ifcfg-ens33‘
Linux获得帮助
命令 --help
[root@localhost ~]# ls --help
# 用法:ls [选项] ... [文件] ...
ls常见选项
命令 | 作用 |
---|---|
-a | all,查看目录下的所有文件,包括隐藏文件 |
-l | 长列表显示 |
-h | human以人性化方式显示出来 |
-d | 只列出目录名,不列出其他内容 |
-t | 按修改时间排序 |
-S | 按文件的Size排除 |
-r | 逆序排列reverse |
-l | 显示文件的inode号(索引号) |
[root@localhost ~]# date --help
[root@localhost ~]# date
[root@localhost ~]# date +%H
[root@localhost ~]# date +%F
[root@localhost ~]# date 0214232131
[root@localhost ~]# date 0214232131.00
man手册名
(针对命令帮助,针对配置文件帮助,针对函数帮助)
中文man手册
yum -y install man-pages-zh-CN.noarch
echo "alias cman=‘man -M /usr/share/man/zh_CN‘" >> .bashrc
source .bashrc
序 号 | 英文 | 中文 |
---|---|---|
1* | Executable programs or shell commands | 可执行程序或shell命令 |
2 | System calls (functions provided by the kernel) | 系统调用 |
3 | Library calls (functions within program libraries) | 库调用 |
4 | Special files (usually found in /dev) | 特殊文件 |
5* | File formats and conventions eg /etc/passwd | 文件格式和约定 |
6 | Games | 游戏 |
7 | Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) | 杂项(包括宏和惯例) |
8* | System administration commands (usually only for root) | 系统管理命令(通常仅适用 于root用户) |
9 | Kernel routines [Non standard] | 内核例程(非标准) |
命令帮助:章节1,章节8
函数帮助:章节2,章节3
文件格式:章节5
一般情况下不需要使用章节号
[root@localhost ~]# man ls
[root@localhost ~]# man man
[root@localhost ~]# man useradd
[root@localhost ~]# man setfacl /EXAMPLES
技巧1:按章节查询
[root@localhost ~]# /usr/bin/passwd # 修改用户口令命令
[root@localhost ~]# /etc/passwd # 包含用户信息的配置文件
[root@localhost ~]# man -f passwd
sslpasswd (1ssl) - compute password hashes
passwd (1) - update user‘s authentication tokens
[root@localhost ~]# man 1 passwd
[root@localhost ~]# man 5 passwd
技巧2:在所有章节中查询
[root@localhost ~]# man -a passwd