Linux学习笔记-Linux基础
1 Linux基础
1.1 用户类型
-
root用户
特殊用户、超级用户、几乎完整的系统控制,生产环境非必要不要使用root用户登陆
-
普通用户
权限有限、造成损害能力有限
1.2 终端 terminal
设备终端:显示器、鼠标、键盘
1.2.1终端类型
控制台终端、串行终端、虚拟终端(tty)、图形终端(startx)、伪终端(pty:/dev/pts)
1.2.2 查看当前终端
tty命令查看当前所在的终端
[root@centos8-01 ~]# tty
/dev/pts/0
1.3 交互式 接口
终端启动后,终端设备上附加一个交互式程序。
1.3.1 交互式接口类型
GUI:Graphic User Inerface 图形界面用户接口 ====> GNOME\KDE\XFCE
CLI:Command Line Interface 命令行接口 ====> SHELL程序
1.3.2 shell

shell是linux系统的用户界面,提供用户与内核交互操作的接口,接收用户输入的命令并将它送入内核去执行
shell也是Linux的命令解释器,是一种高级程序设计语言。
1.3.3 bash shell
GNU Bourne-Again shell(bash)是GNU的工具软件,是目前Linux标准的shell,与sh兼容。sh和bash都是由Steve Bourne编写的。
显示当前使用的shell和系统所有的shell
[root@centos8-01 ~]# echo $SHELL
/bin/bash
[root@centos8-01 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
1.4 设置主机名
hostname NAME
范例
[root@centos8-01 ~]# hostname centos8-01.test.com
注意:主机名不要使用下划线
1.5 命令提示符
prompt
[root@centos8-01 ~]#
管理员:#
普通用户:$
显示提示符格式:
[root@centos8-01 ~]# echo $PS1
[\u@\h \W]\$
提示符变量设置:
PS1="\[e[1;5;41;33m\][\u@\h \W]\\$\[\e[\0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
-
提示符格式说明:
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数开机后命令历史数
[root@centos8-01 ~]# echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
[root@centos8-01 ~]#
[root@centos8-01 ~]# exit
[09:33:00 root@centos8-01 ~]#
1.5 执行命令
1.5.1 命令执行过程
输入命令后回车,shell城西找到键入命令所对应的可执行程序或者代码,分析后提交给内核分配资源将其运行起来。
1.5.2 shell可执行命令分类
外部命令:文件系统路径下有对应的执行程序文件
内部命令:由shell自带的,通过命令形式提供
通过type命令查看是外部命令和内部命令
[09:36:25 root@centos8-01 ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
[09:37:28 root@centos8-01 ~]#type ps
ps is /usr/bin/ps
1.5.2.1 内部命令相关
help 内部命令:查看内部命令帮助
enable 管理内部命令
1.5.2.2 执行外部命令
路径:
[09:45:29 root@centos8-01 ~]#which -a --skip-alia ls
/usr/bin/ls
HASH缓存表
存放执行过的外部命令路径,提高命令调用速率
hash命令用法:
- hash 显示缓存
- hash -l 显示缓存并可作为输入使用
- hash -r 清楚缓存
1.5.3 命令别名
经常使用的较长命令,可将其定义为较短的别名,方便执行。
alias
范例
alias cdnet='cd /etc/sysconfig/network-scripts/' >> ~/.bashrc
撤销别名:unalias
unalias [-a] name [name ...]
通过将配置写入配置文件是别名定义永久生效
- 仅当前用户有效:~/.bashrc
- 对所有用户有效:/etc/bashrc
通过.和source命令重新读取配置文件,使其生效
通过\、""、''、直接运行命令路径的方式可以执行原命令
1.5.4 命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
-
短选项:Unix风格选项,-word :-a,-r
-
长选项:GNU风格选项, --word:--all,--human
-
BSD风格:
-
不同命名之间使用“;”隔开
-
多选项和多参数之间使用空格隔开
-
一个命令可以使用\分成多行
-
取消和结束命令执行:Ctrl+c,Ctrl+d
1.6 常用命令
1.6.1 查看硬件信息
查看CPU信息
lscpu
cat /proc/cpuinfo
查看内存大小
free
cat /proc/meminfo
查看硬盘和分区情况
lsblk
cat /proc/partitions
查看内核信息
uname -r
查看操作系统发行版本
cat /etc/redhat-release
cat /etc/os-release
1.6.2 日期和时间
Linux有两种时钟:
系统时钟:内核时间
硬件时钟:主板上的时间
命令:date 显示系统时间
范例
[10:39:39 root@centos8-01 ~]#date +%s
1604543985
[10:39:45 root@centos8-01 ~]#date -d @`date +%s`
Thu Nov 5 10:40:03 CST 2020
[10:39:58 root@centos8-01 ~]#date -d @1604543985
Thu Nov 5 10:39:45 CST 2020
[10:40:03 root@centos8-01 ~]#date -d @`date +%s` +%F_%T
2020-11-05_10:40:38
命令:clock,hwclock:显示硬件时钟
-s ,-hctosys 以硬件时钟为准,校正系统时钟
-w,-systohc 以系统时钟为准,校正硬件时钟
时区:
[10:44:38 root@centos8-01 ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Oct 30 11:01 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
范例
[10:50:29 root@centos8-01 ~]#timedatectl set-timezone Asia/Shanghai
显示日历
cal -y
[10:52:45 root@centos8-01 ~]#cal 10 2020
October 2020
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1.6.3 关机和重启
关机:
- poweroff
- halt
重启:
- reboot
- -f 强制重启
- -p 切断电源
关机或重启:shutdown
-r:reboot
-h :halt
-c:cache
TIME: 无指定,默认一分钟以后重启
now:立刻
+#:相对时间表示,如+3 3分钟以后
hh:mm:绝对时间,指明具体时间
1.6.4 用户登陆信息查看
- whoami:显示当前登录有效用户
- who:显示当前素有登录会话
- w:显示当前所有登录会话及所有操作
1.6.5 会话管理
screen:新建会话,共享会话等
范例:安装screen
[root@centos7 ~]#yum -y install screen
-
创建新screen会话
screen –S [SESSION]
-
加入screen会话
screen –x [SESSION]
-
退出并关闭screen会话
exit
-
剥离当前screen会话
Ctrl+a,d
-
显示所有已经打开的screen会话
screen -ls
-
恢复某screen会话
screen -r [SESSION]
tmux是会话与窗口的"解绑"工具,将它们彻底分离,功能如下:
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分
1.7.6 信息输出echo
echo可以将后面跟的字符进行输出
功能:显示字符,标准输出,最后加换行符
echo [-neE] [String]
-n 不自动换行
-e 启动\字符的解释功能
-E (默认)不支持\的解释功能
显示变量
echo "$VAR_NAME" #弱引用,用变量值替换
echo '$VAR_NAME' #强引用,变量值不替换
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
1.7 字符集和编码
charset是character set 的简写,即字符集,是二进制和字符的对应关系,不关注最终的存储形式
encoding是character encoding的简写,即字符编码,实现如何将字符转化为实际的二进制进行存储,编码决定了空间使用的大小
字符集包括:Unicode字符集,ASCII,GBK等
1.7.1 ASCII码
ASCII(American Standard Code for Information Interchange) 码,美国信息交换标准代码
查看ASCII码
man ascii
1.7.2 Unicode
为了表示世界上所有语言中的所有字符。每一个符号都给予一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定.
Unicode编码方案
- UFT-8:变长,1-4字节
- UTF-16:变长,2或4字节
- UTF-32:固定长度,4字节
UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,可变长存储。
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。
编码转换和查询:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode
范例:修改LANG变量实现中文语言提示
[11:41:35 root@centos7 ~$echo $LANG
en_US.UTF-8
[13:54:59 root@centos7 ~$LANG=zh_CN.UTF-8
[13:55:42 root@centos7 ~$xxx
-bash: xxx: 未找到命令
[13:55:58 root@centos7 ~$echo $LANG
zh_CN.UTF-8
1.8 命令行扩展和括号组合
1.8.1 命令行扩展:``和$()
把一个命令的输出打印给另一个命令的参数
`COMMAMD` 或者 $(COMMAND)
比较``,' ',""的区别
[13:56:23 root@centos7 ~$echo "echo $HOSTNAME"
echo centos7
[14:01:03 root@centos7 ~$echo 'echo $HOSTNAME'
echo $HOSTNAME
[14:01:14 root@centos7 ~$echo `echo $HOSTNAME`
centos7
结论:
双引号:不能识别命令,可以识别变量 (弱引用)
单引号:变量和命令都不识别,都当成普通字符串(强引用)
反向单引号:变量和命令都识别,并且会会将反向单引号的内容单程命令进行执行后 再交个调用命令
范例:
[14:01:23 root@centos7 ~$echo "This system's name is $(hostname)"
This system's name is centos7
[14:06:50 root@centos7 ~$echo "I am `whoami`"
I am root
[14:06:58 root@centos7 ~$touch /data/$(date +%F).log
[14:07:28 root@centos7 ~$ls /data/
2020-11-05.log
[14:07:35 root@centos7 ~$cd /data
[14:08:53 root@centos7 data$touch `hostname`-`date +%F`.log
[14:08:58 root@centos7 data$ll
总用量 12
-rw-r--r--. 1 root root 0 11月 5 14:07 2020-11-05.log
-rw-r--r--. 1 root root 0 11月 5 14:08 centos7-2020-11-05.log
-rw-r--r--. 1 root root 0 11月 5 14:08 centos7-.log
[14:09:20 root@centos7 data$touch `date +%F_%H-%M-%S`.log
[14:09:56 root@centos7 data$touch `date -d '-1 day' +%F`.log
[14:10:32 root@centos7 data$ll
-rw-r--r--. 1 root root 0 11月 5 14:10 2020-11-04.log
-rw-r--r--. 1 root root 0 11月 5 14:09 2020-11-05_14-09-56.log
-rw-r--r--. 1 root root 0 11月 5 14:07 2020-11-05.log
-rw-r--r--. 1 root root 0 11月 5 14:08 centos7-2020-11-05.log
-rw-r--r--. 1 root root 0 11月 5 14:08 centos7-.log
范例:$()和``
[14:14:25 root@centos7 ~$ll /data/$(echo $(date +%F).log)
-rw-r--r--. 1 root root 0 11月 5 14:07 /data/2020-11-05.log
[14:14:34 root@centos7 ~$ll /data/`echo $(date +%F).log`
-rw-r--r--. 1 root root 0 11月 5 14:07 /data/2020-11-05.log
[14:14:46 root@centos7 ~$ll /data/`echo `date +%F`.log`
-bash: .log: 未找到命令
ls: 无法访问/data/date: 没有那个文件或目录
ls: 无法访问+%F: 没有那个文件或目录
[14:15:00 root@centos7 ~$ll /data/$(echo `date +%F`.log)
-rw-r--r--. 1 root root 0 11月 5 14:07 /data/2020-11-05.log
1.8.2 括号扩展:{}
实现打印重复字符串的简化形式
范例
[14:17:02 root@centos7 data$echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
[14:18:12 root@centos7 data$touch file{1,3,5}
[14:19:37 root@centos7 data$ll
总用量 0
-rw-r--r--. 1 root root 0 11月 5 14:19 file1
-rw-r--r--. 1 root root 0 11月 5 14:19 file3
-rw-r--r--. 1 root root 0 11月 5 14:19 file5
[14:18:40 root@centos7 data$rm -rf file{1,3,5}
[14:20:01 root@centos7 data$ll
总用量 0
[14:18:40 root@centos7 data$echo {1..100}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[14:18:46 root@centos7 data$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
[14:18:54 root@centos7 data$
[14:17:02 root@centos7 data$echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
[14:20:02 root@centos7 data$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 [ ] ^ _ ` 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
[14:20:46 root@centos7 data$echo {a..z..2}
a c e g i k m o q s u w y
1.9 Tab补全
tab键可以实现命令及路径的补全,提高输入效率,避免出错
- 内部命令:支持补全
- 外部命令:根据PATH环境变量定义的路径,自左向右搜寻文件,第一次找到的即为要执行的命令
- 命令补全需要安装bash-completion
双击tab可以获取命令、路径、文件提示
1.10 命令行历史
执行过的命令默认存放在~/.bashrc_history中,登陆shell时会加载到内存中,退出时会追加至命令历史文件中。
命令:history
history [-c] [-d offset] [-n]
history -anrw [filename]
history -ps arg [arg...]
- -c 清空命令历史
- -d offset:删除指定的第offset个命令
- n:显示最近的第那条历史
相关环境变量
-
HISTSIZE:记录条数
-
HISTFILE:历史文件名
-
HISTFILESIZE:历史文件记录的条数
-
HISTTIMFORMAT:显示时间和用户="%F %T $(whoami)"
-
HISTIGNORE:忽略命令
-
HISTCONTROL:控制命令历史的记录方式
ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
持久化变量
[15:14:43 root@centos8-01 ~]#cat /etc/profile
#添加至文件末尾
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=ignoreboth
[15:16:25 root@centos8-01 ~]#source ~/.bash_profile
[15:16:31 root@centos8-01 ~]#history
1 2020-11-05 10:38:21 exit
2 2020-11-05 10:38:21 ll /dev/
3 2020-11-05 10:38:21 echo $SHELL
4 2020-11-05 10:38:21 cat /etc/shells
5 2020-11-05 10:38:21 tty
6 2020-11-05 10:38:21 ll /dev/tty
7 2020-11-05 10:38:21 echo ps1
8 2020-11-05 10:38:21 echo $ps1
1.11 调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
!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 !^ 利用上一个命令的第一个参数做command的参数
command !$ 利用上一个命令的最后一个参数做command的参数
command !* 利用上一个命令的全部参数做command的参数
command !:n 利用上一个命令的第n个参数做command的参数
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.12 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 + # 提示输入指定字符后,重复显示该字符#次
2 获取帮助
多层次的帮助
- whatis
- command --help
- man and info
- /usr/share/doc/
- Red Hat documentation 、Ubuntu documentation
- 软件项目网站
- 其它网站
- 搜索
2.1 whatis
使用数据库来显示命令的简短描述
[root@centos7 ~]# whatis cal
cal (1) - display a calendar
cal (1p) - print a calendar
[root@centos7 ~]# man -f cal
cal (1) - display a calendar
cal (1p) - print a calendar
范例
[root@centos8 ~]#whatis ls
ls: nothing appropriate.
#生成man相关数据库
[root@centos8 ~]#mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/mann'. Wait...done.
Checking for stray cats under /usr/share/man...
...省略...
0 old database entries were purged.
[root@centos8 ~]#whatis ls
ls (1) - list directory contents
2.2 查看命令的帮助
内部命令:
- help COMMAND
- man bash
外部命令和软件
- COMMAND --help 或者COMMAND -h
- man COMMAND
- info COMMAND
- README
- Documentation
- 官方文档
2.3 help和-h选项
格式说明:
- [] 表示可选项
- CAPS或 <> 表示变化的数据
- ... 表示一个列表
- x |y| z 的意思是“ x 或 y 或 z ”
- -abc的 意思是 -a -b –c
- { } 表示分组
练习:
1、显示当前时间,格式:2016-06-18 10:20:30
[16:05:41 root@centos7 ~]#date "+%F %T"
2020-11-05 16:05:42
2、显示前天是星期几
[16:05:42 root@centos7 ~]#date -d '-2 day' +%A
Tuesday
[16:05:57 root@centos7 ~]#date -d '-2 day' +%w
2
[16:06:02 root@centos7 ~]#date -d '-2 day' +%a
Tue
3、设置当前日期为2019-08-07 06:05:10
[16:06:30 root@centos7 ~]#date 080706052019.10
Wed Aug 7 06:05:10 CST 2019
[06:05:14 root@centos7 ~]#date "+%F %T"
2019-08-07 06:05:31

浙公网安备 33010602011771号