成功不易,加倍努力!
二 Linux基础入门和帮助
1 Linux基础入门
1.1 基本知识
-
用户登录
——root用户
Ubuntu不能用root登录
sudu -i Ubuntu进入管理员模式
除非必要,不要登录为root
——普通用户
工作中用普通用户登录 -
设备终端:键盘,鼠标,显示器
终端类型 :
控制台终端: /dev/console
串行终端: /dev/ttyS#
虚拟终端: tty:teletypewriters, /dev/tty#,可以有数个
图形终端: startx,xwindows
伪终端:pty,/dev/pts/# 如:SSH远程连接
查看当前终端设备 tty -
交互式接口
启动终端后,在终端设备附加一个交互式应用程序 etc目录相当于注册表,可以改配置
/etc/motd 可以修改欢迎界面
/etc/issue 可以修改登陆前提示
- 交互式接口类型
GUI : Graphic User Interface 如KDE,GNOME,XFCE 生产环境中几乎不用
CLI : Command Line Interface 如shell程序 - 什么是shell
shell是Linux系统的用户界面,提供了用户和内核进行交互操作的一种接口。接收用户输入的命令并把它送入内核去执行。也称为命令解释器
-
各种shell
最常用的 bash : Bourne-Again Shell
显示当前使用的shell :
echo ${SHELL}
显示当前系统使用的所有shell : cat /etc/shells
列出系统中正在运行的所有程序 : ps aux -
执行命令
- 执行命令过程
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,由其分析后提交给内核分配资源把它运行起来 - shell中可执行的两类命令
内部命令:shell自带
外部命令:在文件系统路径下有对应的可执行程序文件
type 判断命令类别 - 执行外部命令
hash 列出外部命令执行的次数,当命令路径更改时,清除缓存即可 (hash -r 清理全部 -d 清理指定缓存)
注:初始hash表为空,当外部命令执行时,默认会从PATH中寻找,找到后会记录到hash中,再次使用时,优先查看hash,大大提高效率 - 命令格式
短选项:UNIX风格 如-a -h
长选项:GNU风格 如-word -all
BSD风格选项:(伯克利大学)一个字母 如ps a ,使用相对较少
注:
取消和结束命令 ctrl + c ,CTRL + d
多个命令可以用;符号分开
一个命令可以用\分成多行
1.2 常见命令
1,查看硬件信息
lscpu 可以查看CPU信息 cat /proc/cpuinfo 也可以看到
free 查看内存大小 cat /proc/meminfo
lsblk 查看硬盘和分区情况 cat /proc/partitions
2,查看系统版本信息
uname -r 查看内核版本
cat /etc/redhat-release 查看操作系统发行版本
红帽 :cat /etc/redhat-release 或 /etc/os-release
Ubuntu :cat /etc/os-release
3, 时间和日期
date 显示和设置系统时间(由Linux内核通过CPU的工作频率进行)
clock 显示硬件时间(主板)
clock
-s , 以硬件时间为准,校正系统时间
-w , 以系统时间为准,校正硬件时钟
date +%F 显示年月日 /etc/localtime 显示时区
cal -y 显示日历
[root@centos7-E ~]#touch `date +%F_%H-%M-%S`.log
[root@centos7-E ~]#ls
2020-03-21_09-16-25.log
[root@centos7-E ~]#date -d '-2 day'
Thu Mar 19 09:18:31 CST 2020
[root@centos7-E ~]#date -d now
Sat Mar 21 09:18:53 CST 2020
[root@centos7-E ~]#touch `date -d '-1 day' +%F`.log
4,设置主机名
hostname NAME 注意:主机名不要使用下划线
hostnamectl set-hostname name #主机名永久修改(内存和硬盘都改了,一步到位)仅支持7及以上版本
5,设置命令提示符prompt
显示提示符格式: echo $PS1
PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]"
提示符格式说明:
`
\e控制符
\033 \u当前用户
\h主机名简称
\H主机名
\w当前工作目录
\W当前工作目录基名
\t24小时时间格式
`
永久保存提示符:
echo 'PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]"' > /etc/profile.d/env.sh #env代表环境,可随意取名
6,命令别名
alias 命令别名,临时性定义,修改.bashrc可永久保存(仅对当前用户),优先级高于内部命令 所有用户有效:/etc/bashrc
范例 : echo "alias free='free -h'" >> .bashrc
编辑配置后新配置不会立即生效 source 或 .
7, 关机和重启
关机:halt和poweroff
重启:reboot 关机或重启:shutdown
-r: reboot
-h: halt
-c:cancel
8, 用户登录信息查看命令
who 查看哪些用户登陆了终端
whoami 显示当前用户身份
who am i 当前用户登陆情况
9,会话管理 screen 和 tmux
实现会话管理,如新建会话,共享会话
同步协助 后台运行
常见用法:
创建新会话 -S name
加入新会话 -x name
10, 输出信息echo
echo命令可以将后面跟的字符进行输出
echo -E (默认)不支持\解释功能
-n 不自动换行
-e 启用\字符分解释功能
显示变量:
echo "$变量" #变量会被替换,弱引用
echo '$变量' #变量不会被替换,强引用,只要在单引号里,都认为是普通符号或字符串
范例:
[09:18:04 root@centos8 data]#echo "This system's name is $(hostname)"
This system's name is centos8.magedu.org
[09:18:04 root@centos8 data]#echo "This system's name is $(hostname)"
This system's name is centos8.magedu.org
启用命令选项-e,字符串中有以下字符时特别加以处理
\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
1.3 字符集和编码
1 ASCII
美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCII码(American Standard Code for Information Interchange)
一共规定了128个字符的编码,占用了一个字节的后七位,最前面的一位统一规定为零
查看ASCII码:“dnf -y install man-pages”
man ascii
2 Unicode (万国码)
Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码
Unicode编码方案:
- UTF-8:变长,1到4个字节
- UTF-16:变长,2或4个字节
- UTF-32:固定长度,4个字节
1.4 命令行扩展和被括起来的集合
1 命令行扩展: $( ) 和 ``
把一个命令的输出打印给另一个命令的参数(用一个命令调用另一个命令的显示结果时)
$(COMMAND) 或 `CMD` 反向单引号
反向单引号里放命令可以被执行
反向单引号不能嵌套,$()可以嵌套
比较’’ , " " ,``的区别 结论:
- 单引号:六亲不认变量和命令都不识别,都当成普通的字符串
- 反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续
- 双引号:不能识别命令,可以接受变量(介于两者之间)
范例:
[root@centos7-E ~]#echo "My hostname is $HOSTNAME"
My hostname is centos7-E
[root@centos7-E ~]#echo 'My hostname is $HOSTNAME'
My hostname is $HOSTNAME
[root@centos7-E ~]#echo "My hostname is hostname"
My hostname is hostname
[root@centos7-E ~]#echo "My hostname is `hostname`"
My hostname is centos7-E
创建一个带日期的文件:
[root@centos7-E ~]#touch `date +%F`.txt
[root@centos7-E ~]#ls
2020-03-20.txt
[root@centos7-E ~]#touch `hostname`_`date +%F`.txt
[root@centos7-E ~]#ls
2020-03-20.txt centos7-E_2020-03-20.txt
2 括号扩展: { }
{}可以打印重复字符串的简化模式
范例:
[root@centos7-E ~]#echo user{1,3,5}
user1 user3 user5
[root@centos7-E ~]#echo file{1,3,5}.txt
file1.txt file3.txt file5.txt
[root@centos7-E ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos7-E ~]#echo {20..10..2}
20 18 16 14 12 10
[root@centos7-E ~]#echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@centos7-E ~]#echo {000..10..2}
000 002 004 006 008 010
[root@centos7-E ~]#echo file{1..10}.{txt,log} 笛卡尔乘积
file1.txt file1.log file2.txt file2.log file3.txt file3.log file4.txt file4.log file5.txt file5.log file6.txt file6.log file7.txt file7.log file8.txt file8.log file9.txt file9.log file10.txt file10.log
1.5 tab键补全
tab键可以实现命令及路径等补全,提高输入效率,避免出错
1 命令补全
bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表
2 路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
如果惟一:则直接补全
否则:再次Tab给出列表
3 双击tab键
command 2tab 所有子命令或文件补全
string 2tab 以string开头命令
/ 2tab 显示所有根目录下一级子目录,包括隐藏
1.6 命令行历史
当执行命令后,系统默认把执行过的命令记录在内存的缓存区中
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是.bash_history
登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
-c: 清空命令历史
-s:假冒历史
[root@centos7-E ~]#history -s rm -rf /
[root@centos7-E ~]#history
1 rm -rf /
2 history
[root@centos7-E ~]#export HISTTIMEFORMAT="%F %T `whoami` " #命令前显示年月日时分秒和用户
[root@centos7-E ~]#history
1 2020-03-20 22:13:25 root rm -rf /
2 2020-03-20 22:13:39 root history
3 2020-03-20 22:15:46 root echo $HISTFILE
4 2020-03-20 22:16:21 root echo $HISTTIMEFORMAT
5 2020-03-20 22:18:32 root export HISTTIMEFORMAT="%F %T `whoami` "
6 2020-03-20 22:18:38 root history
[root@centos7-E ~]#echo $HISTFILE
/root/.bash_history
[root@centos7-E ~]#nano .bash_profile #永久保存,把export HISTTIMEFORMAT="%F %T `whoami` " 写进文件里
[root@centos7-E ~]#. .bash_profile #立即生效
1.7 调用命令行历史
不留痕迹的清理命令历史:先删文件.bash_history,在清内存history -c
#要重新调用前一个命令中最后一个参数
!$ 表示
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 开头的命令,并获取它的所有参数
1.8 bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
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 + #提示输入指定字符后,重复显示该字符#次
注意:Alt组合快捷键经常和其它软件冲突
2 获得帮助
获取帮助的能力决定了技术的能力!多层次的帮助
whatis command --help
man and info
/usr/share/doc/
Red Hat documentation 、Ubuntu documentation
软件项目网站
其它网站
搜索
2.1 whatis
显示命令的简短描述
刚安装后不能立即使用,要制作数据库
centos7以后 mandb
centos6以前 makewhatis
范例:
[root@centos7-E ~]#whatis cal
cal (1) - display a calendar
cal (1p) - print a calendar
[root@centos7-E ~]#man -f cal
cal (1) - display a calendar
cal (1p) - print a calendar
2.2 查看命令的帮助
内部命令: help COMMAND
man bash
[root@centos7-E ~]#echo -e '\E[31mwelcome\e[0m' #字体加颜色
welcome
[root@centos7-E ~]#help echo
echo: echo [-neE] [arg ...] # arg... 代表可以加多个参数
[root@centos7-E ~]#echo i love you
i love you
2.3 --help或-h选项
外部:CMD --help | -h
2.4 man命令
man页面:运维工程师常用以下四个章节
1 用户命令
4 设备文件及特殊文件
5 配置文件格式
8 管理类的命令
不写章节号,默认显示最小章节号
whatis来查命令属于哪个章节
man -k 实现搜索