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
  • 官方文档
  • Google

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
posted @ 2020-11-05 18:21  gody2019  阅读(210)  评论(0)    收藏  举报