本章概要
用户登录
终端
Shell 介绍
执行命令
简单命令
Tab 键补全
命令行历史
bash 快捷键
使用 gnome-terminal
- whatis
- command--help
- manandinfo
本地帮助文档 / usr/share/doc/
官网在线文档
其它网站和搜索
用户登录
root 用户
一个特殊的管理帐户
也被称为超级用户
root 已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要, 不要登录为 root
普通用户
权限有限
造成损害的能力比较有限
终端类型 terminal
设备终端
键盘鼠标显示器
物理终端(/dev/console )
控制台 console
虚拟终端(tty:teletypewriters,/dev/tty# #为[1-6])
tty 可有 n 个, Ctrl+Alt+F[1-6]
图形终端(/dev/tty7 )startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪个终端启动, 即位于哪个虚拟终端
串行终端(/dev/ttyS# )
ttyS
伪终端(pty:pseudo-tty,/dev/pts/# )
pty, SSH 远程连接
查看当前的终端设备命令:#tty
交互式接口
交互式接口: 启动终端后, 在终端设备附加一个交互式应用程序
- GUI:Graphic User Interface
- X protocol, Windows manager, desktop
- Desktop:
- GNOME (C, 图形库 gtk),
- KDE (C++, 图形库 qt)
- XFCE (轻量级桌面)
- CLI:Command Line Interface
shell 程序: sh(bourn 史蒂夫. 伯恩)cshtcshksh(korn)bash (bourn again shell)GPL zsh
shell
Shell 是 Linux 系统的用户界面, 提供了用户与内核进行交互操作的一种接口. 它接收用户输入的命令并把它送入内核去执行
也被称为 Linux 的命令解释器(command interpreter)
shell 是一种高级程序设计语言
bash shell
GNU Bourne-Again Shell(bash)是 GNU 计划中重要的工具软件之一, 目前也是 Linux 标准的 shell, 与 sh 兼容
CentOS 默认使用
显示当前使用的 shell
${SHELL}
显示当前系统使用的所有 shell
- cat /etc/shells
- [root@centos7 ~]#echo $SHELL
- /bin/bash
- [root@centos7 ~]#cat /etc/shells
- /bin/sh
- /bin/bash
- /sbin/nologin
- /usr/bin/sh
- /usr/bin/bash
- /usr/sbin/nologin
- /bin/tcsh
- /bin/csh
命令提示符
命令提示符: prompt
- [root@localhost~]#
- # 管理员 $ 普通用户
显示提示符格式
[root@localhost~]#echo $PS1
修改提示符格式
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
\e \033 \u 当前用户
\h 主机名简称 \H 主机名
\w 当前工作目录 \W 当前工作目录基名
\t 24 小时时间格式 \T 12 小时时间格式
\! 命令历史数 \# 开机后命令历史数
执行命令
输入命令后回车
提请 shell 程序找到键入命令所对应的可执行程序或代码, 并由其分析后提交给内核分配资源将其运行起来
在 shell 中可执行的命令有两类
内部命令: 由 shell 自带的, 而且通过某命令形式提供
help 内部命令列表
enable cmd 启用内部命令
enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令
外部命令: 在文件系统路径下有对应的可执行程序文件
查看路径: which -a |--skip-alias; whereis
区别指定的命令是内部或外部命令
type COMMAND
执行外部命令
Hash 缓存表
系统初始 hash 表为空, 当外部命令执行时, 默认会从 PATH 路径下寻找该命令, 找到后会将这条命令的路径记录到 hash 表中, 当再次使用该命令时, shell 解释器首先会查看 hash 表, 存在将执行之, 如果不存在, 将会去 PATH 路径下寻找. 利用 hash 缓存表可大大提高命令的调用速率
hash 常见用法
hash 显示 hash 缓存
hash -l 显示 hash 缓存, 可作为输入使用
hash -p path name 将命令全路径 path 起别名为 name
hash -t name 打印缓存中 name 的路径
hash -d name 清除 name 缓存
hash -r 清除缓存
注意: 如果在将外部命令执行过一次的情况下, 把该命令的路径进行更改, 那么该命令将无法执行.
原因: 因为在执行命令, shell 会首先查看 hash 缓存, 会根据缓存中的路径执行该命令, 但此时该命令的路径已经改变, 因此会发生错误.
解决方法: 清除缓存即可
命令别名
显示当前 shell 进程所有可用的命令别名
alias
定义别名 NAME, 其相当于执行命令 VALUE
alias NAME='VALUE'
在命令行中定义的别名, 仅对当前 shell 进程有效
如果想永久有效, 要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效
bash 进程重新读取配置文件
- source /path/to/config_file
- . /path/to/config_file
撤消别名: unalias
unalias[-a] name [name ...]
-a 取消所有别名
如果别名同原命令同名, 如果要执行原命令, 可使用
- \ALIASNAME
- "ALIASNAME"
- 'ALIASNAME'
- command ALIASNAME
- /path/commmand
注意: 别名, 内部命令, 外部命令优先级: 从大到小分别是别名, 内部命令, 外部命令
命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
选项: 用于启用或关闭命令的某个或某些功能
短选项:-c 例如:-l, -h
长选项:--Word 例如:--all, --human-readable
参数: 命令的作用对象, 比如文件名, 用户名等
注意:
多个选项以及多参数和命令之间使用空白字符分隔
[root@centos7 ~]#ls /etc/fstab /etc/issue
取消和结束命令执行: Ctrl+c,Ctrl+d
多个命令可以用; 符号分开
- [root@centos7 ~]#ls /etc/fstab;cat /etc/issue
- /etc/fstab
- \S
- Kernel \r on an \m
一个命令可以用 \ 分成多行
- [root@centos7 ~]#host> na> me
- centos7.localdomain
日期和时间 date
Linux 系统的两种时钟
系统时钟: 由 Linux 内核通过 CPU 的工作频率进行的
硬件时钟: 主板
相关命令:
date 显示和设置时间和日期
date -u 显示格林尼治时间
date 月日时分年秒(时间格式) 设置时间
date +%Y%m%d 或 +%F 显示年月日
date +%H%M%S 或 +%T 显示时分秒
date +"%F %T" 选项带有空格, 需用引号
date -d '-2 day' 显示前天时间
date -d '2 day' 显示后天时间
date -d '-2 day' +%F 只显示前天的年月日
date -d '-2 day' +%a(或 %u) 只显示前天是星期几
date -f 文件 批量处理文件
date -d "具体日期" +%s 将 1970 年 1 月 1 日到该具体日期的时间转换为秒 date -d @秒数 +"%F %T" 把秒数转换为时间和日期
clock,hwclock 显示硬件时间
-s 以硬件时间为准, 更改系统时间
-w 以系统时间为准, 更改硬件时间
时区:/etc/localtime
cat /etc/localtime 查看时区
设置时区:
- timedatectl set-timezones (centos7 系统)
- tzselect (centos6 系统)
cal 显示日历
-m 显示当月日历
-y 显示当年日历
知识扩展:
更改数量较多设备的时间
ntpdate 时钟服务器 ip 地址 校准服务器时间
时钟服务器需要做配置才能使用 ntpdate 命令, 在后面会提到这方面内容
Linux 趣事:
cal 09 1752 1752 年 9 月份少了 12 天
- [root@centos7 ~]#cal 09 1752
- September 1752
- Su Mo Tu We Th Fr Sa
- 1 2 14 15 16
- 17 18 19 20 21 22 23
- 24 25 26 27 28 29 30
简单命令
关机: halt,poweroff
重启: reboot
-f: 强制重启, 不调用 shutdown
-p: 切断电源
关机或重启: shutdown
用法:
shutdown [OPTIONS...] [TIME] [WALL...]
即 shutdown 选项 关机时间 关机提示
- -r:reboot
- -h:halt
-c:cancel 取消关机
TIME: 无指定, 默认相当于 + 1, 单位为分钟
now: 立刻关机, 相当于 + 0
+m: 相对时间表示法, 几分钟之后; 例如 + 3
hh:mm: 绝对时间表示, 指明具体关机时间
如: shutdown -h 18:30 "the system will be halt"
系统在 18:30 关机并发出提示 "the system will be halt"
备注: 系统提示 ("the system will be halt") 只有在关机前 15 分钟内才会出现.
用户登录信息查看命令:
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
nano 文本编辑
screen 命令:
创建新 screen 会话
screen -S [SESSION]
加入 screen 会话
screen -x [SESSION]
退出并关闭 screen 会话
exit
剥离当前 screen 会话
Ctrl+a,d
显示所有已经打开的 screen 会话
screen -ls
恢复某 screen 会话
screen -r [SESSION]
知识扩展:
使用 screen 命令解决断网中断正在操作的程序或命令问题
screen 开启会话
screen -r 恢复某会话 此命令只对单个会话有用, 即当前会话没有加入其它用户
以下命令针对两个用户连接到同一台机器上才能使用
screen -S [session](会话名) 创建新会话
[root@centos7 ~]#screen -S help
screen -ls 查看当前开启的全部会话
- [root@centos7 ~]#screen -ls
- There is a screen on:
- 3485.help (Attached)
- 1 Socket in /var/run/screen/S-root.
screen -x [session](会话名) 加入会话
当连接在同一台设备上的两个用户加入同一个会话以后, 两个终端显示画面一致.
ctrl+a,d 剥离当前会话
exit 退出并关闭 screen 会话
echo 显示字符
用法: echo [-neE][字符串]
说明: echo 会将输入的字符串送往标准输出. 输出的字符串间以空白字符隔开, 并在最后加上换行号
选项:
-E:(默认)不支持 \ 解释功能
-e: 启用 \ 字符的解释功能
-n: 不自动换行
显示变量
echo "$ 环境变量"
''(单引号) 既不识别变量, 又不识别命令 最傻" "(双引号) 只能识别变量, 不识别命令 一般
` `(反向单引号)相当于 $() 既识别变量, 又识别命令 最聪明
启用命令选项 - e, 即 echo -e , 若字符串中出现以下字符, 则特别加以处理, 而不会将它当成一般文字输出
\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\n 换行且光标移至行首
\r 回车, 即光标移至行首, 但不换行
\t 插入 tab
\\ 插入 \ 字符
\0nnn 插入 nnn(八进制)所代表的 ASCII 字符
echo -e '\033[43;31;5mmagedu\033[0m'
\xHH 插入 HH(十六进制)所代表的 ASCII 字
命令行扩展, 被括起来的集合
命令行扩展:$( ) 或
- ` <br/> 把一个命令的输出打印给另一个命令的参数 <br/> echo "This system's name is $(hostname) "<br/> This system's name is server1.example.com <br/> echo "i am \
- whoami` "
- i am root
括号扩展:{ }
打印重复字符串的简化形式
- echo file{
- 1,3,5
- }
- file1 file3 file5
- rm -f file{
- 1,3,5
- }
echo {1..10} 显示 1 到 10
echo {a..z} 显示 a 到 z
echo {000..20..2} 以三位数显示 0 到 20, 并且以 2 递增
tab 键
命令补全
内部命令:
外部命令: bash 根据 PATH 环境变量定义的路径, 自左而右在每个路径搜寻以给定命令名命名的文件, 第一次找到的命令即为要执行的命令
用户给定的字符串只有一条惟一对应的命令, 直接补全
否则, 再次 Tab 会给出列表
路径补全
把用户给出的字符串当做路径开头, 并在其指定上级目录下搜索以指定的字符串开头的文件名
如果惟一: 则直接补全
否则: 再次 Tab 给出列表
双击 tab 键
command 2Tab 所有子命令或文件补全
string2Tab 以 string 开头命令
/2Tab 显示所有根目录下一级目录, 包括隐藏目录
./2Tab 当前目录下子目录, 包括隐藏目录
*2Tab 当前目录下子目录, 不包括隐藏目录
~2Tab 所有用户列表
$2Tab 所有变量
@2Tab /etc/hosts 记录(centos7 不支持)
=2Tab 相当于 ls -A (centos7 不支持)
命令行历史
保存你输入的命令历史. 可以用它来重复执行命令
登录 shell 时, 会读取命令历史文件中记录下的命令~/.bash_history
登录进 shell 后新执行的命令只会记录在缓存中; 这些命令会用户退出时 "追加" 至命令历史文件中
重复前一个命令, 有 4 种方法
重复前一个命令使用上方向键, 并回车执行
按!! 并回车执行
输入!-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
Ctrl + n 显示当前历史中的下一条命令, 但不执行
Ctrl + j 执行当前命令
!n 执行 history 命令输出对应序号 n 的命令
!-n 执行 history 历史中倒数第 n 个命令
!string 重复前一个以 "string" 开头的命令
!?string 重复前一个包含 string 的命令
!string:p 仅打印命令历史, 而不执行
!$:p 打印输出!$ (上一条命令的最后一个参数)的内容
!*:p 打印输出!*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个 string
^string1^string2 将上一条命令中的第一个 string1 替换为 string2
!:gs/string1/string2 将上一条命令中所有的 string1 都替换为 string2
使用 up(向上)和 down(向下)键来上下浏览从前输入的命令
ctrl-r 来在命令历史中搜索命令
(reverse-i-search)`':
Ctrl+g: 从历史搜索模式退出
要重新调用前一个命令中最后一个参数
!$ 表示
- Esc, .(点击 Esc 键后松开, 然后点击. 键)
- Alt+ .(按住 Alt 键的同时点击. 键)
调用历史参数
command !^ 利用上一个命令的第一个参数做 cmd 的参数
command !$ 利用上一个命令的最后一个参数做 cmd 的参数
command !* 利用上一个命令的全部参数做 cmd 的参数
command !:n 利用上一个命令的第 n 个参数做 cmd 的参数
command !n:^ 调用第 n 条命令的第一个参数
command !n:$ 调用第 n 条命令的最后一个参数
command !n:m 调用第 n 条命令的第 m 个参数
command !n:* 调用第 n 条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令, 并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令, 并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令, 并获取它的第 n 个参数
command !string:* 从命令历史中搜索以 string 开头的命令, 并获取它的所有参数
命令 history
history 查看历史命令
用法: history [-c] [-d offset] [n]
- history -anrw [filename]
- history -ps arg [arg...]
常用选项:
-c: 清空命令历史
-d offset: 删除历史中指定的第 offset 个命令
n: 显示最近的 n 条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行, 但不存在历史列表中
-s: 展开历史参数成一行, 附加在历史列表后
命令历史相关环境变量
HISTSIZE: 命令历史记录的条数
HISTFILE: 指定历史文件, 默认为~/.bash_history
HISTFILESIZE: 命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T" 显示时间
HISTIGNORE="str1:str2*:..." 忽略 str1 命令, str2 开头的历史
控制命令历史的记录方式:
环境变量: HISTCONTROL
ignoredups 默认, 忽略重复的命令, 连续且相同为 "重复"
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于 ignoredups, ignorespace 的组合
erasedups 删除重复命令
export 变量名 ="值"
存放在 / etc/profile 或~/.bash_profile
bash 的快捷键
bash 常用快捷键
Ctrl + l 清屏, 相当于 clear 命令
Ctrl + o 执行当前命令, 并重新显示本命令
Ctrl + s 阻止屏幕输出, 锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首, 相当于 Home
Ctrl + e 光标移到命令行尾, 相当于 End
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始, 将右边一个单词更改为大写
Alt + l 从光标处开始, 将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后, 重复显示该字符 N 次
备注: 当使用 xshell 或 secureCRT 远程连接时, alt 功能键会有冲突, 需要在软件中进行设置以后才能使用 alt 快捷键功能
gnome-terminal
应用程序 ->附件 ->终端
支持多个 "标签"shell 的图形化终端模拟器
Ctrl-Shift-n 创建新窗口
Ctrl-Shift-q 关闭当前窗口
Ctrl-Shift-t 创建一个标签页
Ctrl-Shift-w 关闭一个标签页
Ctrl-PaUp/PgUn 切换到下一个 / 前一个标签页
Ctrl-Shift-c 复制选中的文本
Ctrl-Shift-v 把文本粘帖到当前光标处
获得帮助
获取帮助的能力决定了技术的能力!
通过帮助查询一个命令如何使用
步骤: 先查看是内部还是外部命令 type
如果是内部命令, 使用 help 内部命令
如果是外部命令, 使用 whatis 查看该命令在 man 帮助第几章节
然后 man 章节号 command
多层次的帮助
- whatis
- command--help
- manandinfo
- /usr/share/doc/
- Red Hat documentation
其它网站和搜索
whatis
显示命令的简短描述
使用数据库, 系统刚安装后不可立即使用
需执行以下命令 makewhatis| mandb 制作数据库
使用示例: whatis cal 或 man -f cal
命令帮助
内部命令
帮助用法:
help command
man bash 查看所有内部命令帮助, 可通过关键字查询
外部命令
帮助用法:
- (1) COMMAND --help
- COMMAND -h
(2) 使用手册(manual)
man COMMAND
(3) 信息页
info COMMAND
(4) 程序自身的帮助文档
- README
- INSTALL
- ChangeLog
(5) 程序官方文档
官方站点: Documentation
(6) 发行版的官方文档
(7) Google
--help 和 - h 选项
显示用法总结和参数列表
大多数命令都可以使用此帮助格式, 但并非所有的命令都支持
如: --help
用法:
- date[OPTION]... [+FORMAT]
- date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
符号说明:
[]表示可选项
CAPS 或 <> 表示变化的数据
... 表示一个列表
x |y| z 的意思是 "x 或 y 或 z"
-abc 的意思是 - a -b -c
{ } 表示分组
练习:
1, 显示当前时间, 格式: 2016-06-18 10:20:30
date +"%F %T" 或 date +"%Y-%m-%d %H:%M:%S"
2, 显示前天是星期几
date -d "-2 day" +%a(或 %u)
3, 设置当前日期为 2019-08-0706:05:10
date 080706052019.10
man 命令
提供命令帮助的文件
手册页存放在 / usr/share/man
几乎每个命令都有 man 的 "页面"
man 页面分组为不同的 "章节"
统称为 Linux 手册
man 命令的配置文件:/etc/man.config| man_db.conf
MANPATH /PATH/TO/SOMEWHERE: 指明 man 文件搜索位置
man -M/PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索 COMMAND 命令的手册页并显示
中文 man 需安装包 man-pages-zh-CN
man 章节
1: 用户命令
2: 系统调用
3: C 库调用
4: 设备文件及特殊文件
5: 配置文件格式
6: 游戏
7: 杂项
8: 管理类的命令
9:Linux 内核 API
备注: 作为运维工程师, 只需关注 1(用户命令),5(配置文件格式),8(管理类的命令)章节
man 帮助段落说明
NAME 名称及简要说明
SYNOPSIS 用法格式说明
[]可选内容
<> 必选内容
a|b 二选一
{ }分组
... 同一内容可出现多次
DESCRIPTION 详细说明
OPTIONS 选项说明
EXAMPLES 示例
FILES 相关文件
AUTHOR 作者
COPYRIGHT 版本信息
REPORTING BUGS bug 信息
SEE ALSO 其它帮助参考
man 帮助
查看 man 手册页
man [章节] keyword
列出所有帮助
man -a keyword
搜索 man 手册
man -kkeyword 列出所有匹配的页面
使用 whatis 数据库
相当于 whatis
man -f keyword
打印 man 帮助文件的路径
man -w [章节] keyword
man 搜索
/KEYWORD:
以 KEYWORD 指定的字符串为关键字, 从当前位置向文件尾部搜索; 不区分字符大小写;
n: 下一个
N: 上一个
?KEYWORD:
以 KEYWORD 指定的字符串为关键字, 从当前位置向文件首部搜索; 不区分字符大小写;
n: 跟搜索命令同方向, 下一个
N: 跟搜索命令反方向, 上一个
练习
1, 在本机字符终端登录时, 除显示原有信息外, 再显示当前登录终端号, 主机名和当前时间
在 / etc/issue 文件中写入以下内容
- hostname is \n
- time is \t
- tty is \l
解题思路:
(1)先查看 issue 章节号 whatis issue
- [root@centos7 ~]#whatis issue
- issue (5) - prelogin message and identification file
(2)man 5 issue 发现没有先关信息, 在查看 SEE ALSO 内容
- SEE ALSO
- motd(5), agetty(8), mingetty(8)
(3)man 8 agetty, 发现 issue 文件用法
- l Insert the name of the current tty line.
- m Insert the architecture identifier of the machine. Same as `uname -m'.
- n Insert the nodename of the machine, also known as the hostname. Same as
- `uname -n'.
- o Insert the NIS domainname of the machine. Same as `hostname -d'.
- O Insert the DNS domainname of the machine.
- r Insert the release number of the OS. Same as `uname -r'.
- t Insert the current time.
- u Insert the number of current users logged in.
- U Insert the string "1 user" or "<n> users" where <n> is the number of
- current users logged in.
2, 今天 18:30 自动关机, 并提示用户
- shutdown -h 18:30 "the system will be halt"
- info
man 常用于命令参考, GNU 工具 info 适合通用文档参考
没有参数, 列出所有的页面
info 页面的结构就像一个网站
每一页分为 "节点"
链接节点之前 *
info [命令]
导航 info 页
方向键, PgUp,PgDn 导航
Tab 键移动到下一个链接
d 显示主题目录
Home 显示主题首部
Enter 进入选定链接
n/p/u/l 进入下 / 前 / 上一层 / 最后一个链接
s 文字文本搜索
q 退出 info
通过本地文档获取帮助
- System->help(centos6)
- Applications -> documentation->help(centos7)
提供的官方使用指南和发行注记
/usr/share/doc 目录
多数安装了的软件包的子目录, 包括了这些软件的相关原理说明
常见文档: README INSTALL CHANGES
不适合其它地方的文档的位置
配置文件范例
html/PDF/PS 格式的文档
授权书详情
通过在线官方文档获取帮助
第三方应用官方文档
- http://www.nginx.org/
- http://tomcat.apache.org/
- http://httpd.apache.org/
- http://www.python.org/
通过发行版官方的文档光盘或网站可以获得
安装指南, 部署指南, 虚拟化指南等
红帽知识库和官方在线文档
- http://kbase.redhat.com/
- http://www.redhat.com/docs
- http://access.redhat.com/
搜索引擎
google 搜索引擎
搜索格式: Openstack filetype:PDF
rhcasite:RedHat.com/docs
来源: http://www.bubuko.com/infodetail-2807056.html