shell介绍
一、shell交互式环境
登录用户进入解释器bash的交互式环境,可以敲命令,交互式环境的命令式提示符如下:
[root@xxx ~]# #号代表超级管理员用户对应的命令行
[root@xxx ~]$ $号代表普通用户对应的命令行
root==>当前登录的用户
@=====>分隔符
xxx==>主机名
~====>当前所在的路径
// 创建普通系统用户
useradd jason
// 交互式设置密码
passwod jason
// 非交互式设置密码
echo "123" | passwd --stdin jason
二、shell命令语法
1、三部分组成:
- 命令:要执行的操作(必选)
- 选项:如何具体执行操作,通常以 -, --, +开头(可选)
- 参数:具体操作的对象(可选)
# ps:unix认为命令运行完毕后没有提示便是结果正确
示例1:
[root@localhost ~]# date
Fri Nov 20 19:08:00 CST 2020
[root@localhost ~]# date +%F
2020-08-12
[root@localhost ~]# date -s 16:14:00
Fri Nov 20 16:14:00 CST 2020
[root@localhost ~]# date -s "2020-11-11 11:11:11"
Fri Nov 11 11:11:11 CST 2020
示例2:
[root@localhost /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@localhost /]# uname -r
3.10.0-327.el7.x86_64
[root@localhost /]# uname -m
x86_64
[root@localhost /]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
三、bash解释器特性
1、命令和文件自动补全
注意:Tab只能补全命令和文件
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33
2、快捷键
^c 终止前台运行的程序
^d 退出 等价exit
^l 清屏
^a 光标移到命令行的最前端
^e 光标移到命令行的后端
^r 搜索历史命令,利用关键词
Alt+. 引用上一个命令的最后一个参数,等价于!$
3、历史命令
// 1、查看历史命令
[root@xxx ~]# history
// 2、清空历史命令
[root@xxx ~]# history -c
// 3、历史命令保存文件:cat ~/.bash_history
// 4、历史命令默认保存1000条,可以修改/etc/profile中的HISTSIZE=2000
// 5、查找历史命令并运行
(1)光标上下键
(2)^r //搜索历史命令(输入一段某条命令的关键字:必须是连续的)
(3)!220 //执行历史命令中第220条命令
(4)!字符串 //搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser
(5)!$ //引用上一个命令的最后一个参数
[root@xxx home]# ls /root /home
[root@xxx home]# cd !$
cd /home
[root@xxx home]# ls /root /home
[root@xxx home]# touch !$/file1
touch /home/file1
4、别名
# alias //查看系统当前的别名
ll='ls -l --color=tty'
# alias jj='ls /etc/sysconfig/network-scripts/' //建立别名
# unalias jj
[root@xxx ~]# grep root /etc/passwd // 默认有颜色
[root@xxx ~]# alias grep
alias grep='grep --color=auto'
四、命令查找优先级
bash shell查找命令顺序:
==>以路径(绝对路径,相对路径)开始命令,例如:/bin/ls 或 cd /bin; ./ls
==> alias
==> Compound Commands
==> function
==> build_in,如cd,kill,pwd、alias、echo等,可以用"type -a 命令"查看
==> hash
==> $PATH,环境变量,查看环境变量echo $PATH,例如/bin/ls
==> error: command not found
复合命令例如
for((i=0;i<=3;i++))do echo 123;done
函数例如
function f(){ echo 123; },注意{}左右两边有空格
# ps:查看命令的位置:which 命令
查看登录者的信息:who
查看文件/文件夹/命令的位置:whereis
五、查看帮助信息
1、man手册
// 1、简单使用
man 命令
// 2、详解如下
man 手册名,例如man ls
搜索:/-h n N
技巧一:按章节来查找,常用的是1(命令用法),5(文本规范),8(系统管理命令)
/usr/bin/passwd 命令,修改用户密码 man 1 passwd
/etc/passwd 保存用户信息的文件 man 5 passwd
/etc/exports man exports man 5 exports
技巧二:按关键字检索(适合记不住手册的全名时使用)
man -k "_selinux" //手册名或手册描述中包含关键字_selinux
注:从whatis数据库里找(# makewhatis)
技巧三:在所有章节中查询
# man -a passwd
# man -f passwd
2、–help、help命令
命令 --help
help 命令
// 示例
[root@xxx ~]# ls --help
用法:ls [选项]... [文件]...
ls 常见选项
-a all,查看目录下的所有文件,包括隐藏文件
-l 长列表显示
-h human 以人性化方式显示出来
-d 只列出目录名,不列出其他内容
-t 按修改时间排序
-r 逆序排列
-i 显示文件的inode号(索引号)
3、info 详细显示命令的说明信息
[root@localhost /]# info cat
4、官方手册
https://man.linuxde.net/
linux.web3.xin
5、百度、谷歌搜索
六、常用命令
- 设置主机名
[root@localhost /]# hostnamectl set-hostname handsome
// 退出重新登录就可以看到主机名已经被修改
- 设置默认启动级别
[root@handsome ~]# systemctl set-default graphical.target // 图形界面
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
[root@handsome ~]# systemctl set-default multi-user.target //字符终端
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
- 查看ip地址
ifconfig # 也可以执行ip address 或者ip addr 或者简写成ip a
ifconfig eno16777736 # 等同于ip a show eno16777736
- 设置时间
# 查看时间
[root@handsome ~]# date "+%Y-%m-%d %H:%M:%S"
2020-11-20 21:34:14
# 设置时间
[root@handsome ~]# date -s"2020-11-11 11:11:11"
或者
[root@handsome ~]# timedatectl set-time '2020-11-11 11:11:11'
# date设置的是系统时间,实际上时间分为硬件时钟与系统时钟两种
#1、硬件时钟:硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟,硬件时间存放于
CMOS中。
#2、系统时钟:系统时钟则是指kernel中的时钟,当Linux启动时
ps:硬件时间默认比系统时间慢8个小时
硬件时钟与系统时钟的关系是:
Linux操作系统将时间从CMOS中读到系统时间变量中,之后系统时钟即独立运作。所有Linux相关指令与函数
都是读取系统时钟的设定。
linux系统设置硬件时钟时,提供两种时区选择,一种为本地时区,此时硬件时间与系统时间相同;另一种为
UTC时区,此时硬件时间存的是UTC时间,系统初始化时会转换为本地时间后再设置为系统时钟的时间。
以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统
时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重
起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。
如果要确保修改生效可以执行如下命令。
#hwclock –w
这个命令强制把系统时间写入CMOS。
- hwclock命令
hwclock命令,与clock命令是同一个命令,主要用来查询和设置硬件时钟(query and set the
hardware clock (RTC))。RTC=Real Time Clock,也就是硬件时钟。在Linux中有硬件时钟与系统
时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指
kernel中
的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们之间就会
存在差异。根据不同参数设置,hwclock命令既可以将硬件时钟同步到系统时钟,也可以将系统时钟同步到硬
件时钟。
// hwclock命令的参数
-r, --show 读取并打印硬件时钟
-s, --hctosys 将硬件时钟同步到系统时钟
-w, --systohc 将系统时钟同步到硬件时钟
- 时间服务器
注意:要使系统时间准确,最好还是使用ntp方式,即将Linux系统时钟同步到远程NTP服务器,ps:
centos7用chrony替换ntp
NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于同步计算机之间的系统时钟。
timedatectl实用程序可以自动同步你的Linux系统时钟到使用NTP的远程服务器。
注意,你必须在系统上安装NTP以实现与NTP服务器的自动时间同步。
使用ntpdate命令从网络同步时间,再同步到硬件时钟
ntpdate命令是使用NTP协议来从网络同步时间的命令。NTP=Network Time Protocol 网络时间协议。
#系统中默认没有ntpdate命令,需要自行下载安装
[root@localhostt ~]# yum install ntpdate -y
# 与网络时间服务器同步时间
[root@localhost ~]# ntpdate 0.cn.pool.ntp.org
12 Aug 21:04:14 ntpdate[10099]: step time server 203.107.6.88 offset
-7826995.450514 sec
[root@localhost ~]# date
[root@localhost ~]# hwclock -w
# 注意:
1、必须有 root 权限才能在主机上运行这个命令。
2、如果NTP服务器守护程序在当前主机上运行,命令将拒绝ntpdate设置日期
3、让系统自动同步时间,只需添加一条定时任务即可,后期会介绍到
# ps: 阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
要开始自动时间同步到远程NTP服务器,在终端键入以下命令。
# timedatectl set-ntp true
要禁用NTP时间同步,在终端键入以下命令。
# timedatectl set-ntp false
- 重启时间失效
关闭默认的时间同步,然后再进行设置
# timedatectl set-ntp no
- 设置时区
# 查看
[root@handsome ~]# timedatectl status
Local time: Fri 2020-11-20 21:50:49 CST
Universal time: Fri 2020-11-20 13:50:49 UTC
RTC time: Wed 2020-11-11 03:23:10
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
# 列出可用时区
timedatectl list-timezones
# 设置上海时区
# timedatectl set-timezone "Asia/Shanghai"
# 格林尼治时间
# timedatectl set-timezone UTC
- 设置重启
shutdown -r 10 // 10分钟后重启
shutdown -r 0 // 立即重启
shutdown -r now // 立即重启
shutdown -r 11:30 // 定点重启
init 6 // 立即重启
reboot // 立即重启
- 关机命令
shutdown -h 10 // 10分钟后关机
shutdown -h 0 // 立刻关机
shutdown -h now // 立刻关机
shutdown -h 11:30 // 定点关机
halt // 立即停止系统,需要人工关闭电源
poweroff // 立即停止系统,并且关闭电源
- 取消正在进行的关机或者重启
showdown -c
- 注销登录的账号
exit
logout
Ctrl+D