一、初识shell
1.1 shell概述
-
shell是系统的用户界面 ,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行
-
实际上shell是一个命令解释器,它解释用户输入的命令并且把用户的意图传达给内核。(可以理解为用户与内核之间的翻译官角色)

-
我们可以使用shell实现对Linux系统单的大部分管理,例如:文件管理 、用户管理、权限管理、磁盘管理、软件管理、网络管理…
-
使用shell的两种方式
- 命令行一条条命令输入,效率较低
- 适合少量的工作
shell script,shell脚本,效率高- 适合完成复杂,重复性工作
- 命令行一条条命令输入,效率较低
-
查看shell解释器
[root@server1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
# 常见的shell解释器
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
1.2 shell语法
- 格式:
命令 选项 参数- 命令:整条shell命令的主体
- 选项:会影响会微调命令的行为,通常以
-或者--开头 - 参数:命令作用的对象(长参数、短参数)
- bash提示符:
[\u@\h \W]\$- bash就是shell解释器的一种
[root@server1 ~]# ls
anaconda-ks.cfg
[root@server1 ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@server1 ~]# ls -a /home
. .. zhangsan
1.3 bash基本特性
1.3.1 自动补全
[root@server1 ~]# yum install -y bash-completion
//按tab键可自动补齐
//两次tab键可显示所有可能的情况
1.3.2 快捷键

1.4 初始化配置
- 安装bash-completion
yum install -y bash-completion
- 安装vim工具
yum install -y vim
hostnamectl set-hostname server1
- 关闭防火墙开机自动启动
systemctl disable firewalld
setenforce 0
- 拍摄快照(后面每次练习崩了都可以直接恢复快照)
1.5 连接到xshell
- 查看IP地址:
ip a

- xshell连接:
ssh root@192.168.180.40
二、Linux常见指令
2.1 su切换用户
- 语法:
su - username或su username - 功能:切换用户(
-同时切换用户家目录,推荐加上) - 示例
[root@server1 ~]# su - zhangsan <--超管切换普通用户不需要密码
[zhangsan@server1 ~]$ su - root <--普通用户切换超管或其他用户需要被切换用户的密码
密码:
上一次登录:日 8月 8 15:53:32 CST 2021从 192.168.226.1pts/0 上
[root@server1 ~]#
#加横杆表示切换用户的同时,切换用户的家目录
2.2 uname获取系统相关信息
- 语法:
uname [选项] - 功能:获取系统的相关信息
- 示例
[root@server1 ~]# uname -a
Linux server1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
选项说明:
-a :all,显示所有(类型、全部主机名、内核版本、发布时间、开源计划)
2.3 ls指令( list show)
- 语法:
ls [选项] [目录或文件] - 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息
- 常见选项说明:
| 选项 | 说明 |
|---|---|
-a | 列出目录下的所有文件,包括以 . 开头的隐含文件 |
-d | 将目录象文件一样显示,而不是显示其下的文件。 |
-i | 输出文件的 i 节点的索引信息 |
-l | 列出文件的详细信息 |
-n | 用数字的 UID,GID 代替名称 |
-F | 在每个文件名后附上一个字符以说明该文件的类型, “*”表示可执行的普通文件; “/”表示目录; “@”表示符号链接; “|”表示FIFOs; “=”表示套接字(sockets)。(目录类型识别) |
-r | 对目录反向排序 |
-t | 以时间排序 |
-s | 在文件名后输出该文件的大小 |
-R | 列出所有子目录下的文件 |
-1 | 一行只输出一个文件 |
-h | human以人性化方式显示出来 |
-S | 按文件的Size排序 |
2.4 pwd指令(print working directory)
- 语法: pwd
- 功能:显示用户当前所在的目录
- 常用选项:无
[root@server1 ~]# pwd
/root
2.5 cd指令(change directory)
- Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件(下一节文件管理细讲)

- 语法:
cd 目录名 - 功能:改变工作目录,将当前工作目录改变到指定的目录下。
- 常用选项:
| 选项 | 说明 |
|---|---|
cd. . | 返回上级目录 |
cd /home/zhangsan/test1/ | 绝对路径:从根目录/下开始的路径 |
cd …/…test1 | 相对路径 :从当前位置去往目标目录的路径 |
cd ~ | 进入用户家目 |
cd - | 返回最近访问目录 |
2.6 clear清屏
- 语法:
clear - 功能:清屏,用于当前屏幕内容太多太乱
[root@server1 ~]# clear
2.7 reboot重启
- 语法:
reboot - 功能:用于重启系统
[root@server1 ~]# reboot
2.8 shutdown关机
- 语法:
shutdown [选项] - 功能:用于指定何时关机
- 常用选项:
# shutdown -h 0或now <--立即关机
# shutdown -h 10 <--代表10分钟后,自动关机
# shutdown -c <--取消关机(需要先按Ctrl + C)
选项说明:
-h :halt缩写,代表关机
- 在Linux系统中,立即关机除了使用
shutdown -h 0以外还可以使用halt -p或者poweroff命令
2.9 echo指令
- 语法:
echo [选项] 字符串 - 功能:在显示器上显示一段文字,一般起到一个提示或测试的作用。一般和重定向符号一起使用进行覆盖和追加操作
echo 字符串 >(覆盖) >>(追加) 文件 - 说明:字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
- 常用选项:
echo -n:表示输出文字后不换行echo -e:运行使用反斜杠进行转义
2.10 cp指令
- 语法:
cp [选项] 源文件或目录 目标文件或目录 - 功能:复制文件或目录
- 说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
- 常用选项:
| 参数 | 说明 |
|---|---|
-f 或 --force | 强行复制文件或目录, 不论目的文件或目录是否已经存在 |
-i 或 --interactive | 覆盖文件之前先询问用户 |
-r | 递归处理,将指定目录下的文件与子目录一并处理 若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理 |
-R 或 --recursive | 递归处理,将指定目录下的文件及子目录一并处理 |
三、hostnamectl&date
3.1 获取主机名
- CentOS6中:
hostname - CentOS7中:
hostnamectl``(hostname + control)。同时还能获取内核版本等信息 - 即目前:获取内核版本的命令
hostnamectl和uname -a两种(面试),后续还有其他方式
[root@server1 ~]# hostnamectl
Static hostname: server1
Icon name: computer-vm
Chassis: vm
Machine ID: 162a3d843449473ab4b1f92fed2c6c2d
Boot ID: 92a714529b65444bbbace8833ef1df3b
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-957.el7.x86_64
Architecture: x86-64
3.2 设置主机名
- Centos7中主机名分3类:
- 静态
static主机名:长久生效 - 瞬态
transient主机名:临时生效 - 灵活
pretty主机名:可以包含一些特殊字符
- 静态
- 更改主机名称并让其永久生效:
- 使用静态主机名
- 或更改配置文件
/etc/hostname
- 主机名称建议
- 遵循
FQDN协议(功能+公司域名) - 自己的机子无所谓
- 遵循
3.2.1 瞬态主机名称(临时设置)
# hostnamectl --transient set-hostname 主机名
# su 立即生效
3.2.2 静态主机名称(永久生效)
# hostnamectl --static set-hostname 主机名 (--static也可以省略)
[root@server1 ~]# hostnamectl set-hostname server02
[root@server1 ~]# su
[root@server02 ~]#
3.2.3 灵活主机名称(主机名称可以添加特殊字符)
# hostnamectl --pretty set-hostname 主机名(包含特殊字符)
查看灵活的主机名称
# hostnamectl --pretty
3.3 date获取系统当前时间
- 语法:
date +%时间格式 - 功能:按指定的格式输出当前时间
- 常用时间格式:(和开发那个还不一样)
| 时间格式 | 说明 |
|---|---|
%F | 年-月-日 |
%T | 小时:分钟:秒 |
%Y | Year,年 |
%m | month,月 |
%d | day,日 |
%H | Hour,小时 |
%M | Minute,分钟 |
%S | Second,秒 |
- 示例
[root@server1 ~]# date
2021年 08月 21日 星期六 14:34:21 CST
[root@server1 ~]# date +%F
2021-08-21
[root@server1 ~]# date +%Y%m%d
20210821
[root@server1 ~]# date +%T
14:38:45
# 常用备份操作
[root@server1 ~]# cp a.txt $(date +%F).txt
[root@server1 ~]# ls
2021-08-21.txt anaconda-ks.cfg a.txt dir1 dir2 video.mp4
四、history & alias & man
4.1 历史命令history
- 查看历史命令:
history - 命令历史文件:
~/.bash_history登录shell时会读取命令历史文件,并将后续操作命令添加到历史配置文件中 - 常用参数
| 参数 | 功能 |
|---|---|
-a | 追加本次会话执行的命令历史列表至历史文件中 |
-d | 删除历史中指定的命令 |
-c | 清空历史命令 |
- 历史命令的常见操作
- 光标上下键
^R:搜索历史命令(输入一段某条命令的关键字:必须是连续的)!220:执行历史命令中第220条命令!字符串:搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser!$:引用上一个命令的最后一个参数 ,当上一个命令没有参数的时候,!$代表的是上一个命令本身
- 示例
[root@server1 ~]# ls /root/home
[root@server1 ~]# cd !$
[root@server1 ~]# mkdir !$
mkdir /root/home
[root@server1 ~]# touch !$/file1
touch /root/home/file1
[root@server1 ~]# systemctl restart crond
[root@server1 ~]# ls
anaconda-ks.cfg home
[root@server1 ~]# date
2019年 08月 21日 星期三 12:16:23 CST
[root@server1 ~]# !sy
systemctl restart crond
4.2 命令别名
4.2.1 临时别名
- 语法:
- 查看系统当前的别名:
alias - 起别名:
alias 别名='完整命令' - 取消别名:
unalias 别名
- 查看系统当前的别名:
- 功能:给一些常用的命令起别名,通过别名直接使用此命令;
- 示例
[root@server1 ~]# alias wl='cat/etc/sysconfig/networkscripts/ifcfg-ens33'
# 建立别名(临时的,仅在当前shell生效)
[root@server1 ~]# wl
[root@server1 ~]# unalias wl
# 取消wl这个别名
[root@server1 ~]# 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 --show-tilde'
[root@server1 ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@server1 ~]# /bin/ls
anaconda-ks.cfg home
[root@server1 ~]# ls # 别名优先
anaconda-ks.cfg home
[root@server1 ~]# \ls # 跳过别名
anaconda-ks.cfg home
[root@server1 ~]#
[root@server1 ~]# cp -rf /etc /tmp # 第一次
[root@server1 ~]# cp -rf /etc /tmp # 第二次
cp:是否覆盖"/tmp/etc/fstab"?
[root@server1 ~]# \cp -rf /etc /tmp
4.2.2 永久别名
- 将别名写入此文件
/etc/bashrc
[root@server1 ~]# vim /etc/bashrc # 添加如下行
alias wl='cat /etc/sysconfig/network-scripts/ifcfg-ens33'
4.3 man手册
4.3.1 man手册介绍
-
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
-
语法:
man [选项] 命令 -
常用选项
-f:相当于whatis,简单来说就是查看命令的作用-k:根据关键字搜索联机帮助num:只在第num章节找,例如man 5 passwd-a:将所有章节的都显示出来,比如man printf它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
4.3.2 中文man手册
- 执行下面命令后,使用
cman查看中文man手册
yum -y install man-pages-zh-CN.noarch
echo "alias cman='man -M /usr/share/man/zh_CN'" >> .bashrc
source .bashrc
4.3.3 man的各个章节介绍

-
章节说明
- 1 是普通的命令
- 2 是系统调用,如
open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件) - 3 是库函数,如
printf,fread4是特殊文件,也就是/dev下的各种设备文件 - 4 特殊文件设备文件
- 5 是指文件的格式,比如
passwd, 就会说明这个文件中各个字段的含义 - 6 是给游戏留的,由各个游戏自己定义
- 7 是附件还有一些变量,比如向
environ这种全局变量在这里就有说明 - 8 是系统管理用的命令,这些命令只能由
root使用,如ifconfig
-
一般情况下不需要使用章节号
[root@server1 ~]# man ls
[root@server1 ~]# man man
[root@server1 ~]# man useradd
[root@server1 ~]# man setfacl
- 按章节查询
[root@server1 ~]# man -f passwd
sslpasswd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
[root@server1 ~]# man 1 passwd
[root@server1 ~]# man 5 passwd
- 在所有章节中查询
[root@server1 ~]# man -a passwd
本文详细介绍了Linux的shell概念及bash的基本特性,包括自动补全和快捷键。讲解了常见命令如su、uname、ls、pwd、cd、clear、reboot、shutdown、echo和cp的用法。此外,还探讨了hostnamectl和date命令来管理和查看主机名及时间。最后,学习了history、alias和man命令,用于查看命令历史、创建命令别名和查阅命令手册。
968

被折叠的 条评论
为什么被折叠?



