day03
①.回顾
描述GPL、BSD、APACHE三大开源协议?
自由软件,开源协定 版权描述
www.kernel.org
GNU/Linux-->发布的是源代码-->第三方软件公司重新打包发行-->目前流行的发行版-->RedHat (Fedora 个人社区版 CentOS 社区企业版)
-->SUSE (OpenSUSE)
-->Debian --> Ubuntu -->Mint
--> Gentoo
--> LFS (Linux for scratch) 手动编译整个Linux系统
注意:为了兼容之前的CPU,目前的发行版是在较老的CPU上使用通用的编译器进行编译工作,64bit操作系统是完全兼容32bit的操作系统的
例如在奔腾的CPU上编译的Linux操作系统,能跑在新一代的CPU上
优点:通用,兼容
缺点:无法发挥新硬件的新特性
所以在特定CPU平台上编译并使用才能发挥新硬件的最大效能(自定义高级技法)
②.常用命令
目录管理
ls cd pwd mkdir rmdir tree
文件管理
touch stat file rm cp mv nona
date clock hwclock cal
Linux中的配置文件都是文本文件,所以学号文本操作很重要。
文本处理
cat tac more less head tail
cat命令
连接并显示
例如 cat /etc/issue /etc/fatab
-n 显示行号
-E 显示行结束符 注:Linux的文本行结束符是 $
Windows的文本行结束符为 $回车
-A 显示所有
tac命令 与cat命令相对
逆序显示文本内容
在模拟终端中:
Shift + PgUP 向上翻屏
Shift + PgDown 向下翻屏
Ctrl + c 键:控制信号 中断 输入命令时可以直接打断
more命令 less命令
分屏显示
more /etc/rc.d/rc.sysinit
less /etc/rc.d/rc.sysinit
space键 下一页 b键 上一页
enter键 下一行 k键 上一行
q键 退出
支持查找功能 /string 向下查找
?string 向上查找
head命令 tail命令
head -n 2 /etc/inittab ==== head -2 /etc/inittab
tail -n 5 /etc/inittab ==== tail -5 /etc/inittab
默认显示文件开头head 结尾tail 的10行内容
-n 指定显示n行内容
tail -f /etc/inittab
查看inittab文件并不退出,监控该文件内容的变化---主要用于日志文件,等待显示后续追加到次文件的新内容
cut命令 join命令 sed命令 awk命令文本处理
grep sed awk 文本处理三大利器
Linux中对于用户和密码的保存使用的是database
文件性数据库文件
/etc/passwd
cut命令 仅对显示的内容进行处理,不影响原文件
例如
cut -d: -f1 /etc/passwd
-d 指定分隔符 默认是空格 这里是:
-f filed 字段 指定要显示的字段
-f1,3 选取字段1和3段
-f1-3 选取字段1到3段
sort命令
sort /etc/fstab 默认是以ASCII表中的升序排序
-n 按照数字大小排序
-r 逆序排序
-t 字段分隔符
-k 指定字段
-u 保留相同行一次(出去重复)
-f 忽略字符大小写(不区分大小写)
sort -t:-k 3 -n /etc/passwd 会显示所有行内容,但是安装第3个字段的数值形式排序
uniq命令
报告或忽略重复的行,只有相近的行相同才是重复的行
-d 只显示重复的行(1次)
-D 显示重复的行(所有)
-c 显示文件中行重复的次数
wc命令
文本统计命令
wc /etc/fstab 结果:行数 单词数 字节数 文件路径
-l 只显示行数
-w 只显示单词数
-c 或-m 只显示字符数
-L 最长一行包含的多少字符数
tr命令
字符处理命令 转换或删除字符
tr [option] ... SET1[SET2]...
tr ‘a-z’ ‘A-Z’ < /etc/passwd
tr ‘ab’ ‘AB’ < /etc/passwd
-d 删除指定字符集中出现的字符
tr -d ‘ab’ < /etc/passwd
③.Bash及其特性
shell 外壳
GUI Gnome KDE Xface
CLI sh bash csh tcsh ksh tsh zsh
logout exit 退出登录
Linux中允许同一个账号登录多次,每次登录的bash是一个进程,在每个进程来看,当前主机只存在内核和它本身。这是虚拟内存技术。
程序:硬盘上的程序代码
进程:内存中的程序副本,或说是程序的执行实例。
进程是有生命周期的,用进程号进行区分PID
用户的工作环境:不同用户的默认配置工作环境是一样的
新建用户将会按照默认配置进行新建
在bash中# 为管理员的提示符 $为普通用户的提示符
pstree命令
列出系统中的进程树
bash在Linux中有子shell和父shell的关系
exit命令 退出子shell,返回上层shell中
bash的特性
指出命令历史 上下箭头键可查找使用
支持管道和重定向
支持命令别名
命令行编辑操作
命令行展开
文件名通配
变量
编程---bash脚本 自动化运维
详解:
1.命令行编辑
光标的跳转
Ctrl + a 跳转到命令行首
Ctrl + e 跳转到命令行尾
Ctrl + u 删除光标至命令行首的字符
Ctrl + k 删除光标至命令行尾的字符
Ctrl <- 左跳转一个单词
Ctrl -> 右跳转一个单词
Ctrl + l 清屏 == clear
2.命令历史
上下箭头键 查找命令历史
history命令 列出曾经使用的命令
-c 清空命令历史记录
-d #1 #2 删除第#1到第#2间的命令记录
注:用户退出后history中的命令会追加到用户的家目录的隐藏文件 .bash_history中
-w 强制保存命令历史到历史记录文件中 ~/.bash_history中
环境变量:PATH 命令执行的搜索路径
HISTSIZE 命令历史条数的大小 默认是1000条
HISTFILESIZE .bash_history文件中的记录的条数 默认1000条
小技巧:
!$ 引用前一个命令的最后一个参数
按ESC键松开再按 . :也可在命令行中引用前一个命令的最后一个参数
!string 执行命令历史中最近一个以指定字符串开头的命令
3.万能的tab键
命令的补全功能:搜索PATH变量所指定的每个路径下的以我们给出的字符串开头的可执行文件
路径补全功能:搜索我们给出的起始路径下的每个文件名,并试图补全
4.命令别名
alias命令
alias COMMAND = ‘COMMAND [OPTION] [ARGUMENTS]’
例如:alias cls=’clear’
在shell中定义的命令别名仅对于当前的shell有效,退出即失效
alias 查看当前系统中所有定义的命令别名
unalias 命令别名 撤销指定的命令别名
\COMMAND 使用原始命令
大多数的Linux发行版中使用下面三个文件来启动个人配置信息:
~/.bash_profile
~/.bash_login
~/.profile
这样配置只对特定用户生效,也是希望的结果,但有更通用的配置文件来实现对所有用户均能实现
/etc/profile
5.命令替换
把命令中的某个子命令替换为其执行的结果 $(COMMAND)
例如:echo “The current directory is $(pwd)”
touch ./file-$(date +$F-%H-%M-%S).txt
$() 和 `` 反引号 均能实现命令替换功能
bash中支持的三种引号
`` 反引号------- 命令替换
“” 双引号----弱引用,可以实现变量替换
‘’ 单引号----强引用,不支持变量替换
6.文件名通配
globbing
* 代表任意长度的任意字符
? 代表任意单个字符
[] 指定范围内的任意单个字符 [abc] [a-z] [A-Z] [0-9]
[^ ] 指定范围外的任意单个字符
字符集合
[[:apace:]] 空白字符 [[:punct:]] 标点符号
[[:lower:]] [[:upper:]] [[:alpha:]] 大小写字母
[[:digit:]] 数字 [[:alnumber:]] 数字和大小写字母
[^[:alpha:]] 支持取反操作
#man 7 glob
whatis glob
④.Linux系统结构
程序:存放在外围存储上,如硬盘
进程:运行在内存里,是程序的实例
库:不可独立运行
程序编译时未把共享库中的代码编译进自身,只保留了一个引用,当运行时必须先把共享库装载到内存中。 共享库就是可以被多人程序使用(副本,一份拷贝)
对于计算机而言,使用的是它的计算资源,而对计算资源访问是通过用户来关联相关的访问权限和使用凭证的。用户以计算的角度看就是权限的容器,而用户组就是容器的复制,属于逻辑上的概念,可以方便的实现对计算资源的指派。
对于Linux系统,用户是通过UID来识别不同的用户的,它是获取服务(计算资源)的凭证,而进程是用户和系统交互的代理。
进程安全上下文:secure context 谁发起的进程,该进程就代理谁。它能访问的资源取决于进程的权限和姚操作的文件的权限,当一致时即拥有完全的权限,不一致时就拥有其他的权限。
⑤.权限管理
r,w,x
文件:
r 可读 可以使用类型cat等的命令进程查看其内容
w 可写 可以编辑或删除该文件
x 可执行 可以在命令行下当命令提交给内核运行
目录:
r 可以对此目录执行ls命令列出其内部的所有文件
w 可以在此目录中新建文件或目录
x 可以使用cd切换进入该目录,也可以使用ls -l 查看其内部文件的详细信息
rwx 三位一体
r-- 只读
rw- 读写
rwx 读写执行
--- 无权限
ls -l 命令
文件或目录的是按照属主、属组、其他 三组组合权限分配的
由于权限的每一位可以和1关联 因此权限可以使用例如这样的表现形式:
755 rwxr-xr-x
640 rw-r----
用户 UID
进程 PID
组 GID
解析:名称解析 计算机对于数字的处理具有先天的优势,而对于字符的处理需要第三方软件的转换,Linux中对于用户的管理使用UID、GID等进行,对于进程的管理使用PID
UID ---> /etc/passwd 用户信息库 密码 /etc/shadow 影子口令
GID --->/etc/group 组信息库 密码 /etc/gshadow
用户类型:
超级管理员 root UID=0
普通用户 UID 1---65535
系统用户 1--499 专门用于运行后台进程的用户,不需要登录系统
一般用户 500--60000 可登录系统,获取资源
组类型:
仿照用户类型进行的分组
管理员组
普通组:
系统组
一般组
但实际组类别:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个用户同名的组
基本组:用户的默认组
附加组、额外组:默认组以外的其他组
进程安全上下文:
tom用户登录系统,启动的shell 的进程的属主 属组 tom tom
用户tom要运行比如ls命令时,则需要ls文件的操作权限比对 由于ls的属主 属组 root root rwxr-xr-x tom的shell进程按照其他组的权限进行执行,ls被执行之后的ls进程的属主 属组 tom tom了。若要操作的对象文件是a.txt
rwxrw-r-- jerry tom a.txt ,①属主是否一样②进程的属主是否属于对象的属组,这样就是按照属组的权限进行访问
⑥./etc/passwd
whatis passwd 查看man手册的信息
man 5 passwd 查看passwd文件的格式信息
第一列:account 用户名
第二列:password 密码占位符 x
第三列:UID
第四列:GID
第五列:comment 注释信息
第六列:home dir 家目录
第七列:shell 默认的shell 特殊 /sbin/nologin 不可登录的shell
系统中合法的shell在/etc/shells 中
/etc/shadow
第一列:account 用户名
第二列:加密的密码 $1 md5加密 $slat 杂质 $xxx 密码 若为!!代表锁定用户
第三列:最近一次修改密码的时间
第四列:密码最短有效期限
第五列:密码最长有效期限 99999 无限期
第六列:密码过期前多少天警告用户
第七列:密码修改的宽限期
第八列:用户禁用的时间点
第九列:保留未使用
/etc/group
第一列:组名称
第二列:密码占位符 x
第三列:GID
/etc/gshadow
第一列:组名称
第二列:密码 x 或!! 无密码
第三列:保留
加密的方法:
1.对称加密:加密和解密使用同一个密码
2.非对称加密:公钥加密 每个密码都成对出现
一个为私钥 secret key 一个为公钥 public key
私钥加密公钥解密 公钥加密私钥解密
3.单向加密
散列加密:能加密不能解密,提取数据中的特征码(唯一)又叫指纹加密(非可逆),常用于数据完整性校验
特点:雪崩效应 定长输出
md5:message digest 128定长输出
SHA1 160位定长输出
Linux中可使用md5sum FILENAME来手动提取文件的特征码
⑦.用户管理相关的命令
useradd命令和adduser命令的关系
adduser就是useradd的软链接
用法:
useradd USERNAME
useradd hadoop 新建用户是被锁定的,空密码用户禁止登陆系统
tail -1 /etc/passwd
passwd hadoop 修改密码
tail -1 /etc/group
可以看到默认情况添加的用户会新建和他同名的私有组作为他的基本组
/etc/default/useradd 配置文件