(一)操作系统内核与系统调用接口
1、内核
核心代码,是一个管理和控制程序,负责管理计算机的所有物理资源,包括文件管理、内存管理、设备管理和进程管理
2、系统调用接口
与应用软件交互,提供给应用软件调用操作系统内核功能的接口。
3、LINUX主要发行版
CENTOS、RHEL、FEDORA、UBUNTU、SUSE,选择Red Hat Enterprise Linux,最容易安装,应用最广。
4、安装Linux系统
- 详见鸟哥私房菜P102,对内存最低要求为512M。
- swap分区:虚拟内存,硬盘上的一块空间,通常为内存空间的1.5~2倍,不超过8G,当内存处理程序过多时,将一部分程序放到该分区中,等内存处理完其他程序,运行该程序时再读取回内存。
5、系统启动流程:初始化和服务
5.1 硬盘结构
两个盘片,中间是主轴马达,一圈是一个磁道,一个扇区512bytes,是硬盘在物理层面上读写的最小单位,机械手臂的磁头读写磁盘
5.2 Linux系统引导的顺序
BIOS→MBR→boot loader(GRUB)程序→内核→init:
- BIOS(基本输入/输出系统的缩写):是硬件与软件之间非常基本的接口,可以找到启动盘,工作是检查计算机的硬件设备,如CPU、内存和风扇速度等
- GRUB(多重操作系统启动管理器)程序:控制启动盘里哪个操作系统,配置文件为grub.conf,设置grub Md5加密命令grub-MD5-crypt,在配置文件中title上方僖新增一行Password=明文或password--md5密文(编辑grub配置文件的密码) Title red hat 标题 Password=明文或password--md5密文(加载内核系统引导必须的密码)
- MBR会在启动盘的第1个块中,大小为521B,其中前446中的程序代码是用来选择boot partition(分区),也就是由哪个分区来装入开机用的代码
- 内核部分,主要是装计算机设备的驱动程序,以便操作系统可以控制计算机上的设备,并且以只读的方式挂载根文件系统,即此时的操作系统只能读到根文件系统(目录)所在的分区
- init程序的进程id为1,即Linux操作系统第一个执行的程序
5.3 完整的启动流程
- 打开电源
- 计算机自动从主板的BIOS读取其中存储的程序,通常知道一些直接连接在主板上的硬件(硬盘、网络接口、键盘、串口、并口),现在大部分BIOS允许从软盘、光盘或硬盘中选择一个来启动计算机。
- 计算机从你选择的存储设备中读取起始的512bytes(这512bytes叫做主引导记录MBR,前446B是引导信息,后64B是分区信息,后2B是结束标志位)
- MBR会告诉计算机从该设备的某一个分区来装载引导加载程序(boot loader,GRUB是其中一种),boot loader存储有操作系统的相关信息,如操作系统名称,操作系统内核(kernel)所在位置等,常用的boot loader有GRUB和LILO。
- 随后boot loader会帮助加载kernel,lernel实际上是一个用来操作计算机的程序,主要任务是管理计算机的硬件资源,充当软件和硬件的接口,操作系统上的任何操作都要通过kernel传达给硬件。多操作系统的原理就是可以在多个分区安装boot loader,每个boot loader对应不同的操作系统,在读取MBR时选择想要启动的boot loader。
- 如果加载的是Linux kernel,Linux kernel开始工作,kernel会首先预留自己运行所需的内存空间,然后通过驱动程序(driver)检测计算机硬件,这样,操作系统就可以知道自己有哪些硬件可用
- 随后,kernel会启动一个init进程,它是Linux系统中的1号进程(Linux系统没有0号进程),到此,kernel就完成了计算机启动阶段的工作,交接给init来管理。init process(根据boot loader选项,Linux此时可以进入单用户模式,在此模式下,初始脚本还没开始执行,可以检测并修复计算机可能存在的错误)
- init会运行一系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts,执行如下功能:设置计算机名称、时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……当这些初始脚本,操作系统已经完全准备好了,只是还没有人可以登录
- init会给出登录(login)对话框,或者是图形化的登录界面。输入用户名和密码,DONE!在此后的过程中,你将以用户的身份操作电脑,此外,根据你创建用户时的设定,Linux还会将你归到某个组中。
5.4 查看操作系统信息
cat /etc/redhat-release操作系统版本,uname -r内核版本,uname -a内核详细信息
5.5 查看init进程说明
cat /etc/inittab
5.6 系统启动级别
runlevel显示上一次启动级别和当前启动级别
- init 0:关机
- init 1:单用户模式
- init 2:多用户,没有NFS(如果没有网络功能,和3一样)
- init 3:多用户模式(命令行模式)
- init 4:unused(没有使用,给开发用的)
- init 5:X11(图形界面)
- init 6:重启
- 命令:reboot重启系统
- 修改启动级别:倒计时界面按回车进入GRUB界面,选择内核版本按e编辑,选择内核按e编辑,按空格输入启动级别(如1),按回车,按b运行
5.7 grub加密
- 限制进入单用户模式破解root密码
- 配置文件:/etc/grub.conf
- 设置grub加密命令:grub-md5-crypt
- 在配置文件中title上方僖新增一行Password=明文或password--md5密文(编辑grub配置文件的密码)
5.8 BIOS加密(因为救援模式可以破解grub加密)
- 读条时f2进入BIOS界面,设置密码
- 破解BIOS加密:BIOS是主板上的电池,拆下来放电再装回去,程序就复位了,设置的密码会消失。
5.9 系统监控:top和free
- mem:内存
- 开启一个终端,就是运行一个bash程序,exit终止一个bash进程
- 僵直进程:父进程结束后,子进程没有结束,不继续占CPU资源运行,但仍占着内存资源
- 系统进程:系统内核运行的进程
- 用户进程:应用程序运行的进程
- top:动态查看,按1查看有几个CPU,按q退出,实时刷新,占用资源多,一般不使用。
- 内存空间:buffer缓冲区(读取硬盘数据缓存),cache高速缓存区(CPU调用内存数据缓存)
- free:查看内存信息
- 内存大小默认单位KB换算:echo $[算式]
- bc计算命令:echo 'scale=小数位数:算式'|bc -l
- 内存使用时使用的是buffer和cache
- mem行used表示的是内存已经分配出去多少buffer和cache,不是真实使用内存。free代表未分配内存。buffers表示分配未使用的buffer,cached表示分配未使用的cache
- -/+ buffer/cache行used表示真实使用的内存,free是总共可以被当成buffer和cache的内存(包含未分配的和已分配未使用的),代表内存真实剩余量。
- mem行used=buffers+cached+【-/+ buffer/cache行used】
- 【-/+ buffer/cache行free】=mem行free+buffers+cached
- 内存使用率=【-/+ buffer/cache行used】/total
5.10 进程管理
- 系统中进程的监控ps,用来显示当前进程的状态,ps -aus显示所有的与用户相关的完整信息,ps -aux|head -数字,查看头几行
- 系统中进程的监控pstree:以树状图显示程序,命令格式:pstree 进程号(PID)
- kill命令:把一个信号发送给一个或多个进程,默认发送终止信号。
- 终止进程:kill PID
- 强制杀死进程:kill -9 PID
- pgrep:通过名称或其他属性查找进程。
- 格式:pgrep 进程名称
- pkill:通过名称或其他属性发信号给进程。
- 杀死进程命令格式:pkill 进程名称
- 进程:程序的一次动态执行
- 守护进程:在后台运行并提供系统服务的一些进程
- 父进程、子进程:当一个进程创建另一个进程时,第一个进程为新进程的父进程,新进程为子进程
- tty:终端
- grep命令:过滤内容
- 格式:grep '查找内容' 目标路径/文件
- grep -v '查找内容' 目标路径/文件:反向匹配,即过滤出不包含查找内容的内容
- Ctrl+c:终止命令执行
- firefox &:后台运行firefox,关闭终端,子进程firefox也会关闭
- jobs:查看后台运行的进程
- fg %工作号:后台程序调回前台运行
- kill %工作号:杀死后台进程
- bg %工作号:在后台运行
5.11 磁盘分区
- fdisk -l /dev/sdb:查看硬盘信息
- 块block:8个扇区,即8*512B,逻辑层面操作系统读写文件单位
- 存储:块存储(硬盘)、文件存储(文件)、对账存储(百度网盘)
- fdisk /dev/sdb:进行分区,输入m查看帮助,输入n进行分区(出现两个选项,e扩展分区,p主分区),输入d删除分区,输入p查看分区,输入w保存分区
- 分区:两个柱面之间的区域
- 硬盘最多只能建4个主分区(MBR存放分区信息的64字节,只能存储四个主分区信息,要增加分区,只能删掉一个主分区,建立一个扩展分区,只记录剩下的分区信息,由剩下的分区存储数据),1个扩展分区,(最多分15个分区?虚拟机试验扩展分区可以一直分区下去,只要空间足够)
- 扩展分区是个逻辑概念,再分区使用的是扩展分区的空间
- 只有主分区可以作为启动盘,逻辑分区是扩展分区里分出来的
- 新建分区保存后更新分区列表:partprobe
- 此时硬盘还不能用,需要格式化制作文件系统:mkfs.ext4(Linux文件系统) 分区(如:/dev/sdb1,或/dev/sdb{1..4},扩展分区不能格式化)
- 由分区映射到具体的目录:挂载
- 格式:mount 设备路径 具体的目录
- 查看挂载信息:df
5.12 文件系统与挂载
- mkfs.ext4:日志文件系统(先写到日志,再写入硬盘),已有些过时,适用于数据量小
- xfs:应用于海量数据的文件系统
- btrfs:效率最高,处于测试阶段,对CPU和内存占用高
- ntfs:window系统的文件系统
- 挂载:mount,从源设备到目标路径(挂载点)的映射,可以有多个挂载点
- 重新挂载参数:mount -o remount,ro(只读) 源设备
- 卸载:umount 源设备路径/挂载点目录
- 选项-l:强制卸载
- 路径寻址:先找该路径对应的源设备文件系统,若无对应源设备,寻找上一级目录对应的源设备,若有,则找到该源设备目录。
- du:统计目录下的文件有多大
- 格式:du -sh 目录
5.13 磁盘用满的两种情况
- 元数据:文件本身内容以外还具有的信息,如权限信息、创建日期等,存放在硬盘上的inode(i节点)
- 查看文件inode编号:ls -i 文件路径
- 查看目录inode编号:ls -di 目录
- 查看每个分区的inode信息:df -i
- 往一个文件里写入大量数据(可以用来测试硬盘读写速度):dd if=输入文件 of=输出文件 bs=文件大小(如10G) count=文件数量。
- ll |wc -l:看有多少行
- access.log:访问日志
- 日志切割:mv改名,touch重建原名文件
- 大量备份用归档bar,临时备份才用cp -a(所有属性一起复制)
5.14 软件包
两种形式:nginx.tar.gz(放的是一堆源代码,编译安装,即翻译成2进制)和rpm(红帽软件包管理,就一个文件,存放编译好的二进制形式,可以直接安装)
(1) rpm软件包管理
- 命令rpm:
- 版本号末位为奇数是测试版本,偶数是稳定版本
- 安装软件包:rpm -i(安装)v(显示安装的详细信息)h(hash,显示安装进度)rpm软件包(可以空格排多个,可以是本地软件包路径,也可以是网络地址)——force(覆盖安装,用于更新)
- 查看安装:rpm -q(查询)a(所有)| grep '软件包名'或 rpm -q 软件包名
- 卸载安装:rpm -e(删除)软件包名 --nodeps(忽略软件依赖卸载)
- 网上下载软件包命令(只能下载到当前路径):wget 网络地址
- rpm -ql 软件包名:查询软件包安装位置
- -qi:查看软件包的详细信息。
(2)yum(Python写的)软件包管理:解决依赖关系
(2.1)配置本地yum源
/etc/yum.repos.d/local.repo
- 第一行[ID(如local)]
- 第二行name=源名(如local_yum)
- 第三行baseurl=file://(协议)yum源绝对路径
- 第四行固定enabled=1
- 第五行固定gpgcheck=0
- yum安装命令:yum -y(不用确认)install 软件包名
- 先去设定yum源路径下找依赖性关系的文件repodata,获取依赖性关系,再找到需要的所有软件包进行安装
- 清除yum缓存:yum clean all
- createrepo yum源路径:生成依赖性关系,要先安装createrepo
(2.2)卸载软件包
yum erase 软件包名
(2.3)yum makecache
制作缓存
(2.4)配置网络yum源
/etc/yum.repos.d下touch一个repo文件:
- 第一行[ID(centos)]
- 第二行name=源名(如remote_yum)
- 第三行baseurl=http://(协议)网络yum源地址
- 第四行固定enabled=1
- 第五行固定gpgcheck=0
- 注:安装完成默认删除软件包,要保留软件包修改配置文件/etc/yum.conf中keepcache=1和cachedir=保存路径
(3)源码安装
- 解包:tar xvf 软件包
- 运行configure脚本(./configure)添加编译参数:./configure --prefix=指定安装路径
- 编译:Linux用的编译软件gcc和glibc(gcc编译的c语言库),因为Linux是c语言写的,具体编译命令是make
- 安装:make install
- 命令yum groupinstall '软件组名':安装组软件,如开发工具
- 查看命令所在位置:which 命令
- echo $PATH:查看环境变量的值
- 输入命令PATH=路径:临时修改,设置环境变量。
- 永久修改环境变量:/etc/profile最后一行写上PATH=路径,再加一行export PATH。
5.15 ssh服务
- 提供远程控制主机服务,软件:openssh-clients(客户端,生成的命令是ssh)、openssh-server(服务端)、xshell、secureCRT、putty、VNC
- 一定要开启服务:sshd
- xshell链接服务器:ssh 服务器IP地址 -p 端口号
- sshd配置文件:/etc/ssh/sshd_config
- ssh连接慢,解决方法:sshd配置文件里UseDNS 由yes改为no(不用dns域名解析),/etc/hosts文件加注本机域名解析,如果连不上就关闭防火墙。
- iptables -L:查看防火墙
5.16 apache服务:提供网页服务
服务器端部署服务步骤:
(1)准备环境:关闭防火墙(工作上应写防火墙规则而不是直接关闭),关闭selinux(临时修改命令setenforce 0,永久修改配置文件/etc/sysconfig/selinux中SELINUX=enforcin改成disabled),配置IP地址
(2)装软件包:yum install httpd -y
(3)修改配置文件:/etc/httpd/conf/httpd.conf中DocumentRoot(文档即网站的根目录,可以在该目录建立文件即网页),Listen(监听端口号),ServerRoot(跟服务相关的配置文件目录)
(4)重启服务:service httpd restart(可以先用hostname修改主机名为域名形式,同步修改/etc/hosts)
(5)测试:服务器端写一个测试网页文件,打开浏览器,输入URL:http://服务器主机名(IP地址):端口号(浏览器默认80端口)(直达DocumentRoot)/详细地址(文件,不写默认访问index.html)。
(6)写前端网页文件:html、css、js、ajex、jquery
5.17 samba服务
- 一个网络服务器,构建在Linux系统,为Windows系统用户提供网盘服务。
- 服务器端部署服务步骤:
(1)准备环境:关闭防火墙(工作上应写防火墙规则而不是直接关闭),关闭selinux(临时修改命令setenforce 0,永久修改配置文件/etc/sysconfig/selinux中SELINUX=enforcin改成disabled),配置IP地址
(2)装软件包:yum install samba -y
(3)修改配置文件:/etc/samba/smb.conf中log file(日志文件目录),max log size(日志文件最大值),security=user(访问samba要输入密码,share不用输入密码,server代表deprecated),passdb backend=tdbsam(通过什么驱动程序管理samba的密码),Share Definitions(共享文件夹定义)下新增:
[company](名字)
comment=share file(注释信息)
path='/company'(共享路径)
【valid users = @组名,用户名(允许哪些合法组或用户访问)】
public=yes/no(共享资源是否能给游客账号访问)
【browseable=yes/no(是否设置该共享为隐藏共享)】
writable=yes/no(是否允许客户端写入数据)
write list = +staff(允许全体用户写入)(;注释掉)
【hosts allow=设置允许访问该共享的合法网段或IP】
printable=yes/no(是否允许打印,yes就不能访问共享文件夹了,写成no)
(4)重启服务:service smb restart
(5)测试:计算机->映射网络驱动器->文件夹输入\\服务器IP地址\共享文件夹名字(samba配置文件[]里的名字,如上面的company,samba服务器会根据这个名字定位到path)->没有写权限,因为客户端属于其他用户,path路径系统没有开放写的权限,用chmod修改权限后可写入。
(6)samba安全认证掌握两种:share(匿名访问)user;security为user时,samba只管理密码,所以必须是系统用户,需要先useradd 用户名,建立用户,再添加到smb用户,设置密码:smbpasswd -a 用户名,回车,输入两次密码,访问的是该用户的家目录。
(7)让samba用户不能登录操作系统,只能登录samba服务:usermod -s /sbin/nologin 用户名。
6、GNU项目与自由软件
- GUN计划:目标是创建一套完全自由的操作系统。
- GPL条款:开放源代码,保证GNU软件可以自由使用、复制、修改和发布,所有GNU软件都有一份,在禁止其他人添加任何限制的情况下,授予所有权利给任何人的协议条款。
- 自由软件:可以自由运行、修改该程序,有权利重新发布副件(白送或者收取一定费用),也有权发布该程序修改过的版本,让其他人受益。
7、Linux
- 一套免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
- 主要用途:服务器,尤其是网络服务器。
- 两种常见的桌面环境:KDE和GNOME 。
- Linux终端:虚拟控制台,采用字符命令行方式工作,用户通过键盘输入命令,通过Linux终端对系统进行控制。
- 切换虚拟终端的方法:Ctrl+Alt+F[1~6]。
- 普通用户登录后系统的提示符:$。
- root用户登录后系统的提示符:#。
- 退出命令:exit。
- 关闭Linux系统的命令:init 0。
- 添加用户命令:useradd 用户名。
- 更改用户密码命令:passwd 用户名(不指定用户名,默认更改当前用户密码)
8、Linux命令
命令格式:命令 【选项(以-开头)】 【参数】 。
8.1 cd
切换目录:cd 路径
8.2 ls
显示当前目录内容:
- ls [选项] [路径]
- 选项-l:显示内容的详细信息(相当于用别名ll)
- 选项-a:显示隐藏文件(文件名.开头)
- 路径:显示路径下的内容
8.3 whoami
查看当前登录的用户
8.4 who
显示当前登录的所有用户
8.5 date
显示系统当前日期和时间:
- date ['月日时分年']
- 参数 '月日时分年':设置时间
- 扩展:hwclock -s 同步硬件时间 -w 同步系统时间
8.6 cal
查看日历:
- cal [月] [年]
- 参数 月 年:查看指定年月日历
8.7 clear
清屏(Ctrl+L)
8.8 su - 用户
切换到另一个用户(root用户切换普通用户不用输入密码,反之则要)
8.9 man 命令
获取某个命令的使用说明,按q退出
8.10 命令 --help
查看命令帮助
8.11 命令 -h
查看命令帮助
8.12 pwd
显示当前路径
8.13 cp
复制文件和目录:
- cp 【选项】原文件或目录路径 目标路径【/新文件或目录名】
- 选项-i:询问是否覆盖已存在文件
- 选项-r:递归复制目录,不使用不能复制目录
8.14 mv
移动及修改文件和目录名:mv 原路径 目标路径【/新文件或目录名】
8.15 mkdir
建立目录:
- mkdir [选项] [多层]目录
- 选项-p:递归建立多层目录
8.16 touch
建立文件:
- touch 文件路径(可一次性建立多个文件)
- 例:touch /tmp/{1..9}.txt:一次性在/tmp目录下创建1.txt到9.txt,共9个文件。
8.17 rm
删除文件:
- rm [选项] 文件/目录
- 选项-f:不需要询问是否删除
- 选项-r:删除目录
8.20 rmdir
删除目录:rmdir 目录
8.21 cat
查看文件内容,可以查看多个文件内容:cat 文件路径 【文件路径】
8.22 head
查看文件头几行,默认头10行:
- head [选项] 文件路径
- 选项-数字:指定查看头几行内容
8.23 tail
查看文件末尾几行,默认末尾10行:
- tail [选项] 文件路径
- 选项-数字:指定查看末尾几行内容
- 选项-f:动态查看文件内容变化,用来查看日志(动态监测)
8.24 more
浏览文件,回车翻页:more 文件
8.25 less
浏览文件,上下键翻页:less 文件
8.26 alias 命令
显示命令别名
- 例:alias cp,显示 alias cp ='cp -i'
- alias 别名='命令 【选项】':给命令取别名,可以用别名执行命令
8.27 id 用户
查看用户id、组id和用户组信息(加入的哪些组)。
8.28 vim
编辑器:vim [文件名]
8.29 echo
显示内容:echo '内容'
8.30 ll -d 目录
查看目录权限
8.31 快捷键
- tab键:补全命令
- ctrl+a:跳到命令的首部
- ctrl+e:跳到命令的尾部
9、Linux文件系统的树状结构
- 只有一个根节点,/表示根目录,.表示当前目录,..表示上级目录,~当前用户的家目录,-返回上一次所在的目录
- 根下bin目录:用来存放常用的二进制可执行文件
- sbin目录:用来存放系统的可执行文件
- 家目录:用来存放用户自己的文件或目录,root用户的家目录是/root,其他用户家目录存放在/home目录下
- dev目录:设备文件目录
- etc目录:配置文件目录
- 挂载点(目录):通常可移除式硬件会被挂载在/media或/mnt目录之下
- /media、/mnt、/opt目录可以随便用
- /tmp临时目录:存放临时文件
- 绝对路径:必须以正斜杠/开始,从根节点到目标对象的完整路径
- 相对路径:不以正斜杠/开始,从当前目录到目标对象的路径
10、用户、群组和权限
创建一个用户会生成家目录和以下5个文件:
10.1 /etc/passwd:存放用户信息
格式:用户名:密码(用x占位):user id(0即root用户,自己建的用户id从500开始,500以前是系统占用):group id:用户描述信息:家目录:用户的shell(登录成功后第一条执行的命令,/bin/bash代表可以登录操作系统,/sbin/nologin登录后自动退出,代表不能登录操作系统)
10.2 /etc/shadow:存放用户密码(加密过的)信息
10.3 /etc/group:组文件
格式:组名:组密码:group id:组成员(不写默认有一个自己)
10.4 /etc/gshadow:组密码文件
10.5 /var/spool/mail/用户:用户邮箱
11、用户增删改查及相关操作
- 增加用户:useradd -u 用户uid -g 用户所属群组 -d 用户家目录 -c 用户的备注信息 -s 用户所用shell 用户名
- 删除用户:userdel -r(同时删除用户的家目录和邮箱) 用户名
- 查看用户:id 用户名
- 修改用户:usermod -u 修改uid -g 修改gid -G 加入群组(覆盖,-a追加) -d 修改家目录(只改配置文件,需要自己重建家目录) -c 修改用户备注信息 -s 修改用户所用shell -L(锁定用户账号) -U(解锁用户账号)用户名
- 创建新群组:groupadd -g 指定gid 群组名
- 修改群组信息:groupmod -g 修改gid -n 修改群组名称 群组名
- 删除群组:groupdel 群组名
12、文件的权限管理
ls -l显示信息:权限信息 硬链接数 属主(用户名) 属组(群组) 文件大小 文件创建日期时间 文件名
- 权限信息后跟一个点(.)是安全标志,代表这个文件是在selinux软件开启时(安全环境下)创建的
- 权限信息(10位):第一位代表文件类型,-是普通文件,d是目录(也是文件),l是软链接(相当于快捷方式,创建命令:ln -s 源文件 软链接文件名称),b是设备(硬盘是块设备),p是管道文件
- 后九位,三位一组,分别是r(数字4)读、w(数字2)写和x(数字1)执行权限,-代表没有相应的权限
- 第二到四位:属主的权限
- 第五到七位:属组的权限
- 第八到十位:其他用户的权限
- 修改权限(只有属主或root用户可以):chmod 用户类型(u属主,g属组,o其他用户) +增加权限/ -取消权限/ =修改权限(三个-可以简写一个-)(更改多个权限用,隔开)文件名
- 注:root用户是管理员,以及文件属主,不受权限控制,如vim可以wq!强行写入只读文件,其他用户却不能。
- 执行文件的方法:sh 文件路径、. 文件路径、./文件路径、bash 文件路径
13、目录的权限管理
查看目录权限:ll -d 目录
- 可读:可以ls看到目录下的文件和子目录
- 可写:可以在该目录下删除文件、创建文件、文件重命名
- 可执行:可cd到该目录下
- 注:对目录的操作只与目录的权限有关,与对目录下文件内容的权限无关
- 注:必须有可执行权限,写权限才能生效
- 注:读写权限不影响子目录的读写权限
14、属主、属组及基于数字的权限管理
修改属主和属组:chown 【修改属主名】【.修改属组名】 文件或目录名
- 选项-R 递归修改目录及目录下文件和子目录
- 可用数字代表权限:r=4,w=2,x=1
- 例756=rwxr-xrw-
15、文件合并与文件归档
15.1 文件合并
- >:左边的内容覆盖右边文件内容,右边文件不存在,则新建
- >>:左边的内容追加到右边文件内容的后面,右边文件不存在,则新建
- wc -l 文件名:统计文件内容有多少行
- |:管道符,将左边命令的执行结果传递给右边命令作为参数执行
15.2 文件归档
将许多文件或目录打包成一个文件:
- 命令格式:tar -c【v】f 归档文件名(.tar) 要归档的文件名序列
- 查看归档文件包含的内容:tar -tf 归档文件名
- 解除归档:tar x【v】f 归档文件名 -C 目标路径
16、文件压缩与解压缩
- 压缩定义:将一个大文件用过压缩算法变成个小文件,从而节省存储空间和网络的宽带
- 压缩算法:gzip和bzip2(压缩后的空间更大)
- 格式:gzip 文件名,对应解压命令:gunzip 压缩文件名
- bzip2 文件名,对应解压命令:bunzip2 压缩文件名
- 归档后用gzip压缩:tar -czvf 归档压缩文件名(.tar.gz) 要归档的文件名序列
- 归档后用bzip2压缩:tar -cjvf 归档压缩文件名(.tar.bz2) 要归档的文件名序列
- history:查看历史命令
- 解包:tar x【z】vf 归档压缩文件名 -C 目标路径
- *:通配符
- 只打包目录下的所有文件,不包含目录:cd到该目录下,再用*指定所有文件打包
17、vim编辑器
UNIX和Linux系统内嵌的,交互类型的,标准文字编辑器,可以创建和修改正文文件
17.1 三种模式
- 命令行模式:默认模式,所有输入被解释成vim命令,可以执行修改、复制、移动、粘贴和删除正文等命令,进行移动光标、搜索字符串和退出的操作等
- 编辑模式:在命令行模式中输入a(在光标之后添加内容)、i(在光标之前插入内容)或o(在当前光标所在行之下新增一行开始输入)/O(上面新增一行)进入该模式,可以输入正文,输入的每个字符都被解释为正文,#代表注释,使用ESC键返回命令行模式
- 扩展模式(一些UNIX系统上也叫最后一行模式):在命令行模式中输入冒号(:)进入该模式,此时光标移到屏幕的最后一行,可以使用一些高级编辑命令,如搜寻和替代字符串、存盘或退出等
17.2 命令模式下的操作
- 移动光标位置:$移动到当前行结尾,0移动到当前行开头,gg跳到整个内容的首行,G跳到整个内容的尾行,nG跳到第n行,H移动到屏幕最上方那一行的第一个字符,M移动到屏幕中央那一行的第一个字符,L移动到屏幕最下方那一行的第一个字符。
- dd:删除/剪切光标所在那一行
- ndd:n为数字,删除/剪切光标所在的向下n行
- yy:复制光标所在那一行
- nyy:n为数字,复制光标所在的向下n行
- u:撤销上一步操作
- 小写p:将内容粘贴到光标所在行的下一行
- 大写P:将内容粘贴到光标所在行的上一行
- np:将内容粘贴n行
- ctrl+r:恢复上一步操作
- 查找:/查找内容,回车
17.3 扩展模式的操作
- :w保存/写入磁盘
- :q退出vim编辑器,不保存
- :wq保存并退出
- :set nu:显示行数
17.4 问题处理
进入vim编辑器时出现提示xxx.swp文件已存在,是未保存文件时关机,临时保存用来回补文件用的,删除该文件即可。
18、软链接和硬链接
18.1 block块分类
- super block(掌管全局,还有多少inode可以分配,那些编号是活跃状态)、inode block(存放inode号、权限、属主、属组、创建时间、文件名、指针)、directory block(存放目录下文件对应inode号)、数据块block(存放数据)
- 删除操作是修改inode忙碌/空闲状态,标记为free,不会真正物理删除数据,只有当这个inode被分配给另外的文件,覆盖数据,才会真正被删除。
18.2 软链接
ln -s 源文件 链接文件,inode号不一样,软链接指向文件名,相当于快捷方式,一个修改另一个跟着变,删除链接文件对源文件没有影响,删除源文件,链接文件失效,软链接可以跨分区(指向文件名)。
18.3 硬链接
- ln 源文件 链接文件,inode号一样,硬链接指向inode号,一个修改另一个跟着变,删除链接文件对源文件没有影响,删除源文件,链接文件也没影响,硬链接不能跨分区(指向inode号,不同分区可以有相同的inode号,但不是同一个)。
- 当前目录(.)和上级目录(..)都是硬链接
(一)操作系统内核与系统调用接口
1、内核
核心代码,是一个管理和控制程序,负责管理计算机的所有物理资源,包括文件管理、内存管理、设备管理和进程管理
2、系统调用接口
与应用软件交互,提供给应用软件调用操作系统内核功能的接口。
3、LINUX主要发行版
CENTOS、RHEL、FEDORA、UBUNTU、SUSE,选择Red Hat Enterprise Linux,最容易安装,应用最广。
4、安装Linux系统
- 详见鸟哥私房菜P102,对内存最低要求为512M。
- swap分区:虚拟内存,硬盘上的一块空间,通常为内存空间的1.5~2倍,不超过8G,当内存处理程序过多时,将一部分程序放到该分区中,等内存处理完其他程序,运行该程序时再读取回内存。
5、系统启动流程:初始化和服务
5.1 硬盘结构
两个盘片,中间是主轴马达,一圈是一个磁道,一个扇区512bytes,是硬盘在物理层面上读写的最小单位,机械手臂的磁头读写磁盘
5.2 Linux系统引导的顺序
BIOS→MBR→boot loader(GRUB)程序→内核→init:
- BIOS(基本输入/输出系统的缩写):是硬件与软件之间非常基本的接口,可以找到启动盘,工作是检查计算机的硬件设备,如CPU、内存和风扇速度等
- GRUB(多重操作系统启动管理器)程序:控制启动盘里哪个操作系统,配置文件为grub.conf,设置grub Md5加密命令grub-MD5-crypt,在配置文件中title上方僖新增一行Password=明文或password--md5密文(编辑grub配置文件的密码) Title red hat 标题 Password=明文或password--md5密文(加载内核系统引导必须的密码)
- MBR会在启动盘的第1个块中,大小为521B,其中前446中的程序代码是用来选择boot partition(分区),也就是由哪个分区来装入开机用的代码
- 内核部分,主要是装计算机设备的驱动程序,以便操作系统可以控制计算机上的设备,并且以只读的方式挂载根文件系统,即此时的操作系统只能读到根文件系统(目录)所在的分区
- init程序的进程id为1,即Linux操作系统第一个执行的程序
5.3 完整的启动流程
- 打开电源
- 计算机自动从主板的BIOS读取其中存储的程序,通常知道一些直接连接在主板上的硬件(硬盘、网络接口、键盘、串口、并口),现在大部分BIOS允许从软盘、光盘或硬盘中选择一个来启动计算机。
- 计算机从你选择的存储设备中读取起始的512bytes(这512bytes叫做主引导记录MBR,前446B是引导信息,后64B是分区信息,后2B是结束标志位)
- MBR会告诉计算机从该设备的某一个分区来装载引导加载程序(boot loader,GRUB是其中一种),boot loader存储有操作系统的相关信息,如操作系统名称,操作系统内核(kernel)所在位置等,常用的boot loader有GRUB和LILO。
- 随后boot loader会帮助加载kernel,lernel实际上是一个用来操作计算机的程序,主要任务是管理计算机的硬件资源,充当软件和硬件的接口,操作系统上的任何操作都要通过kernel传达给硬件。多操作系统的原理就是可以在多个分区安装boot loader,每个boot loader对应不同的操作系统,在读取MBR时选择想要启动的boot loader。
- 如果加载的是Linux kernel,Linux kernel开始工作,kernel会首先预留自己运行所需的内存空间,然后通过驱动程序(driver)检测计算机硬件,这样,操作系统就可以知道自己有哪些硬件可用
- 随后,kernel会启动一个init进程,它是Linux系统中的1号进程(Linux系统没有0号进程),到此,kernel就完成了计算机启动阶段的工作,交接给init来管理。init process(根据boot loader选项,Linux此时可以进入单用户模式,在此模式下,初始脚本还没开始执行,可以检测并修复计算机可能存在的错误)
- init会运行一系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts,执行如下功能:设置计算机名称、时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……当这些初始脚本,操作系统已经完全准备好了,只是还没有人可以登录
- init会给出登录(login)对话框,或者是图形化的登录界面。输入用户名和密码,DONE!在此后的过程中,你将以用户的身份操作电脑,此外,根据你创建用户时的设定,Linux还会将你归到某个组中。
5.4 查看操作系统信息
cat /etc/redhat-release操作系统版本,uname -r内核版本,uname -a内核详细信息
5.5 查看init进程说明
cat /etc/inittab
5.6 系统启动级别
runlevel显示上一次启动级别和当前启动级别
- init 0:关机
- init 1:单用户模式
- init 2:多用户,没有NFS(如果没有网络功能,和3一样)
- init 3:多用户模式(命令行模式)
- init 4:unused(没有使用,给开发用的)
- init 5:X11(图形界面)
- init 6:重启
- 命令:reboot重启系统
- 修改启动级别:倒计时界面按回车进入GRUB界面,选择内核版本按e编辑,选择内核按e编辑,按空格输入启动级别(如1),按回车,按b运行
5.7 grub加密
- 限制进入单用户模式破解root密码
- 配置文件:/etc/grub.conf
- 设置grub加密命令:grub-md5-crypt
- 在配置文件中title上方僖新增一行Password=明文或password--md5密文(编辑grub配置文件的密码)
5.8 BIOS加密(因为救援模式可以破解grub加密)
- 读条时f2进入BIOS界面,设置密码
- 破解BIOS加密:BIOS是主板上的电池,拆下来放电再装回去,程序就复位了,设置的密码会消失。
5.9 系统监控:top和free
- mem:内存
- 开启一个终端,就是运行一个bash程序,exit终止一个bash进程
- 僵直进程:父进程结束后,子进程没有结束,不继续占CPU资源运行,但仍占着内存资源
- 系统进程:系统内核运行的进程
- 用户进程:应用程序运行的进程
- top:动态查看,按1查看有几个CPU,按q退出,实时刷新,占用资源多,一般不使用。
- 内存空间:buffer缓冲区(读取硬盘数据缓存),cache高速缓存区(CPU调用内存数据缓存)
- free:查看内存信息
- 内存大小默认单位KB换算:echo $[算式]
- bc计算命令:echo 'scale=小数位数:算式'|bc -l
- 内存使用时使用的是buffer和cache
- mem行used表示的是内存已经分配出去多少buffer和cache,不是真实使用内存。free代表未分配内存。buffers表示分配未使用的buffer,cached表示分配未使用的cache
- -/+ buffer/cache行used表示真实使用的内存,free是总共可以被当成buffer和cache的内存(包含未分配的和已分配未使用的),代表内存真实剩余量。
- mem行used=buffers+cached+【-/+ buffer/cache行used】
- 【-/+ buffer/cache行free】=mem行free+buffers+cached
- 内存使用率=【-/+ buffer/cache行used】/total
5.10 进程管理
- 系统中进程的监控ps,用来显示当前进程的状态,ps -aus显示所有的与用户相关的完整信息,ps -aux|head -数字,查看头几行
- 系统中进程的监控pstree:以树状图显示程序,命令格式:pstree 进程号(PID)
- kill命令:把一个信号发送给一个或多个进程,默认发送终止信号。
- 终止进程:kill PID
- 强制杀死进程:kill -9 PID
- pgrep:通过名称或其他属性查找进程。
- 格式:pgrep 进程名称
- pkill:通过名称或其他属性发信号给进程。
- 杀死进程命令格式:pkill 进程名称
- 进程:程序的一次动态执行
- 守护进程:在后台运行并提供系统服务的一些进程
- 父进程、子进程:当一个进程创建另一个进程时,第一个进程为新进程的父进程,新进程为子进程
- tty:终端
- grep命令:过滤内容
- 格式:grep '查找内容' 目标路径/文件
- grep -v '查找内容' 目标路径/文件:反向匹配,即过滤出不包含查找内容的内容
- Ctrl+c:终止命令执行
- firefox &:后台运行firefox,关闭终端,子进程firefox也会关闭
- jobs:查看后台运行的进程
- fg %工作号:后台程序调回前台运行
- kill %工作号:杀死后台进程
- bg %工作号:在后台运行
5.11 磁盘分区
- fdisk -l /dev/sdb:查看硬盘信息
- 块block:8个扇区,即8*512B,逻辑层面操作系统读写文件单位
- 存储:块存储(硬盘)、文件存储(文件)、对账存储(百度网盘)
- fdisk /dev/sdb:进行分区,输入m查看帮助,输入n进行分区(出现两个选项,e扩展分区,p主分区),输入d删除分区,输入p查看分区,输入w保存分区
- 分区:两个柱面之间的区域
- 硬盘最多只能建4个主分区(MBR存放分区信息的64字节,只能存储四个主分区信息,要增加分区,只能删掉一个主分区,建立一个扩展分区,只记录剩下的分区信息,由剩下的分区存储数据),1个扩展分区,(最多分15个分区?虚拟机试验扩展分区可以一直分区下去,只要空间足够)
- 扩展分区是个逻辑概念,再分区使用的是扩展分区的空间
- 只有主分区可以作为启动盘,逻辑分区是扩展分区里分出来的
- 新建分区保存后更新分区列表:partprobe
- 此时硬盘还不能用,需要格式化制作文件系统:mkfs.ext4(Linux文件系统) 分区(如:/dev/sdb1,或/dev/sdb{1..4},扩展分区不能格式化)
- 由分区映射到具体的目录:挂载
- 格式:mount 设备路径 具体的目录
- 查看挂载信息:df
5.12 文件系统与挂载
- mkfs.ext4:日志文件系统(先写到日志,再写入硬盘),已有些过时,适用于数据量小
- xfs:应用于海量数据的文件系统
- btrfs:效率最高,处于测试阶段,对CPU和内存占用高
- ntfs:window系统的文件系统
- 挂载:mount,从源设备到目标路径(挂载点)的映射,可以有多个挂载点
- 重新挂载参数:mount -o remount,ro(只读) 源设备
- 卸载:umount 源设备路径/挂载点目录
- 选项-l:强制卸载
- 路径寻址:先找该路径对应的源设备文件系统,若无对应源设备,寻找上一级目录对应的源设备,若有,则找到该源设备目录。
- du:统计目录下的文件有多大
- 格式:du -sh 目录
5.13 磁盘用满的两种情况
- 元数据:文件本身内容以外还具有的信息,如权限信息、创建日期等,存放在硬盘上的inode(i节点)
- 查看文件inode编号:ls -i 文件路径
- 查看目录inode编号:ls -di 目录
- 查看每个分区的inode信息:df -i
- 往一个文件里写入大量数据(可以用来测试硬盘读写速度):dd if=输入文件 of=输出文件 bs=文件大小(如10G) count=文件数量。
- ll |wc -l:看有多少行
- access.log:访问日志
- 日志切割:mv改名,touch重建原名文件
- 大量备份用归档bar,临时备份才用cp -a(所有属性一起复制)
5.14 软件包
两种形式:nginx.tar.gz(放的是一堆源代码,编译安装,即翻译成2进制)和rpm(红帽软件包管理,就一个文件,存放编译好的二进制形式,可以直接安装)
(1) rpm软件包管理
- 命令rpm:
- 版本号末位为奇数是测试版本,偶数是稳定版本
- 安装软件包:rpm -i(安装)v(显示安装的详细信息)h(hash,显示安装进度)rpm软件包(可以空格排多个,可以是本地软件包路径,也可以是网络地址)——force(覆盖安装,用于更新)
- 查看安装:rpm -q(查询)a(所有)| grep '软件包名'或 rpm -q 软件包名
- 卸载安装:rpm -e(删除)软件包名 --nodeps(忽略软件依赖卸载)
- 网上下载软件包命令(只能下载到当前路径):wget 网络地址
- rpm -ql 软件包名:查询软件包安装位置
- -qi:查看软件包的详细信息。
(2)yum(Python写的)软件包管理:解决依赖关系
(2.1)配置本地yum源
/etc/yum.repos.d/local.repo
- 第一行[ID(如local)]
- 第二行name=源名(如local_yum)
- 第三行baseurl=file://(协议)yum源绝对路径
- 第四行固定enabled=1
- 第五行固定gpgcheck=0
- yum安装命令:yum -y(不用确认)install 软件包名
- 先去设定yum源路径下找依赖性关系的文件repodata,获取依赖性关系,再找到需要的所有软件包进行安装
- 清除yum缓存:yum clean all
- createrepo yum源路径:生成依赖性关系,要先安装createrepo
(2.2)卸载软件包
yum erase 软件包名
(2.3)yum makecache
制作缓存
(2.4)配置网络yum源
/etc/yum.repos.d下touch一个repo文件:
- 第一行[ID(centos)]
- 第二行name=源名(如remote_yum)
- 第三行baseurl=http://(协议)网络yum源地址
- 第四行固定enabled=1
- 第五行固定gpgcheck=0
- 注:安装完成默认删除软件包,要保留软件包修改配置文件/etc/yum.conf中keepcache=1和cachedir=保存路径
(3)源码安装
- 解包:tar xvf 软件包
- 运行configure脚本(./configure)添加编译参数:./configure --prefix=指定安装路径
- 编译:Linux用的编译软件gcc和glibc(gcc编译的c语言库),因为Linux是c语言写的,具体编译命令是make
- 安装:make install
- 命令yum groupinstall '软件组名':安装组软件,如开发工具
- 查看命令所在位置:which 命令
- echo $PATH:查看环境变量的值
- 输入命令PATH=路径:临时修改,设置环境变量。
- 永久修改环境变量:/etc/profile最后一行写上PATH=路径,再加一行export PATH。
5.15 ssh服务
- 提供远程控制主机服务,软件:openssh-clients(客户端,生成的命令是ssh)、openssh-server(服务端)、xshell、secureCRT、putty、VNC
- 一定要开启服务:sshd
- xshell链接服务器:ssh 服务器IP地址 -p 端口号
- sshd配置文件:/etc/ssh/sshd_config
- ssh连接慢,解决方法:sshd配置文件里UseDNS 由yes改为no(不用dns域名解析),/etc/hosts文件加注本机域名解析,如果连不上就关闭防火墙。
- iptables -L:查看防火墙
5.16 apache服务:提供网页服务
服务器端部署服务步骤:
(1)准备环境:关闭防火墙(工作上应写防火墙规则而不是直接关闭),关闭selinux(临时修改命令setenforce 0,永久修改配置文件/etc/sysconfig/selinux中SELINUX=enforcin改成disabled),配置IP地址
(2)装软件包:yum install httpd -y
(3)修改配置文件:/etc/httpd/conf/httpd.conf中DocumentRoot(文档即网站的根目录,可以在该目录建立文件即网页),Listen(监听端口号),ServerRoot(跟服务相关的配置文件目录)
(4)重启服务:service httpd restart(可以先用hostname修改主机名为域名形式,同步修改/etc/hosts)
(5)测试:服务器端写一个测试网页文件,打开浏览器,输入URL:http://服务器主机名(IP地址):端口号(浏览器默认80端口)(直达DocumentRoot)/详细地址(文件,不写默认访问index.html)。
(6)写前端网页文件:html、css、js、ajex、jquery
5.17 samba服务
- 一个网络服务器,构建在Linux系统,为Windows系统用户提供网盘服务。
- 服务器端部署服务步骤:
(1)准备环境:关闭防火墙(工作上应写防火墙规则而不是直接关闭),关闭selinux(临时修改命令setenforce 0,永久修改配置文件/etc/sysconfig/selinux中SELINUX=enforcin改成disabled),配置IP地址
(2)装软件包:yum install samba -y
(3)修改配置文件:/etc/samba/smb.conf中log file(日志文件目录),max log size(日志文件最大值),security=user(访问samba要输入密码,share不用输入密码,server代表deprecated),passdb backend=tdbsam(通过什么驱动程序管理samba的密码),Share Definitions(共享文件夹定义)下新增:
[company](名字)
comment=share file(注释信息)
path='/company'(共享路径)
【valid users = @组名,用户名(允许哪些合法组或用户访问)】
public=yes/no(共享资源是否能给游客账号访问)
【browseable=yes/no(是否设置该共享为隐藏共享)】
writable=yes/no(是否允许客户端写入数据)
write list = +staff(允许全体用户写入)(;注释掉)
【hosts allow=设置允许访问该共享的合法网段或IP】
printable=yes/no(是否允许打印,yes就不能访问共享文件夹了,写成no)
(4)重启服务:service smb restart
(5)测试:计算机->映射网络驱动器->文件夹输入\\服务器IP地址\共享文件夹名字(samba配置文件[]里的名字,如上面的company,samba服务器会根据这个名字定位到path)->没有写权限,因为客户端属于其他用户,path路径系统没有开放写的权限,用chmod修改权限后可写入。
(6)samba安全认证掌握两种:share(匿名访问)user;security为user时,samba只管理密码,所以必须是系统用户,需要先useradd 用户名,建立用户,再添加到smb用户,设置密码:smbpasswd -a 用户名,回车,输入两次密码,访问的是该用户的家目录。
(7)让samba用户不能登录操作系统,只能登录samba服务:usermod -s /sbin/nologin 用户名。
6、GNU项目与自由软件
- GUN计划:目标是创建一套完全自由的操作系统。
- GPL条款:开放源代码,保证GNU软件可以自由使用、复制、修改和发布,所有GNU软件都有一份,在禁止其他人添加任何限制的情况下,授予所有权利给任何人的协议条款。
- 自由软件:可以自由运行、修改该程序,有权利重新发布副件(白送或者收取一定费用),也有权发布该程序修改过的版本,让其他人受益。
7、Linux
- 一套免费使用和自由传播的类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
- 主要用途:服务器,尤其是网络服务器。
- 两种常见的桌面环境:KDE和GNOME 。
- Linux终端:虚拟控制台,采用字符命令行方式工作,用户通过键盘输入命令,通过Linux终端对系统进行控制。
- 切换虚拟终端的方法:Ctrl+Alt+F[1~6]。
- 普通用户登录后系统的提示符:$。
- root用户登录后系统的提示符:#。
- 退出命令:exit。
- 关闭Linux系统的命令:init 0。
- 添加用户命令:useradd 用户名。
- 更改用户密码命令:passwd 用户名(不指定用户名,默认更改当前用户密码)
8、Linux命令
命令格式:命令 【选项(以-开头)】 【参数】 。
8.1 cd
切换目录:cd 路径
8.2 ls
显示当前目录内容:
- ls [选项] [路径]
- 选项-l:显示内容的详细信息(相当于用别名ll)
- 选项-a:显示隐藏文件(文件名.开头)
- 路径:显示路径下的内容
8.3 whoami
查看当前登录的用户
8.4 who
显示当前登录的所有用户
8.5 date
显示系统当前日期和时间:
- date ['月日时分年']
- 参数 '月日时分年':设置时间
- 扩展:hwclock -s 同步硬件时间 -w 同步系统时间
8.6 cal
查看日历:
- cal [月] [年]
- 参数 月 年:查看指定年月日历
8.7 clear
清屏(Ctrl+L)
8.8 su - 用户
切换到另一个用户(root用户切换普通用户不用输入密码,反之则要)
8.9 man 命令
获取某个命令的使用说明,按q退出
8.10 命令 --help
查看命令帮助
8.11 命令 -h
查看命令帮助
8.12 pwd
显示当前路径
8.13 cp
复制文件和目录:
- cp 【选项】原文件或目录路径 目标路径【/新文件或目录名】
- 选项-i:询问是否覆盖已存在文件
- 选项-r:递归复制目录,不使用不能复制目录
8.14 mv
移动及修改文件和目录名:mv 原路径 目标路径【/新文件或目录名】
8.15 mkdir
建立目录:
- mkdir [选项] [多层]目录
- 选项-p:递归建立多层目录
8.16 touch
建立文件:
- touch 文件路径(可一次性建立多个文件)
- 例:touch /tmp/{1..9}.txt:一次性在/tmp目录下创建1.txt到9.txt,共9个文件。
8.17 rm
删除文件:
- rm [选项] 文件/目录
- 选项-f:不需要询问是否删除
- 选项-r:删除目录
8.20 rmdir
删除目录:rmdir 目录
8.21 cat
查看文件内容,可以查看多个文件内容:cat 文件路径 【文件路径】
8.22 head
查看文件头几行,默认头10行:
- head [选项] 文件路径
- 选项-数字:指定查看头几行内容
8.23 tail
查看文件末尾几行,默认末尾10行:
- tail [选项] 文件路径
- 选项-数字:指定查看末尾几行内容
- 选项-f:动态查看文件内容变化,用来查看日志(动态监测)
8.24 more
浏览文件,回车翻页:more 文件
8.25 less
浏览文件,上下键翻页:less 文件
8.26 alias 命令
显示命令别名
- 例:alias cp,显示 alias cp ='cp -i'
- alias 别名='命令 【选项】':给命令取别名,可以用别名执行命令
8.27 id 用户
查看用户id、组id和用户组信息(加入的哪些组)。
8.28 vim
编辑器:vim [文件名]
8.29 echo
显示内容:echo '内容'
8.30 ll -d 目录
查看目录权限
8.31 快捷键
- tab键:补全命令
- ctrl+a:跳到命令的首部
- ctrl+e:跳到命令的尾部
9、Linux文件系统的树状结构
- 只有一个根节点,/表示根目录,.表示当前目录,..表示上级目录,~当前用户的家目录,-返回上一次所在的目录
- 根下bin目录:用来存放常用的二进制可执行文件
- sbin目录:用来存放系统的可执行文件
- 家目录:用来存放用户自己的文件或目录,root用户的家目录是/root,其他用户家目录存放在/home目录下
- dev目录:设备文件目录
- etc目录:配置文件目录
- 挂载点(目录):通常可移除式硬件会被挂载在/media或/mnt目录之下
- /media、/mnt、/opt目录可以随便用
- /tmp临时目录:存放临时文件
- 绝对路径:必须以正斜杠/开始,从根节点到目标对象的完整路径
- 相对路径:不以正斜杠/开始,从当前目录到目标对象的路径
10、用户、群组和权限
创建一个用户会生成家目录和以下5个文件:
10.1 /etc/passwd:存放用户信息
格式:用户名:密码(用x占位):user id(0即root用户,自己建的用户id从500开始,500以前是系统占用):group id:用户描述信息:家目录:用户的shell(登录成功后第一条执行的命令,/bin/bash代表可以登录操作系统,/sbin/nologin登录后自动退出,代表不能登录操作系统)
10.2 /etc/shadow:存放用户密码(加密过的)信息
10.3 /etc/group:组文件
格式:组名:组密码:group id:组成员(不写默认有一个自己)
10.4 /etc/gshadow:组密码文件
10.5 /var/spool/mail/用户:用户邮箱
11、用户增删改查及相关操作
- 增加用户:useradd -u 用户uid -g 用户所属群组 -d 用户家目录 -c 用户的备注信息 -s 用户所用shell 用户名
- 删除用户:userdel -r(同时删除用户的家目录和邮箱) 用户名
- 查看用户:id 用户名
- 修改用户:usermod -u 修改uid -g 修改gid -G 加入群组(覆盖,-a追加) -d 修改家目录(只改配置文件,需要自己重建家目录) -c 修改用户备注信息 -s 修改用户所用shell -L(锁定用户账号) -U(解锁用户账号)用户名
- 创建新群组:groupadd -g 指定gid 群组名
- 修改群组信息:groupmod -g 修改gid -n 修改群组名称 群组名
- 删除群组:groupdel 群组名
12、文件的权限管理
ls -l显示信息:权限信息 硬链接数 属主(用户名) 属组(群组) 文件大小 文件创建日期时间 文件名
- 权限信息后跟一个点(.)是安全标志,代表这个文件是在selinux软件开启时(安全环境下)创建的
- 权限信息(10位):第一位代表文件类型,-是普通文件,d是目录(也是文件),l是软链接(相当于快捷方式,创建命令:ln -s 源文件 软链接文件名称),b是设备(硬盘是块设备),p是管道文件
- 后九位,三位一组,分别是r(数字4)读、w(数字2)写和x(数字1)执行权限,-代表没有相应的权限
- 第二到四位:属主的权限
- 第五到七位:属组的权限
- 第八到十位:其他用户的权限
- 修改权限(只有属主或root用户可以):chmod 用户类型(u属主,g属组,o其他用户) +增加权限/ -取消权限/ =修改权限(三个-可以简写一个-)(更改多个权限用,隔开)文件名
- 注:root用户是管理员,以及文件属主,不受权限控制,如vim可以wq!强行写入只读文件,其他用户却不能。
- 执行文件的方法:sh 文件路径、. 文件路径、./文件路径、bash 文件路径
13、目录的权限管理
查看目录权限:ll -d 目录
- 可读:可以ls看到目录下的文件和子目录
- 可写:可以在该目录下删除文件、创建文件、文件重命名
- 可执行:可cd到该目录下
- 注:对目录的操作只与目录的权限有关,与对目录下文件内容的权限无关
- 注:必须有可执行权限,写权限才能生效
- 注:读写权限不影响子目录的读写权限
14、属主、属组及基于数字的权限管理
修改属主和属组:chown 【修改属主名】【.修改属组名】 文件或目录名
- 选项-R 递归修改目录及目录下文件和子目录
- 可用数字代表权限:r=4,w=2,x=1
- 例756=rwxr-xrw-
15、文件合并与文件归档
15.1 文件合并
- >:左边的内容覆盖右边文件内容,右边文件不存在,则新建
- >>:左边的内容追加到右边文件内容的后面,右边文件不存在,则新建
- wc -l 文件名:统计文件内容有多少行
- |:管道符,将左边命令的执行结果传递给右边命令作为参数执行
15.2 文件归档
将许多文件或目录打包成一个文件:
- 命令格式:tar -c【v】f 归档文件名(.tar) 要归档的文件名序列
- 查看归档文件包含的内容:tar -tf 归档文件名
- 解除归档:tar x【v】f 归档文件名 -C 目标路径
16、文件压缩与解压缩
- 压缩定义:将一个大文件用过压缩算法变成个小文件,从而节省存储空间和网络的宽带
- 压缩算法:gzip和bzip2(压缩后的空间更大)
- 格式:gzip 文件名,对应解压命令:gunzip 压缩文件名
- bzip2 文件名,对应解压命令:bunzip2 压缩文件名
- 归档后用gzip压缩:tar -czvf 归档压缩文件名(.tar.gz) 要归档的文件名序列
- 归档后用bzip2压缩:tar -cjvf 归档压缩文件名(.tar.bz2) 要归档的文件名序列
- history:查看历史命令
- 解包:tar x【z】vf 归档压缩文件名 -C 目标路径
- *:通配符
- 只打包目录下的所有文件,不包含目录:cd到该目录下,再用*指定所有文件打包
17、vim编辑器
UNIX和Linux系统内嵌的,交互类型的,标准文字编辑器,可以创建和修改正文文件
17.1 三种模式
- 命令行模式:默认模式,所有输入被解释成vim命令,可以执行修改、复制、移动、粘贴和删除正文等命令,进行移动光标、搜索字符串和退出的操作等
- 编辑模式:在命令行模式中输入a(在光标之后添加内容)、i(在光标之前插入内容)或o(在当前光标所在行之下新增一行开始输入)/O(上面新增一行)进入该模式,可以输入正文,输入的每个字符都被解释为正文,#代表注释,使用ESC键返回命令行模式
- 扩展模式(一些UNIX系统上也叫最后一行模式):在命令行模式中输入冒号(:)进入该模式,此时光标移到屏幕的最后一行,可以使用一些高级编辑命令,如搜寻和替代字符串、存盘或退出等
17.2 命令模式下的操作
- 移动光标位置:$移动到当前行结尾,0移动到当前行开头,gg跳到整个内容的首行,G跳到整个内容的尾行,nG跳到第n行,H移动到屏幕最上方那一行的第一个字符,M移动到屏幕中央那一行的第一个字符,L移动到屏幕最下方那一行的第一个字符。
- dd:删除/剪切光标所在那一行
- ndd:n为数字,删除/剪切光标所在的向下n行
- yy:复制光标所在那一行
- nyy:n为数字,复制光标所在的向下n行
- u:撤销上一步操作
- 小写p:将内容粘贴到光标所在行的下一行
- 大写P:将内容粘贴到光标所在行的上一行
- np:将内容粘贴n行
- ctrl+r:恢复上一步操作
- 查找:/查找内容,回车
17.3 扩展模式的操作
- :w保存/写入磁盘
- :q退出vim编辑器,不保存
- :wq保存并退出
- :set nu:显示行数
17.4 问题处理
进入vim编辑器时出现提示xxx.swp文件已存在,是未保存文件时关机,临时保存用来回补文件用的,删除该文件即可。
18、软链接和硬链接
18.1 block块分类
- super block(掌管全局,还有多少inode可以分配,那些编号是活跃状态)、inode block(存放inode号、权限、属主、属组、创建时间、文件名、指针)、directory block(存放目录下文件对应inode号)、数据块block(存放数据)
- 删除操作是修改inode忙碌/空闲状态,标记为free,不会真正物理删除数据,只有当这个inode被分配给另外的文件,覆盖数据,才会真正被删除。
18.2 软链接
ln -s 源文件 链接文件,inode号不一样,软链接指向文件名,相当于快捷方式,一个修改另一个跟着变,删除链接文件对源文件没有影响,删除源文件,链接文件失效,软链接可以跨分区(指向文件名)。
18.3 硬链接
- ln 源文件 链接文件,inode号一样,硬链接指向inode号,一个修改另一个跟着变,删除链接文件对源文件没有影响,删除源文件,链接文件也没影响,硬链接不能跨分区(指向inode号,不同分区可以有相同的inode号,但不是同一个)。
- 当前目录(.)和上级目录(..)都是硬链接