linux学习笔记1.0
linux学习笔记
Linux哲学思想
- 一切都是一个文件(包括硬件)
- **小型,单一用途的程序 **
- **链接程序,共同完成复杂的任务 **
- **避免令人困惑的用户界面 **
- 配置数据存储在文本中
第一周linux基础入门
ps aux
1.查看当前终端设备
- tty
[19:30:06 root@RC ~]#tty
/dev/pts/0
- who am i
[19:41:59 root@RC ~]#who am i
root pts/0 2020-07-27 18:14 (10.0.0.1)
2.查看所有终端设备
- who
[19:39:00 root@RC ~]#who
root pts/0 2020-07-27 18:14 (10.0.0.1)
rc tty2 2020-07-27 19:39 (tty2)
- w #查看所有终端设备并显示用户操作
[19:46:08 root@RC ~]#w19:48:59 up 1:35, 3 users, load average: 0.03, 0.42, 0.40
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 18:14 1.00s 0.53s 0.01s w
rc tty2 tty2 19:39 1:34m 53.10s 0.06s /usr/libexec/g
root pts/2 10.0.0.1 19:48 4.00s 0.02s 0.02s -bash
1.bash shell
GNU Bourne-Again Shell(bash)是GN90U计划中重要的工具软件之一,目前也是 Linux标准的shell,与 sh兼容
1.1显示当前使用的shell
[19:29:18 root@RC ~]#echo $SHELL
/bin/bash
[19:29:24 root@RC ~]#echo ${SHELL}
/bin/bash
1.2显示当前系统使用的所有shell
[19:48:59 root@RC ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
2.hostname设置主机名
#显示当前主机名
[20:09:09 root@RC ~]#hostname
RC
#临时修改
hostname NAME
#永久保存,因为是一个子进程,需要exit退出保存
hostnamectl set-hostname NAME
#修改文件以设置主机名
vim /ect/hostname
注意:主机名不支持使用下划线,但是支持横线。可使用字母,横线或数字组合
3.命令提示符
#为管理员
$为普通用户
提示符可以被修改,查uid。uid=0为管理员,uid>1000为普通用户
[14:09:38 root@RC profile.d]#id -u
0
[09:54:14 root@RC ~]#id root
uid=0(root) gid=0(root) groups=0(root)
[09:55:41 root@RC ~]#id rc
uid=1000(rc) gid=1000(rc) groups=1000(rc)
3.1 显示提示符格式
[09:55:48 root@RC ~]#echo $PS1
\[\e[1;31m\][\[\e[0m\]\t \[\e[1;32m\]\u\[\e[36m\]@\h\[\e[1;35m\] \W\[\e[1;31m\]]\[\e[0m\]\$
3.2 修改命令提示符
vim /etc/profile.d/env.sh #centos写入此文件可永久保存
:set paste #从Windows复制粘贴格式出错时使用
vim ~/.bashrc #ubuntu写入此文件可永久保存
3.3提示符格式说明
在linux中,PS1是一个全局变量
- \e:控制符\003
- \u:当前用户的账户名称
- \h:主机名简称
- \H: 完整的主机名称
- \d: 代表日期,格式为weekday month date,例如:“Mon Aug 1”
- \w:当前工作目录
- \t:显示时间为24小时格式,如:HH:MM:SS
- \T:显示时间为12小时格式
- \v: BASH的版本信息
- !:命令历史数
- #开机后命令历史数
- $:提示字符,如果是root用户,提示符为 # ,普通用户则为 $
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbFiMpC1-1596362953593)(C:\Users\12550\Pictures\Camera Roll\4.png)]
4.执行命令
4.1 shell可执行命令分两类:
内部命令:由shell自带,而且通过某命令形式提供
外部命令:在文件系统路径下有对用的可执行程序文件
区分内部命令还是外部命令
type COMMAND
[12:51:09 rc@rc ~]$type echo
echo is a shell builtintype -a COMMAND
[13:05:20 rc@rc ~]$type -a echo
echo is a shell builtin
echo is /bin/echo
4.2 内部命令相关
help 内部命令列表
enable 管理内部命令
- enable cmd 启用内部命令
- enable -n cmd 禁用内部命令
- enable -n 查看所有禁用的内部命令
4.3外部命令
查看外部命令路径
- which
[15:49:18 root@RC ~]#which date
/usr/bin/date
which -a date
- whereis
[15:49:27 root@RC ~]#whereis date
date: /usr/bin/date /usr/share/man/man1/date.1.gz /usr/share/man/man1p/date.1p.gz
Hash缓存表
系统初始hash表为空,但外部命令执行时, 默认会从PATH路径下寻找命令,找到后会将这条命令的路径保记录到hash表中,当再次使用该命令时shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用问速率。
常见用法
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
4.4命令的执行过程
- 1别名
- 2内部
- 3hash
- 4$PASH
- 5command not found
5.命令别名
将较长的命令定义成较短的命令,以方便执行
5.1显示当前shell进程所有可用的命名别名
alias
5.2定义别名NAME,其相当于执行命令VALUE
`alias name= ’value‘`
优先级:别名>内部命令>外部命令
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand
范例:
[10:22:00 root@RC data]#alias c='cd'
[10:22:28 root@RC data]#c ~
[10:22:36 root@RC ~]#
5.3撤销别名 unalias
unalibs #取消别名
unalias -a #取消所有别名
注意 : 在命令行中定义的别名。仅对当前shell进程有用
如果想永久有效,要定义在配置文件中
- 仅对当前用户: ~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
source /path/to/config_file . /path/to/config_file
5.4命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
选项:用于启用或关闭命令的某个或某些功能
- 短选项:UNIX 风格选项,-c 例如:-l, -h
- 长选项:GNU风格选项,–word 例如:–all, --human
- BSD风格选项: 一个字母,例如:a ;使用相对较少
注意:
- 多个选项以及多参数和命令之间使用空白字符分隔
- 取消和结束命令执行:Ctrl+c,Ctrl+d
- 多个命令可以用 “;” 符号分开
- 一个命令可以用\分成多行
6.常见命令
查看硬件信息
6.1查看cpu lscpu
- lscpu
[10:34:53 root@RC ~]#lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
- cat /proc/cpuinfo
[10:40:06 root@RC ~]#cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 78
model name : Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
stepping : 3
microcode : 0xcc
cpu MHz : 2592.003
cache size : 4096 KB
6.2查看硬盘和分区情况 lsblk / df
- lsblk
[10:35:00 root@RC ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G df 0 part /
├─sda3 8:3 0 2G 0 part [SWAP]
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 50G 0 part /data
sr0 11:0 1 1024M 0 rom
- cat /proc/partitions
[10:50:19 root@RC ~]#cat /proc/partitions
major minor #blocks name8 0 209715200 sda8 1 1048576 sda18 2 104857600 sda28 3 2097152 sda38 4 1 sda48 5 52428800 sda511 0 1048575 sr0
6.3查看内核版本 uname -r
- uname -r
[10:50:31 root@RC ~]#uname -r
4.18.0-80.el8.x86_64
6.4查看操作系统发行版本
- cat /etc /os-release
16:28:35 rc@RC data]$cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
- cat /etc/redhat-release
[10:52:17 root@RC ~]#cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
6.5时间和日期
Linux的两种时钟
- 系统时钟:由Linux内核通过CPU的工作频率进行的
- 硬件时钟:主板
相关命令
date 显示或修改时间
[10:53:09 root@RC ~]#date +%F_%T
2020-07-25_10:58:48
显示前n天的时间
[19:35:39 root@centos8 ~]#date -d '-1 day' +%F
2020-07-28
[19:36:46 root@centos8 ~]#date -d '-3 day' +%F
2020-07-26
修改系统时间
date -s '-1 day' +%F
clock,hwclock: 显示硬件时钟
- -s, --hctosys 以硬件时钟为准,校正系统时钟
- -w, --systohc 以系统 时钟为准,校正硬件时钟
timedatectl set-timezones 州/地点 #修改时区
显示日历
[11:02:04 root@RC ~]#cal -y
时区
/ect/localtime
[14:08:57 root@RC ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 15 10:53 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
6.6关机和重启
关机
- halt
- poweroff
- init 0
重启
reboot
- -f: 强制,不调用shutdown
- -p: 切断电源
关机或重启:shutdown -r now 0
- -r: reboot
- -h: halt
- -c:cancel TIME:无指定,默认相当于+1(CentOS7)
- now: 立刻,相当于+0
- +#:相对时间表示法,几分钟之后;例如 +3 hh:mm: 绝对时间表示,指明具体时间
6.7用户登录信息查看命令
- whoami 显示当前登录有效用户
- who 系统当前所有的登录会话
- w 系统当前登录的所有会话及所做的操作
6.8文本编辑
- nano 工具可以实现文本的编辑,上手容易,适合初学者
- gedit 工具是图形工具
- vi vim
6.9会话管理
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命 令。用户与计算机的这种临时的交互,称为一次"会话"(session) 会话的一个重要特点是,窗口与其 中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终 止,不管有没有运行完 一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这 时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止 了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终 止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口 终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。 (1)它允许在单个窗口中,同时访 问多个会话。这对于同时运行多个命令行程序很有用。 (2) 它可以让新窗口"接入"已经存在的会话。 (3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。 (4)它还支持窗口任意的垂直 和水平拆分。 类似的终端复用器还有Screen,Tmux
6.9.1screen
利用screen可以实现会话管理,如新建会话,共享会话等
注意 :centOS7来自于base源,centOS8来自epel源
- centOS7安装screen
[19:08:50 root@centos7 ~]#yum -y install screen
- centOS8安装screen
[11:14:32 root@RC ~]#yum -y instal screen
screen常见用法
- 创建新screen会话 screen –S [SESSION]
- 加入screen会话 screen –x [SESSION]
- 退出并关闭screen会话 exit
- 剥离当前screen会话 Ctrl+a,d
- 显示所有已经打开的screen会话 screen -ls
- 恢复某screen会话 screen -r [SESSION]
6.9.2 tmux
- 安装
[11:14:32 root@RC ~]#yum install tmux
- 启动与退出
[11:24:26 root@RC ~]#tmux
[exited]
[11:26:41 root@RC ~]#exit
logout
mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b ,即先按下 Ctrl+b ,快捷键才会生效。帮助命令的快捷键是 Ctrl+b ? 然后,按下 q 键,就可以退出帮助 新建会话 第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会 话,就是 0 号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。
- 新建一个指定名称的会话
tmux new -s <session-name>
- tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
tmux ls
tmux list-session
- 分离会话 在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离
tmux detach
- 接入会话 tmux attach 命令用于重新接入某个已存在的会话
tmux attach -t <session-name>
- 杀死会话 tmux kill-session命令用于杀死某个会话
tmux kill-session -t <session-name>
- 切换会话 tmux switch命令用于切换会话
tmux switch -t <session-name>
- 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格
tmux split-window
ctrl+b,"
- 左右分窗格
tmux split-window -h
ctrl+b,%
- 窗格快捷键
Ctrl+b %:划分左右两个窗格。Ctrl+b ":划分上下两个窗格。 Ctrl+b :光标切换到其他窗格。是指要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。 Ctrl+b ;:光标切换到上一个窗格。Ctrl+b o:光标切换到下一个窗格。Ctrl+b {:当前窗格左移。Ctrl+b }:当前窗格右移。Ctrl+b Ctrl+o:当前窗格上移。Ctrl+b Alt+o:当前窗格下移。Ctrl+b x:关闭当前窗格。 Ctrl+b !:将当前窗格拆分为一个独立窗口。 Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。Ctrl+b Ctrl+:按箭头方向调整窗格大小。 Ctrl+b q:显示窗格编号
窗口管理 除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口
- 新建窗口 tmux new-window命令用来创建新窗口
tmux new-window
- 新建一个指定名称的窗口
tmux new-window -n <window-name>
- 切换窗口 tmux select-window命令用来切换窗口
tmux select-window -t <window-number>
- 切换到指定名称的窗口
tmux select-window -t <window-name>
- 窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b :切换到指定编号的窗口,其中的是状态栏上的窗口编号
Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命
- 列出所有快捷键,及其对应的 Tmux 命令
tmux list-keys
- 列出所有 Tmux 命令及其参数
tmux list-commands
7.输出信息echo
echo 命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出
的字符串间以空白字符隔开, 并在最后加上换行号 语法:
语法:
echo [-n,e,E] [字符串]
选项:
- -E (默认)不支持\解释功能
- -n 不自动换行
- -e 启用\字符串的解释功能
显示变量
echo "SAVR_NAME " #用变量值替换,弱引用
echo ’SAVR_NAME ‘ #变量不会替换,强引用
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
8.字符集和编码
许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同层面的概念。 charset是character set的简写,即字符集。 encoding是charset encoding的简写,即字符集编码,简称编码
8.1 ASCII码
计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCII(American Standard Code for Information Interchange) 码
ASCII 码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0
8.2 Umicode
由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,即ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。 全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码为了表示世界上所有语言中的所有字符。每一个符号都给予一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定
Unicode编码方案:
- UTF-8:变长,1到4个字节
- UTF-16:变长,2或4个字节
- UTF-32:固定长度,4个字节
9.命令行扩展和被括起来的集合
9.1 命令行扩展 : $ ( )和``
把一个命令的输出打印给另一个命令的参数
$(CMD) 或 `CMD`
比较 “ ” ,‘ ’ ,``
[09:47:53 root@RC ~]#echo "echo $SHELL"
echo /bin/bash
[09:53:25 root@RC ~]#echo 'echo $SHELL'
echo $SHELL
[09:54:00 root@RC ~]#echo `echo $SHELL`
/bin/bash
双 引 号:不能识别命令,可以识别变量
单 引 号:六亲不认,变量和命令都不能识别 都当成普通字符串
反向单引号:B变量和命令都识别,并且会将反向单引号的内容当成命令执行后,在交给调用反向单引号的命令继续
9.2 括号扩展:{ }
{ } 可以实现打印重复字符串的简化形式
[09:58:22 root@RC ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[10:09:57 root@RC ~]#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
[10:11:47 root@RC ~]#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
[10:10:43 root@RC ~]#echo {1,2,3}.txt
1.txt 2.txt 3.txt
9.3 双击tap键补全
tab键可以实现命令及路径等补全,提高输入效率,避免出错
- command 2Tab 所有子命令或文件补全
- string2Tab 以string开头命令
- /2Tab 显示所有根目录下一级目录,包括隐藏目录
- ./2Tab 当前目录下子目录,包括隐藏目录
- *2Tab 当前目录下子目录,不包括隐藏目录
- ~2Tab 所有用户列表
- $2Tab 所有变量
- @2Tab /etc/hosts记录 (centos7不支持)
- =2Tab 相当于ls –A (centos7不支持)
9.4命令行历史
保存你输入的命令历史。可以用它来重复执行命令 登录shell时,会读取命令历史文件中记录下的命令 ~/.bash_history 登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历 史文件中
命令:history
- -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
调用历史命令行
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 Ctrl+p 并回车执行!:0 执行前一条命令(去参数)
!-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 开头的命令,并获取它的所有参数执行前一条命令(去除参数
9.5 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组合快捷键经常和其它软件冲突
10.获得帮助
多层次的帮助
- whatis
- command --help
- man and info
- /usr/share/doc/
- Red Hat documentation
- 其它网站和搜索
whatis command
whatis 使用数据库来显示命令的简短描述 刚安装后不可立即使用,需要制作数据库
#CentOS 7 版本以后
mandb
#CentOS 6 版本之前
makewhatis
10.1查看命令的帮助
内部命令:
- help COMMAND
[19:57:33 root@centos8 ~]#type cd
cd is a shell builtin
[19:57:43 root@centos8 ~]#help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]Change the shell working directory.Change the current directory to DIR. The default DIR is the value of theHOME shell variable.
- man bash
外部命令和软件帮助:
- COMMAND --help 或 COMMAND -h
- 使用手册(manual) man COMMAND
- 信息页 info COMMAND
- 程序自身的帮助文档 :README, INSTALL, ChangeLog
- 程序官方文档
- 相关网站,技术论坛
10.2 --help或-h选项
显示用法总结和参数列表,大多数命令使用,但并非所有的
[15:36:48 root@RC ~]#date --help
Usage: date [OPTION]... [+FORMAT]or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
[20:05:53 root@centos8 ~]#cd --help
cd: cd [-L|[-P [-e]] [-@]] [dir]Change the shell working directory.Change the current directory to DIR. The default DIR is the value of theHOME shell variable.
格式说明:
-
[ ]表示可选项
-
CAPS或 <> 表示变化的数据
-
… 表示一个列表
-
x |y| z 的意思是“ x 或 y 或 z ”
-
-abc的 意思是-a -b –c
-
{ } 表示分组
10.3 man命令
man 提供命令帮助的文件,手册页存放在/usr/share/man
几乎每个命令都有man的“页面”
中文man需安装包
- man-pages
- man-pages-zh-CN
man页面分组为不同的“章节”,统称为Linux手册,man 1 man
- 1:用户命令
- 2:系统调用
- 3:C库调用
- 4:设备文件及特殊文件
- 5:配置文件格式
- 6:游戏
- 7:杂项
- 8:管理类的命令
- 9:Linux 内核API
man命令的配置文件:
#centos6之前版man的配置文件
/etc/man.config
#centos7之后版man的配置文件
/etc/man_db.conf
#ubuntu man 的配置文件
/etc/manpath.config
查看man 手册页
man [OPTION...] [SECTION] PAGE..
man [章节] keyword
man帮助段落说明
- NAME 名称及简要说明
- SYNOPSIS 用法格式说明
- 可选内容
- <> 必选内容
- a|b 二选一
- { } 分组
- … 同一内容可出现多次
- DESCRIPTION 详细说明
- OPTIONS 选项说明
- EXAMPLES 示例
- FILES 相关文件
- AUTHOR 作者
- COPYRIGHT 版本信息
- REPORTING BUGS bug信息
- SEE ALSO 其它帮助参考
man命令的操作方法:使用less命令实现
-
space, ^v, ^f, ^F: 向文件尾翻屏
-
b, ^b: 向文件首部翻屏
-
d, ^d: 向文件尾部翻半屏
-
u, ^u: 向文件首部翻半屏
-
RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行
-
y or ^Y or ^P or k or ^K:向文件首部翻一行
-
q: 退出
-
#:跳转至第#行
-
1G: 回到文件首部
-
G:翻至文件尾部
-
/KEYWORD 以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写
n: 下一个
N:上一个
-
?KEYWORD 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
n: 跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
常用选项
- 列出所有帮助
man -a keyword
- 相当于whatis
man -f keyword
10.4系统及第三方应用官方文档
1.通过在线文档获取帮助
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
http://www.python.org
2.红帽知识库和官方在线文档
通过发行版官方的文档光盘或网站可以获得安装指南、部署指南、虚拟化指南等
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
3.红帽全球技术支持服务
rhn.redhat.com或者本地卫星服务器/代理服务器
RHN账户为及其注册和基于网络管理的RHN用户
sosreport 收集所有系统上的日志信息的工具,并自动打成压缩包,方便技术支持人员和红帽全球支持提供分析问题依据
4.网站和搜索
http://tldp.org
http://www.slideshare.net
http://www.google.com
第二周文件管理和IO重定向
1.文件系统目录结构
-
文件和目录被组织成一个单根倒置树结构
-
文件系统从根目录下开始,用“/”表示
-
根文件系统(rootfs):root filesystem
-
标准Linux文件系统(如ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
-
以.开头的文件为隐藏文件
-
路径分隔的 /
-
文件名最长255个字节
-
包括路径在内文件名称最长4095个字节
-
蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
-
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
-
每个文件都有两类相关数据:
元数据:metadata
数据:dataLinux的文件系统分层结构:FHS Filesystem Hierarchy Standard
1.2常见的文件系统目录功能
-
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
-
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
-
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
-
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
-
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
-
/etc:配置文件目录
-
/home/USERNAME:普通用户家目录
-
/root:管理员的家目录
-
/media:便携式移动设备挂载点
-
/mnt:临时文件系统挂载点
-
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
-
/opt:第三方应用程序的安装位置
-
/srv:系统上运行的服务用到的数据
-
/tmp:临时文件存储位置
-
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置 bin, sbin, lib, lib64, etc, share
-
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
-
/proc: 用于输出内核与进程信息相关的虚拟文件系统
-
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
-
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
CentOS 7 以后版本目录结构变化
-
/bin 和 /usr/bin
-
/sbin 和 /usr/sbin
-
/lib 和/usr/lib
-
/lib64 和 /usr/lib64
1.3 应用程序的组成部分
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
1.4 Linux下的文件类型(7种)
- -普通文件
- d 目录文件directory
- b 块设备black
- c 字符设备character
- l 符号链接文件link
- p 管道文件pipe
- s 套接字文件socket
2.文件操作命令
2.1显示当前工作目录
每个shell和系统进程都有一个当前的工作目录 CWD:current work directory
显示当前shell CWD的绝对路径
pwd命令: printing working directory
- -P 显示真实物理路径
- -L 显示链接路径(默认)
2.2绝对路径和相对路径
-
绝对路径
以正斜杠开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候 -
相对路径名
不以斜线开始
一般情况下,指定相对于当前工作目录或某目录的位置。特殊情况下,是相对于某目录的位置
可以作为一个简短的形式指定一个文件名基名:basename,只取文件名而不要路径
目录名:dirname,只取路径,不要文件名
2.3更改目录
命令 cd : change directory 改变目录
选项:-P 切换至物理路径,而非软链接目录
可以使用绝对或相对路径
- 切换至父目录: cd …
- 切换至当前用户主目录: cd
- 切换至以前的工作目录: cd -
相关的环境变量:
- PWD:当前目录路径
- OLDPWD:上一次目录路径
2.4列出目录内容
ls 命令可以列出当前目录的内容或指定目录
常见选项:
- -a 包含隐藏文件
- -l 显示额外的信息
- -R 目录递归
- -ld 目录和符号链接信息
- -1 文件分行显示
- -S 按从大到小排序
- -t 按mtime排序
- -u 配合-t选项,显示并按atime从新到旧排序
- -U 按目录存放顺序显示
- -X 按文件后缀排序
- -d 查看文件夹自身的属性
2.5查看文件的状态stat
文件相关信息:metadata (元数据,文件属性信息), data(数据本身)
每个文件有三个时间戳:
- access time 访问时间,atime,读取文件内容
- modify time 修改时间,mtime,改变文件内容(数据)
- change time 改变时间,ctime,元数据发生改变
[14:45:06 root@centos8 ~]#stat anaconda-ks.cfg File: anaconda-ks.cfgSize: 1535 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201720846 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-07-29 10:40:51.028884220 +0800
Modify: 2020-07-29 10:40:51.112886162 +0800
Change: 2020-07-29 10:40:51.112886162 +0800Birth: -
2.6确定文件内容
文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用
file [OPTION...] [FILE...]
常用选项:
- -b 列出文件辨识结果时,不显示文件名称
- -f filelist 列出文件filelist中文件名的文件类型
- -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
- -L 查看对应软链接对应文件的文件类型
- –help 显示命令在线帮助
2.7文件通配符模式
文件通配符可以用来匹配符合条件的多个文件,方便批理管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元字符
常见的通配符如下:
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[15:39:53 root@centos8 data]#ls f[a-c].txt
fa.txt fA.txt fb.txt fB.txt fc.txt
[15:40:53 root@centos8 data]#ls f[a-C].txt
fa.txt fA.txt fb.txt fB.txt fc.txt fC.txt
别外还有在Linux系统中预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
2.8 创建空文件和刷新时间
touch命令可以用来创建空文件或刷新文件的时间
touch [OPTION]... FILE...
选项说明:
- -a 仅改变 atime和ctime
- -m 仅改变 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
- -c 如果文件不存在,则不予创建
2.9复制文件和目录
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用选项
-
-i 覆盖前提示
-
-n不覆盖,注意两者顺序
-
-r, -R 递归复制目录及内部的所有内容
-
-a 归档,相当于-dR --preserv=all,常用于备份
-
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
-
–preserv[=ATTR_LIST]
mode: 权限 ownership: 属主属组 timestamp:links
xattr
context
all
-
-p (保留属性,权限所有者)等同–preserv=mode, ownership, timestamp
-
-v --verbose (详细过程)
-
-f --force
-
-u --update 只复制源比目标更新文件或目标不存在的文件
-
-b 目标存在,覆盖前先备份,形式为 filename~
-
–backup=numbered 目标存在,覆盖前先备份加数字后缀
2.10 移动和重命名文件
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-
-i 交互式
-
-f 强制
-
-b 目标存在,覆盖前先备份
利用rename 可以批量修改文件名
rename [options] <expression> <replacement> <file>...
#为所有的conf文件加上.bak后缀:
rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀:
rename '.bak' '' *.bak
2.11删除文件
使用rm 命令可以删除文件
rm [OPTION]... [FILE]...
常用选项:
- -i 交互式
- -f 强制删除
- -r 递归
- –no-preserve-root 删除/
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件
格式
shred [OPTION]... FILE...
常见选项:
- -z 最后一次覆盖添加0,以隐藏覆盖操作
- -v 能够显示操作进度
- -u 覆盖后截断并删除文件
- -n # 指定覆盖文件内容的次数(默认值是3次)
[20:24:49 root@centos8 data]#shred -zvun 4 df.txt
shred: df.txt: pass 1/5 (random)...
shred: df.txt: pass 2/5 (ffffff)...
shred: df.txt: pass 3/5 (000000)...
shred: df.txt: pass 4/5 (random)...
shred: df.txt: pass 5/5 (000000)...
shred: df.txt: removing
shred: df.txt: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: df.txt: removed
2.12目录操作
2.12.1 显示目录树 tree
-
常见选项:
-
-d: 只显示目录
-
-L level:指定显示的层级数目
-
-P pattern: 只显示由指定wild-card pattern匹配到的路径
2.12.2 创建目录mkdir
-
常见选项:
-
-p: 存在于不报错,且可自动创建所需的各目录
-
-v: 显示详细信息
-
-m MODE: 创建目录时直接指定权限
2.11.3 删除空目录rmdir
-
常见选项:
-
-p 递归删除父空目录
-
-v 显示详细信息
注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树
练习
(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
[20:37:12 root@centos8 data]#mkdir -p testdir/dir1/{x/{a,b},y/{a,b}}
[20:38:10 root@centos8 data]#tree testdir
testdir
└── dir1├── x│ ├── a│ └── b└── y├── a└── b
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
[20:46:32 root@centos8 data]#mkdir -p testdir/dir2/{x/{a,b},y}
[20:46:45 root@centos8 data]#tree testdir/
testdir/
├── dir1
│ ├── x
│ │ ├── a
│ │ └── b
│ └── y
│ ├── a
│ └── b
└── dir2├── x│ ├── a│ └── b└── y
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
[21:00:58 root@centos8 data]#mkdir -p testdir/dir{3,4,5/dir{6,7}}
[21:01:37 root@centos8 data]#tree testdir/
testdir/
├── dir1
│ ├── x
│ │ ├── a
│ │ └── b
│ └── y
│ ├── a
│ └── b
├── dir2
│ ├── x
│ │ ├── a
│ │ └── b
│ └── y
├── dir3
├── dir4
└── dir5├── dir6└── dir7
3.文件元数据和节点表结构
3.1 inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数据是存放在inode(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息
第一个node表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
目录
目录是个特殊文件,文件内容保存了目录中文件的列表及inode number
- 文件引用一个是 inode号
- 人是通过文件名来引用一个文件
- 一个目录是目录下的文件名和文件inode号之间的映射
cp和inode
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm和inode
rm 命令:
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
- 如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动! - 如果目标和源在一个不同的文件系统, mv相当于cp和rm
3.2 硬链接 ln
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
硬链接特性
- 创建硬链接会增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
- 不能跨越驱动器或分区
- 不支持对目录创建硬链接
格式
ln filename [linkname ]
3.3 符号(或软)链接
一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特点
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的 引用计数
- 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
格式:
ln -s filename [linkname ]
3.4硬链接和软链接区别总结
| 硬链接 | 软链接 | |
|---|---|---|
| 本质 | 本质是同一个文件 | 本质不是同一个文件 |
| 跨设备 | 不支持 | 支持 |
| inode | 相同 | 不同 |
| 链接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数会减少 | 创建或删除,链接数不会变化 |
| 文件夹 | 不支持 | 支持 |
| 相对路径 | 原始文件相对路径是相对于当前工作目录 | 原始文件相对路径是相对于链接文件的相对路径 |
| 删除文件源 | 只是链接数减一,但链接文件的访问不受影响 | 链接文件将无法访问 |
| 文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
| 文件大小 | 和源文件相同 | 源文件的路径的长度 |
案例1:提示空间满 NO space left on device ,但是df可以看到空间很多,为什么?
答:节点编号用光了
案例2:提示空间快满,使用rm删除了很大的无用文件后,df仍然看到空间不足,为什么?如何解决?
答:被删除文件被某个进程打开或使用。可以通过kill命令将进程杀掉从而释放空间
4. IO重定向和管道
4.1标准输入和输出
程序:指令加数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种 I/O 设备
- 标准输入(STDIN) -0 默认接受来自终端窗口的输入
- 标准输出(STDOUT) -1 默认输出到终端窗口
- 标准错误(STDERR) -2 默认输出到终端窗口
4.2 I/O重定向redirect
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
4.2.1标准输出和错误重新定向
STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端
- 格式:
命令 操作符号 文件名
- 支持的操作符号包括:
1> 或 > 把STDOUT重定向到文件
>| 强制覆盖
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
以上如果文件已存在,文件内容会被覆盖
以上如果文件已存在,文件内容会被覆盖
set -C 禁止将内容覆盖已有文件,但可追加
set +C 允许覆盖
- 追加
>> 可以在原有内容基础上,追加内容
把输出和错误重新定向追加到文件>> 追加标准输出重定向至文件
2>> 追加标准错误重定向至文件
- 标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
- 合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
- 合并多个程序
(CMD1,CMD2…)或者{CMD1,CMD2…} 合并多个程序的STDOUT
范例
4.3 标准输入重定向
从文件中导入STDIN,代替当前终端的输入设备,使用 < 来重定向标准输入 某些命令能够接受从文件中导入的STDIN
4.3.1 tr命令
tr转换或删除字符
tr [OPTION]... SET1 [SET2]
选项:
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字
[:alpha:]:字母
[:digit:]:数字
[:lower:]:小写字母
[:upper:]:大写字母
[:space:]:空白字符
[:print:]:可打印字符
[:punct:]:标点符号
[:graph:]:图形字符
[:cntrl:]:控制(非打印)字符
[:xdigit:]:十六进制字符
[20:50:17 root@centos8 data]#tr [a-z] [A-Z] < /etc/os-release
NAME="CENTOS LINUX"
VERSION="8 (CORE)"
ID="CENTOS"
ID_LIKE="RHEL FEDORA"
VERSION_ID="8"
PLATFORM_ID="PLATFORM:EL8"
PRETTY_NAME="CENTOS LINUX 8 (CORE)"
ANSI_COLOR="0;31"
CPE_NAME="CPE:/O:CENTOS:CENTOS:8"
HOME_URL="HTTPS://WWW.CENTOS.ORG/"
BUG_REPORT_URL="HTTPS://BUGS.CENTOS.ORG/"CENTOS_MANTISBT_PROJECT="CENTOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="CENTOS"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
4.3.2多行重定向
使用 “<<终止词” 命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本(here documents)
其中终止词可以是任何一个或多个符号,比如:!,@,$,EOF(End Of File),magedu等,其中EOF
比较常用
3.管道
3.1管道
管道(使用符号“|”表示)用来连接多个命令
格式:
命令1 | 命令2 | 命令3 | …
功能说明:
-
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
-
所有命令会在当前shell进程的子shell进程中执行
-
组合多种工具的功能
注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下
命令1 2>&1 | 命令2
命令1 |& 命令2
3.2tee命令
利用tee命令可以重定向到多个目标,经常配合管道符一起使用
格式:
命令1 | tee [-a ] 文件名 | 命令2
以上可以把命令1的STDOUT保存在文件中,做为命令2的输入
选项:
-a 追加
功能:
- 保存不同阶段的输出
- 复杂管道的故障排除
- 同时查看和记录输出
第二周 用户组合权限管理
1.linux安全模型
资源分派:
-
Authentication:认证,验证用户身份
-
Authorization:授权,不同的用户设置不同权限
-
Accouting|Audition:审计
当用户登录时,系统会自动分配令牌token,包括用户标识和组成员等信息
1.1 用户
Linux中每个用户是通过User Id (UID)来唯一标识的。
-
管理员:root, 0
-
普通用户:1-60000 自动分配
系统用户:1-499 (CentOS 6以前), 1-999 (CentOS7以后)
对守护进程获取资源进行权限分配
登录用户:500+ (CentOS6以前), 1000+(CentOS7以后)
给用户进行交互式登录使用
1.2 用户组
Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。
- 管理员组:root, 0
- 普通组:
系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分
配
普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用
1.3 用户和组的关系
- 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
- 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组
1.4安全上下文
Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份
比如:root 身份运行/bin/cat /etc/shadow和 wang的身份运行/bin/cat /etc/shadow ,得到的结果是不同的,shadow能否能被访问是由运行者的身份决定,非程序本身
2 用户和组的配置文件
2.1 用户和组的主要配置文件
- /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其相关属性
2.2 passwd文件格式
login name:登录用名(wang)
passwd:密码 (x)
UID:用户身份编号 (1000)
GID:登录默认所在组编号 (1000)
GECOS:用户全名或注释
home directory:用户主目录 (/home/wang)
shell:用户默认使用shell (/bin/bash)
2.3 shadow文件格式
登录用名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效
更改密码加密算法:
authconfig --passalgo=sha256 --update
密码的安全策略
- 足够长
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 使用随机密码
- 定期更换,不要使用最近曾经使用过的密码
2.4 group文件格式
群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
GID:就是群组的 ID
以当前组为附加组的用户列表(分隔符为逗号)
2.5 gshdow文件格式
群组名称:就是群的名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号分隔
2.6 文件操作
- vipw和vigr
- pwck和grpck
3 用户和组管理命令
用户管理命令
- useradd
- usermod
- userdel
组帐号维护命令
- groupadd
- groupmod
- groupdel
3.1 用户创建
useradd 命令可以创建新的Linux用户
格式:
useradd [options] LOGIN
常见选项:
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
新建用户的相关文件
- /etc/default/useradd
- /etc/skel/*
- /etc/login.defs
批量创建用户
newusers passwd格式文件
批量修改用户口令
echo username:passwd | chpasswd
3.2 用户属性修改
usermod 命令可以修改用户属性
格式:
usermod [OPTION] login
常见选项:
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时
使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
3.3删除用户
userdel可以删除linux用户
格式:
userdel [OPTION]... Login
常见选项
f, --force 强制
-r, --remove 删除用户家目录和邮箱
3.4查看用户相关的ID信息
id命令可以查看用户的UID,GID等相关信息
id [OPTION]... [USER]
常见选项:
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
3.5切换用户或以其它用户身份执行命令
su: 即switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:
su [options...] [-] [user [args...]]
切换用户的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName -c 'COMMAND
常见选项:
-l --login su -l UserName 相当于 su - UserName
3.6设置密码
passwd可以修改用户密码
格式:
passwd [OPTIONS] UserName
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
3.7修改用户密码策略
chage可以修改用户密码策略
格式:
chage [OPTION]... LOGIN
常见选项:
-d LAST_DAY
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE 密码过期后的宽限期
-E --expiredate EXPIRE_DATE 用户的有效期
-l 显示密码策略
3.8用户相关的其他命令
- chfn 指定个人信息
- chsh 指定shell
- finger 可看用户个人信息
3.9创建组
groupadd实现创建组
格式:
groupadd [OPTION]... group_name
常见选项:
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000
3.10修改组
组属性修改:groupmod
格式:
groupmod [OPTION]... group
常见选项:
-n group_name: 新名字
-g GID: 新的GID
3.11删除组
groupctl可以删除组
格式:
groupdel [options] GROUP
常见选项:-f, --force 强制删除,即使是用户的主组也强制删除组
3.12更改组密码
组密码:passwd
格式:
gpasswd [OPTION] GROUP
常见选项:
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
3.13临时切换主组
newgrp命令可以临时切换主组, 如果用户本不属于此组,则需要组密码
格式:
newgrp [-] [group]
如果使用 - 选项,可以初始化用户环境
3.14更改和查看组成员
groupmems可以管理组成员关系
格式:
groupmems [options] [action]
常见选项:
-g, --group groupname 更改为指定组 (只有root)
actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员-l, --list 显示组成员列表
groups 可查看用户组关系
格式
#查看用户所属组列表
groups [OPTION].[USERNAME]...
活动期限
### 3.3删除用户userdel可以删除linux用户格式:```bash
userdel [OPTION]... Login
常见选项
f, --force 强制
-r, --remove 删除用户家目录和邮箱
3.4查看用户相关的ID信息
id命令可以查看用户的UID,GID等相关信息
id [OPTION]... [USER]
常见选项:
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
3.5切换用户或以其它用户身份执行命令
su: 即switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:
su [options...] [-] [user [args...]]
切换用户的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName -c 'COMMAND
常见选项:
-l --login su -l UserName 相当于 su - UserName
3.6设置密码
passwd可以修改用户密码
格式:
passwd [OPTIONS] UserName
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
3.7修改用户密码策略
chage可以修改用户密码策略
格式:
chage [OPTION]... LOGIN
常见选项:
-d LAST_DAY
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE 密码过期后的宽限期
-E --expiredate EXPIRE_DATE 用户的有效期
-l 显示密码策略
3.8用户相关的其他命令
- chfn 指定个人信息
- chsh 指定shell
- finger 可看用户个人信息
3.9创建组
groupadd实现创建组
格式:
groupadd [OPTION]... group_name
常见选项:
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000
3.10修改组
组属性修改:groupmod
格式:
groupmod [OPTION]... group
常见选项:
-n group_name: 新名字
-g GID: 新的GID
3.11删除组
groupctl可以删除组
格式:
groupdel [options] GROUP
常见选项:-f, --force 强制删除,即使是用户的主组也强制删除组
3.12更改组密码
组密码:passwd
格式:
gpasswd [OPTION] GROUP
常见选项:
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
3.13临时切换主组
newgrp命令可以临时切换主组, 如果用户本不属于此组,则需要组密码
格式:
newgrp [-] [group]
如果使用 - 选项,可以初始化用户环境
3.14更改和查看组成员
groupmems可以管理组成员关系
格式:
groupmems [options] [action]
常见选项:
-g, --group groupname 更改为指定组 (只有root)
actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员-l, --list 显示组成员列表
groups 可查看用户组关系
格式
#查看用户所属组列表
groups [OPTION].[USERNAME]...
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
