最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

二、Linux基础

业界 admin 11浏览 0评论

(一)操作系统内核与系统调用接口


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号,但不是同一个)。
  • 当前目录(.)和上级目录(..)都是硬链接 

发布评论

评论列表 (0)

  1. 暂无评论