Linux内核学习笔记
- Linux内核目录结构
- Vim快捷键
- 常用命令
- 关机
- 用户及组管理
- 指定运行级别
- 提示命令选项
- 文件目录类
- 目录查询
- 文件查找及内容查找
- 时间日期类
- 压缩及解压缩
- 文件组管理及权限管理
- 任务调度
- 历史命令查询
- 上传文件
- 进程管理
- 进程查询
- 强制关闭
- 服务(进程)/(守护进程)管理
- 实时更新的动态进程监控
- 网络监控
- 包管理
- RPM(Red Hat Package Manager)离线安装
- YUM(Yellow dog Updater, Modified)在线安装
- 磁盘分区及挂载
- 基础常识
- 磁盘分区
- 磁盘挂载步骤
- 磁盘情况查询
- 实时监控IO
- 主机名配置
- 意义
- 相关文件路径
- $:shell命令
- 相关软件及配置
- 远程访问
- 虚拟机
写在前面的话:
Linux从定义上来说是一个包裹计算机硬件机器指令集的高级语言命令集,简单的来说约等于将机器指令包装称人类可识别的高级语言,也就是封装。
与Windows不同的在于Linux内核命令离计算机硬件更近,Windows出众的是图形界面,给予人类无与伦比的感官色彩与易用的用户体验。但这也就意味着会过度封装很多你其实用不到的东西。
也就是——运行效率。Linux内核封装的机器指令很少,占用的系统资源很低,作为计算机的拥有者可以做到更多的事情,而windows会封锁你的权限。如果你想追求效率,那么这也意味着你要对计算机有足够的了解,否则你就不能驾驭这个人类智慧的结晶。
Linux内核目录结构
Linux系统学习常识,必备,必背,背
详情参看文章:CentOS 7 根目录结构
Vim快捷键
Vim可以说是Linux程序猿鄙视其他编辑器程序猿的灵魂所在
vi/vim 完全版按键说明 除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。
常用命令
关机
sync
将内存中的数据同步到磁盘 关机前必做
shutdown [选项] [时间] [消息]-h
关机并彻底断电-k
不执行任何关机操作,只发出警告信息给所有用户now
立刻
单独的数字+5
是分钟,20:30
是定点关机
halt
停止系统,但主板不断电
poweroff
等于shutdown -h now
reboot
重启系统【以上命令均需要root权限,否则无法找到并调用Command not found】
用户及组管理
用户
logout
登出/注销/关闭当前用户连接(远程登录窗口),图形系统下终端执行无效
useradd [选项] [用户名]
新建用户,修改的文件为/home/用户名目录
- -d<登入目录路径> 指定用户登入时的启始目录【不能设置为为已存在的登入目录】
- -g<群组> 指定用户所属的群组
passwd [用户名]
root用户在新建用户后,通过passwd命令进行密码设置【可设为简单密码】
userdel [选项] [用户名]
无选项直接删除用户,但保留用户组/home下的主目录
- -r 删除用户及其所主目录,但通常情况下,在用户的登入目录内含有其他文件,不建议在毫无准备的情况下使用 -r 选项。
usermod [-d] 更改后登录目录名 用户名
修改用户登陆目录/主目录
id [用户名]|whoami
查询用户|查询当前用户
su – [用户名]
切换用户,高权限用户切换至低权限用户不需要输入密码反之则需要
exit
回撤到原先用户
组
groupadd [组名]
增加用户组
groupdel [组名]
删除组
usermod [-g] [组名] [用户名]
修改用户所属组
用户与组对应的文件/etc/passwd
用户配置信息/etc/group
组配置信息/etc/shadow
加密过的登录口令信息
指定运行级别
运行级别一共有7个
0:关机,1:单用户(用于找回root权限),2:多用户但无网络,3:多用户有网络
4:系统未使用保留给用户,5:图形界面,6:系统重启
文件路径\etc\inittab
在CentOS 7后已被废弃
systemctl get-default
获取当前运行级别
systemctl set-default TARGET.target
设定默认运行级别为TARGET
注:常用TARGET
multi-user.target:类似于运行级别3
graphical.target:类似于运行级别5
注:关于运行级别1的作用,单用户,可用于找回root用户密码
进入rescue救援系统,行尾添加 init=/bin/sh进入单用户系统
单用户模式找回root密码具体请参考CentOS 7版本后的教程
提示命令选项
[其他命令] --help
简短的Shell自带的解释。help命令只能显示shell内部预存的帮助信息。
man [其他命令]
全 一页 帮助文档,用于解释你不熟悉的命令具体参数等
info [其他命令]
info指令是man 指令的详细内容。
文件目录类
目录
pwd
显示当前目录绝对路径
cd [绝对路径/相对路径]
进入路径所指目录。绝对路径是从/
根目录开始
几个常用的相对路径
- cd ~cd回到登录账户的登入目录,
/home/用户名
- cd
..
回到上级目录
mkdir [选项] 创建的目录名(当前目录下)| 目录的绝对路径
创建目录。只写文件名则是默认在当前目录下创建(dir directory 目录)
- -p,mkdir -p 目录的绝对路径 | 当前目录下创建多级目录(均不存在)
rmdir [选项] 空目录路径
删除空目录
- -p ,rmdir -p BBB/Test若子目录Test为空且BBB在删除Test也为空,则一并删除
- rm -rf 删除非空目录/文件,该命令删除的文件无法在回收站找到
文件
touch /路径+文件名+后缀 | 当前目录下文件名及后缀
创建空文件,可新建多个文件,/路径+文件名1+后缀 /路径+文件名2+后缀
cp [选项] source路径 dest路径
拷贝目录/文件到指定目录
- -r,递归复制整个文件夹
- \cp -r source dest复制到目标目录并强制覆盖所有文件
rm [选项] 文件路径 | 当前目录文件名
删除文件/目录
- -r,递归删除整个文件夹
- -f,强制删除不提示
mv 旧文件路径 新文件路径
移动旧文件内容到新文件中,即如果都是同一个目录下便是重命名
注:旧文件和新文件地址可为不一致的相对/绝对地址
内容查看
cat [选项] 文件 | more
以只读方式查看文件
- -n,显示行号
- | more,分页显示【
|
管道符号 或 呈递符号,将前一个命令结果传递给下一个命令】
more 路径文件名
基于vi编辑器的文本过滤器,全屏的方式按页显示文本【不够一页直接退出more命令】
快捷键:
Space:翻一页,Enter:翻一行,:q
离开,Ctrl+F:滚动一屏
Ctrl+B:回滚一屏,=:输出当前行号,:f
显示文件名及当前行号
less 路径文件名
类似more但比more的性能会更强,在阅读大文件时不需要全部装载,看多少装载多少
快捷键:
Space:翻一页,pagedown:翻一页,pageup:回翻一页,/字符串:向下搜索字符串
?字符串:向上搜索字符串,q:离开
> 和 >>
将前一个指令内容输入到指向文件中。
>
输出重定向覆盖写入(不存在则创建)>>
追加 文件尾部
head [选项] 文件
默认显示前10行
- -n 数字,查看前n行
tail [选项] 文件
默认查看文档最后10行
- -n 数字,查看最后n行
- -f ,实时追踪文件所有更新
tail -f 文件,多用于监控日志文件,实时更新实时监控
创建软链接
in -s 源文件/目录 软链名称
给源文件/目录创建类似windows的快捷方式
例子:In –s /root linktoroot
但CD进入linktoroot的时候pwd仍是/home下的/linktoroot
只是看到的内容和操作到的内容是root目录下的。
输出变量至shell
echo 字符串
一般用于输出环境变量$PATH至Shell
echo $PATH
或者将字符串追加至文件
echo hellow >> a.txt
亦或者显示命令执行结果
echo `date`
目录查询
ls [选项]
显示当前目录下文件及目录
- -a 全部文件包括隐藏文件(自己,及上级目录)
- -l 以列表的方式显示信息
实用指令
1.统计/home目录下文件个数
ls -l /home | grep “^-” | wc -l
解析:ls -l查询,/home指定目录(不包含隐藏文件)
grep定位“-”符号(文件的标识符)【只保留-开头的】,wc -l 统计数目
举一反三
ls -l /home | grep “^d” | wc -l查询home目录下目录个数
ls -lR /home | grep “^d” | wc -l查询home目录及子目录含有的目录个数
2.以树状显示目录结构
yum install tree先安装tree
然后在目录下输入tree即可,或tree /目录地址
文件查找及内容查找
find [目录范围] [选项]
根据选项,从指定目录向下递归遍历各个子目录
- -name<文件名> ,按照指定的文件名查找文件
- -user <用户名> ,查找属于指定用户所拥有的文件
- -size <文件大小>,按照指定文件大小查找文件
注:-size +大于/-小于/=等于 0…n 单位
locate 文件名
使用事先建立好的locate数据库实现快速文件查找/定位,需要定期更新locate
手动更新locate命令updatedb
grep [-acinv] [–color=auto] ‘搜寻字符串’ filename
搜索文件内容
- -a :将 binary 文件以 text 文件的方式搜寻数据
- -c :计算找到 ‘搜寻字符串’ 的次数
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,显示出没有 ‘搜寻字符串’ 内容的那一行!
-
--
color=auto :将找到的关键词加上颜色
注:关于Linux中的单引号'
及双引号"
区别,只在于""
双引号可以包含特殊字符
时间日期类
date [选项]
显示当前日期例如:2019年 05月 05日 星期日 15:01:57 CST
- date +%Y显示当前年份
- date +%m显示当前月份
- date +%d显示当前哪天
- date +%Y-%m-%d %H:%M:%S显示年月日时分秒
cal
显示当前日期,以日历的形式展示
压缩及解压缩
1.gz命令
gzip [文件/目录]gz压缩
gunzip [文件.gz]gz解压缩
gz方法,源文件在压缩/解压缩后会被删除!
2.zip命令
zip [选项] [压缩包名.zip] [被压缩文件/目录]zip压缩
unzip [选项] [文件.zip]zip解压缩
源文件压缩/解压缩后不会被删除
3.tar命令
tar [] 目录/文件
根据-参数进行打包/解压缩
- -c 产生.tar打包文件
- -v 显示详细信息
- -f 指定压缩后的文件名
- -z 以gzip命令处理文件
- -x 解包.tar文件
- -C 进入指定的目录,再解压缩
压缩成tar.gz后缀文件
tar [-zcvf] [文件名.tar.gz] [文件-可多个/目录]
解压tar.gz文件至已存在的目录中
tar [-zxvf] [文件名.tar.gz] -C [目录绝对路径]
文件组管理及权限管理
文件管理
3个属性:所有者user,所在组group,其他组othergroup
- 所有者:文件/目录创建者,拥有者
- 所在组:所有者的用户组
- 其他组:除去所有者所在组的剩余全部组
1.看文件/目录的所有者 所在组 等所有信息
ls -ahl(a=all,h=human,l=list)
2.修改文件所有者
chown 用户名 文件名(ChangeOwn)
需要注意的:只能由所有者权限进行变更且此命令不能改组。或者管理员权限也可3.修改文件所在组
chgrp 组名 文件名
文件权限管理
案例解读:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
RWX数字表示
RWX具体含义
4.修改文件/目录RWX读写执行权限
chmod [] 文件/目录操作实例
查询文件abc权限配置
tom用户修改abc文件权限后
tom用户删除所有者user权限
5.快捷操作:通过数字修改权限
Chmod 751 文件/目录名
6.修改文件目录所有者及所在组
Chown [-R] 新所有者:新所在组 文件目录名
Example:$ chown [-R] tom:police kkk/
但只修改文件目录所在组,使用Chgrp命令
chgrp [-R] newgroup file
常见修改实例:b用户编辑a用户主目录下文件–思路
- Usermod修改b用户所在组
- 修改所要进入的a用户目录的权限同组的要设置为rwx!!g=rwx
- 修改a用户拥有的a.txt文件的同组rw权限!g=rwx
- 登录b用户,进入a用户目录,vim编辑a.txt
注:Linux新用户若不指定用户组则,默认新建与用户名相同的用户组
任务调度
crontab []
- -e 新添编辑
- -l 查询crontab任务
- -r 删除当前用户所有crontab调度
service crond restart
简单命令实例:*/1 * * * * ls -l /etc/ > /tmp/to.txt
特殊符号在占位符的含义
任务调度crontab使用方法
1.简单命令
Crontab -e,编辑crontab。编辑简单命令至 crontab文件,保存wq即可。
2.复杂shell脚本
$ Vim mytask1.sh
Date >> /tmp/mydate
$ Chmod 744 mytask1.sh //令当前用户拥有此文件的[x]权限
$ Crontab -e
*/1 * * * * /home/mytask1.sh
解析:在shell编写复杂脚本,然后让Crontab -e调用该shell脚本【注意x权限】
注意:Data写入是有延迟的,crontab执行命令需要耗时。
常用:/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
。备份Mysql数据库,此行写在shell脚本(例如mytask1.sh即可)。
历史命令查询
History [0123…]显示已执行过的指令【该用户所有的跨天】$ ! 数字
快速执行已执行过的History对应编号指令。!0就是执行第一条指令
上传文件
sudo rz需要拥有当前目录的写入权限,默认上传到当前目录
SecureCRT8.5 ALT+P
进程管理
进程查询
1.ps []显示当前系统进程
- -a:显示当前终端的所有信息
- -u:以用户的格式显示进程信息
- -x:显示后台进程运行的参数
一般使用ps -aux | more或者ps -aux | grep xxx
2.ps -ef | more查看父进程
注:Ppid是父进程PID,C:CPU用于计算执行的优先级因子,数值越大优先级越低
3.pstree []查看进程树状图
- -p:显示进程的PID
- -u:显示进程所属用户
强制关闭
kill [] 进程号killall 进程名结束进程
常用选项:-9 强制立即停止。killall 进程名支持通配符。
可用于踢掉非法登录用户,先查询SSDH服务ps -axu | grep sshd
再kill对应的sshd服务。如果kill了/usr/sbin/sshd服务,那么之后的远程登录均会失败
服务(进程)/(守护进程)管理
Systemctl命令,融合之前service和chkconfig的功能于一体
CentOS7之前,采用 service 服务名称 start/restart/stop/status…
1.查看服务
systemctl列出正在运行的服务状态(全面,复杂)
systemctl list-unit-files列出所有已经安装的服务及状态(可为人读简略清晰)
systemctl list-units --type=service查看服务列表
systemd-cgls以树形列出正在运行的进程,它可以递归显示控制组内容
2.服务常用操作
启动一个服务:systemctl start postfix.service
关闭一个服务:systemctl stop postfix.service
重启一个服务:systemctl restart postfix.service
显示一个服务的状态:systemctl status postfix.service
3.服务自启操作
在开机时启用一个服务:systemctl enable postfix.service
在开机时禁用一个服务:systemctl disable postfix.service
查看服务是否开机启动:systemctl is-enabled postfix.service
查看已启动的服务列表:systemctl list-unit-files | grep enabled
查看启动失败的服务列表:systemctl –failed
4.查询所有服务名称(包括未被启用的)
sudo setup查看系统服务
/etc/init.d/目录内文件
注:服务也拥有运行级别这一属性。主要是应用于服务自启
5.修改服务自启级别,重启后生效
1)systemctl list-unit-files列出所有服务
2)systemctl list-unit-files --type=target查看当前系统的所有 Target
3)systemctl list-dependencies multi-user.target查看该 Target 包含的Unit
4)systemctl get-default查看启动的默认 Target
5)sudo systemctl set-default multi-user.target设置启动时的默认 Target
6.CentOS7后Target与Run Level的对应关系
Runlevel 0 | runlevel0.target -> poweroff.target |
Runlevel 1 | runlevel1.target -> rescue.target |
Runlevel 2 | runlevel2.target -> multi-user.target |
Runlevel 3 | runlevel3.target -> multi-user.target |
Runlevel 4 | runlevel4.target -> multi-user.target |
Runlevel 5 | runlevel5.target -> graphical.target |
Runlevel 6 | runlevel6.target -> reboot.target |
7.Service+Chkconfig与Systemctl区别
实时更新的动态进程监控
top []
- -d 秒数,每隔X秒刷新,默认是3s
- -i,不显示任何闲置/僵死进程
- -p PID,仅监控该进程
界面与键盘交互操作:【区分大小写!!!!Linux区分大小写!!!!】
P,以CPU使用率排序;M,以内存占用率;N,以PID排序;Q退出
U,再输入用户名,即可监控某用户进程。
k,再输入进程号ID,即可kill某个进程。
网络监控
netstat []查看系统中所有联网进程
- -a 按一定顺序排列输出
- -n 直接显示IP而不通过域名服务器
- -p 显示哪个进程调用的
- -t TCP协议连线
- -u UDP协议连线
- -l 显示监控中的服务器的Socket端口(22/80等
一般:netstat -anp | more,分页查看所有的连接
以及:netstat -anp | grep 服务名(例如sshd)来查询单个服务的网络服务状态
netstat -tunlp查看端口占用
包管理
RPM(Red Hat Package Manager)离线安装
一般用于安装离线安装包,当然也可以安装在线安装包,但需要输入URL地址。
主要功能:
- 安装、卸载、升级和管理软件
- 组件查询功能
- 验证功能
- 软件包GPG和MD5数字签名的导入、验证和发布
- 软件包依赖处理
- 选择安装
- 网络远程安装功能
1.安装软件包rpm -ivh rpm包全路径名称
- -i,install安装
- -v,verbose提示
- -h,hash进度条
2.卸载软件包rpm -e 包名
强制删除,rpm -e –nodeps 包名
3.查询软件包
rpm -qa查询全部安装的软件包
rpm -qa | more分页展示
rpm -qa | grep xxxx查询某xxx软件包是否安装
rpm -ql 包名查询软件包中的文件
rpm -qf 文件全路径名查询文件所属软件包
YUM(Yellow dog Updater, Modified)在线安装
在Fedora和 RedHat 以及 CentOS 中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
1.查询网络列表中特定软件yum list | grep xxx
2.安装网络列表中指定软件yum install xxx
磁盘分区及挂载
基础常识
硬盘类别
硬盘分为家用IDE接口,及服务器SCSI接口,以及新一代的SATA,SAS接口。
这里只说IDE与SCSI,IDE接口性价比高,使用范围广,主要用于个人计算机不要求高读写,高性能等领域。SCSI接口则是价格高些,性能更稳定、耐用,可靠性也更好,最主要的是扩充性,SCSI接口能够扩充15个接近IDE4倍。
分区方式
Linux中主要有两种分区类型,分别为MBR(Master Boot Record)和GPT(GUID Partition Table),是在磁盘上存储分区信息的两种不同方式。GPT是正在逐渐取代MBR分区方式的新技术,主要原因是由我们存储的数据量日益庞大,MBR所能管理的磁盘大小已经远远不够。
Linux磁盘管理
在Linux中会把设备映射成为/dev目录下的一个系统文件,IDE接口类型的硬盘设备映射的文件名称前缀为“hd”,SCSI、SATA、SAS等接口的硬盘设备映射的文件名称前缀为“sd”(部分虚拟机或者云主机的名称可能是其他的,比如“vd”),后面拼接从“a”开始一直到“z”用来区分不同的硬盘设备,在硬盘名称后面拼接数字用来区分该磁盘不同的分区。
为什么对磁盘分区
- 优化I/O性能
- 隔离系统和应用程序
- 实现磁盘空间的配额限制
- 同一磁盘可采用不同的文件系统
- 同一磁盘上可以安装多个操作系统
磁盘分区
MBR(Master Boot Record)分区规则
1.一块磁盘上主分区(primary partion)和扩展分区(extension partion)个数总和不能超过4个
2.一块磁盘上最多只能有1个扩展分区
3.扩展分区中可以创建逻辑分区,个数限制视磁盘类型而定
4.主分区可以马上被挂载使用但不能再分区,扩展分区必须再进行二次分区后才能挂载。
5.最大管理硬盘容量为2TB
样例示范
硬盘 | 主分区1 | 主分区2 | 主分区3 | 主分区4 | 逻辑分区1 | 逻辑分区2 | 逻辑分区3 | … | 逻辑分区n | |
IDE1 | /dev/hda | /dev/hda1§ | /dev/hda2§ | /dev/hda3(e) | / | /dev/hda5(l) | /dev/hda6(l) | / | … | / |
IDE2 | /dev/hdb | /dev/hdb1§ | /dev/hdb2§ | /dev/hdb3(e) | / | /dev/hdb5(l) | /dev/hdb6(l) | / | … | / |
SCSI | /dev/sda | /dev/sda1§ | /dev/sda2§ | /dev/sda3§ | / | dev/sda4(e) | /dev/sda5(l) | /dev/sda6(l) | /dev/sda7(l) | … |
SATA | /dev/sdb | /dev/sdb1§ | /dev/sdb2§ | /dev/sdb3§ | /dev/sdb4§ | / | / | / | … | / |
MBR的主分区号为1-4,逻辑分区号为从5开始累加的数字。
比如设备主板上装了2块IDE接口硬盘,1块SCSI接口硬盘和1块SATA接口硬盘。
其中2块IDE接口硬盘的分区策略为2个主分区和2个逻辑分区,SCSI分区策略为3个主分区和3个逻辑分区,SATA分区策略为4个主分区。
分区名称后面的(p)【表格中显示为§】代表基本分区,(e)代表扩展分区,(l)代表逻辑分区
磁盘挂载步骤
- 添加新的硬盘
a) 需要重启,才能被识别(如果是虚拟机,在虚拟机选项卡–设置,增添新硬盘
b)lsblk
查看是否有该设备(获取硬盘名例如sdb) - 分区
a)fdisk 硬盘路径
(例如 /dev/新增硬盘名sdb)
b) 输入,n,【add a new partition】,回车,回车,回车都默认即可,最后输入w - 格式化
a) 先查询sdb磁盘有无
b)mkfs -t ext4 /dev/sdb1
初始格式化
c) 再查询sdb,格式化成果,出现相关配置信息。但是现在用不了因为没有挂载 - 挂载
a) 需要先存在被挂载的目录【创建新目录也可】
b)mkdir /home/newdisk
c)mount /dev/sdb1 /home/newdisk
d) 挂载成功【但是,这是临时挂载】重启后失效 - 设置永久挂载
a)vim /etc/fstab
b) 输入挂载信息Uuid= /挂载目录 文件系统格式 default 0 0
ii. 硬盘目录 /挂载目录 文件系统格式 default 0 0
c)mount -a
,生效 - 卸载(取消挂载关系)
a)umount 设备完全路径
(例如/dev/sdb1)
注意:这只是在lsblk -f
命令中看不到,但在fstab文件中是可以看到且存在的,只要再运行mount -a
就又可被永久挂载
磁盘情况查询
df [-h]查询总体文件系统的容量/已用/可用/挂载点
- -s 指定目录占用大小汇总
- -h 带有计量单位
- -a 含有文件
- –max-depth=1 子目录深度为1
- -c 列出详细的同时,增加汇总值
du [-h] /目录查询指定目录的磁盘占用情况,不写路径默认是当前目录
实时监控IO
可用iotop命令
yum install iotop
iotop
主机名配置
意义
记住IP很麻烦,不如Hadoop01,Hadoop02……
emmmm说实在的,就相当于英译中了……方便点
相关文件路径
/etc/hostname
/etc/hosts
$:shell命令
- 查看当前主机名hostname
- 永久修改主机名hostnamectl set-hostname 新主机名
- 临时修改主机名hostname 新主机名
- 注:临时修改在重启后配置恢复为/etc/hostname文件中配置
- 注:
/etc/hosts
增加ip和主机名的映射可增快ping通速度 - 注:有教程说
/etc/sysconfig/network
加入HOSTNAME=主机名【过期了】 - 注:如果想在windows上也Ping通,可修改
C:\windows\system32\drivers\etc\host
增加IP及主机名即可
相关软件及配置
远程访问
- XShell6,远程访问Linux系统【免费便捷】
- XFtp6,远程上传文件下载文件【1.2两兄弟是一家做的】
- SecureCRT8.5,远程访问Linux系统【稳定,比XShell稳定多了,包含ftp】
虚拟机
- VMware Workstation Pro 15【国内都用这个8?】
- Vagrant 2.2.4【Udacity使用这个】