linux 系统基础篇复习总结

来源:互联网 发布:淘宝摄影外包 编辑:程序博客网 时间:2024/06/05 06:30
#学习建议:
1.多做笔记
2.多敲命令(将常用命令及选项熟练使用)
3.学习不好根本就是不肯花时间
4.上课多提问


#推荐书籍:
linux命令行与shell脚本编程大全   


#网络知识:(网络基础 IP,netmask,网关,dns)
nat
gateway
dns
route




#linux的最重要设计思想: 一切皆文件 (Everything is file!)
基本设备命名:
硬盘:  
#sata接口,u盘 
/dev/sdX (X=a,b,c,d,e...)
#IDE接口
/dev/hdX (X=a,b,c,d...)


分区:   /dev/sdaY(Y=1,2,3,4,5...)
光驱:   /dev/cdrom 或 /dev/sr0 sr1 sr2 


#分区方式:
#MBR(Master Boot )分区方式(主分区,扩展分区,逻辑分区):
最大只能分4个主分区
最大识别2T硬盘


#GPT(GUID Partition Table)
最大分128个分区
最大识别18EB硬盘
需要系统和主板支持UEFI




#安装系统:
#在安装之前,进BIOS调整启动项(以什么安装方式安装将什么介质设为第一启动项)




安装方式:
1.光盘
*.iso


#u盘
#使用ultraISO安装(只能装一个系统) (MBR&GPT)
1.安装ultraISO,将ISO文件打开,插入u盘,选择启动-->写入硬盘映像---> 写入
2.进BIOS调整启动项,将u盘设为第一启动项(F10保存重启)
3.之后系统安装向导(格式化c盘)


#PE系统
#老毛桃PE(MBR分区)
1.下载PE软件,制作启动u盘
2.将系统安装镜像(iso)拷入u盘
3.调整启动项(u盘),重启
4.进入winpe(pocket edition)系统,windows安装器




root    #linux系统超级管理员,无所不能,拥有系统绝对控制权




tty(终端)  #TeleTYpewriter(电传式打字机),让用户输入数据,并且显示输出结果的设备




切换到其他终端:
Ctrl+Alt+F1-F7(F1图形化,F2-F6命令行终端)


#linux是一种多任务多用户操作系统
#windows是一种多任务单用户操作系统


不同终端运行的程序独立的




#命令的格式: []代表可选
COMMAND [Options] [Arguments]


pwd     #查看当前工作目录(当前目录)


ls     (list),列出目录中的内容  
#格式
ls [Options] [PATH] 
#options:  对命令功能的扩展
#短选项 (-字母)
-a   #all,查看所有文件,包括隐藏文件(.开头文件)
-d   #directory,查看目录本身
-l   #long,长格式显示(文件属性) 
--help #查看命令的帮助信息


#长选项 (--单词)
--all


#合并选项
-a -l  或 -al 
--all --list


ls  #不接路径,代表查看当前目录的内容 = ls .


cd DIR_PATH  #change directory,切换工作目录
#cd  回家(家目录)  = cd ~
#cd -  回到上一次工作目录
#cd .  
#cd .. 回到上一级目录




#特殊目录:
.   #当前目录
..  #当前目录的上一级目录
~   #当前用户家目录 ---->/root  /home/usr




路径:  用来描述一个文件的位置
#绝对路径:以/开头的路径 (/home/desktop)


#相对路径:相对于当前目录的路径 (../  ./  FILE)




#另外送几个命令
关机
init 0
poweroff
halt
shutdown -h now


重启
reboot
init 6
shutdown -r now 






操作系统起源:
#常见的操作系统
Unix:
AIX
HP-UNIX
Solaris 
BSD
...


Linux:
RHEL(RedHat Enterprise Linux)
Fedora
CentOS (Comunity ENTerprise Operating System)社区企业操作系统
Debian 
Kali


Windows:
DOS
winme
win95
win98
winxp
win7
win8
win10
win2003
win2008
win2012


sun microsystem


操作系统结构:


-----外壳(shell)---其他应用程序--
---------内核(kernel)----------
---------硬件------------------


操作系统起源:
linux


GNU(GNU is Not Unix) 
GPL(General Public License)


linux主要分支:
#redhat (rpm,yum )
rhel 6.x, 7.x
centos 6.x 7.x 
fedora 


#debian (dpkg,apt-get)
debian
ubuntu
kali 








#VMware Workstation的用法:  (ESXi)


ifconfig [DEVICE]  #查看网卡信息


#修改网卡信息:
#ifconfig (临时)


#修改网卡配置文件(永久修改) /etc/sysconfig/network-scrips/ifcfg-XXX(XXX等于网卡名称)


DEVICE=eth0  #设备名称
HWADDR=00:0C:29:78:7C:85  #MAC地址
TYPE=Ethernet  #网卡类型
UUID=afebb964-e290-430a-8ed3-bcc679689108  #设备唯一标识符
ONBOOT=yes   #网卡是否开机激活
NM_CONTROLLED=no  #是否能够被NetworkManager控制(推荐=no)
BOOTPROTO=static   #启动协议:none,dhcp,static
IPADDR=x.x.x.x
NETMASK=x.x.x.x
GATEWAY=x.x.x.x
DNS1=x.x.x.x 


#修改完后需要重启网络服务: 
service network restart
/etc/init.d/network restart 




#查看路由表
route -n  


#查看dns    /etc/resolv.conf




vi,vim   #多功能纯文本编辑器


格式:
vi  FILENAME  


#基本用法:
命令模式:  打开文件的默认模式,其他模式的入口,操作内容(拷贝,删除,粘贴),光标移动(esc返回上一级模式)
#进入编辑模式:
i
a
o
#进入末行模式(!代表强制):
:w        #write,保存
:q        #quit,退出
:wq 或 :x #write and quit
:q!      #不保存退出


编辑模式:


末行模式: 用来操作文件(保存,另存为,打开)




#常用快捷键:
tab     #路径补全,命令补全
ctrl+c  #中断当前命令的执行
ctrl+a  #ahead,光标移到行首
ctrl+e  #end,光标移到行尾


3.Software Management(软件管理)


安装格式:  
#windows
.exe .msi
#linux
.rpm(redhat) .deb(debian)






软件文件构成:
可执行文件
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin)


配置文件
/etc 


库文件(lib)
/lib, /lib64
其他文件(readme.txt,文档,案例等...)
/usr/share/doc
/usr/share/man


ldd   #查看可执行文件依赖库的函数


#软件包管理器
RPM(Redhat Package Manager)--> rpm
DPKG(Debian PacKaGe) ---> dpkg 




挂载   #将设备与目录关联,访问目录即访问设备
#步骤:
1.创建一个目录(挂载点mount point)
mkdir DIR
2.挂载  
mount -t iso9660 /dev/cdrom /media/




文件系统:用来明确文件在分区上组织方法和数据结构
#windows:
ntfs
fat32
#linux
ext2
ext3
ext4
xfs


df   #查看文件系统磁盘使用率




#RPM包格式
wireshark - 1.8.10 -  17  .  el6  .  x86_64  .rpm
#软件名称 -  版本    -  修订号. 适用系统.硬件架构  .rpm


硬件架构:cpu架构
i386
i686 
x86_64
arm 
sparc




软件管理:  rpm 
#查询  query
rpm -q 软件名称   #查询某个软件包是否安装
rpm -qa [软件名称]   #all,查看所有已安装软件包
rpm -qf   #file,通过文件找软件包
rpm -ql 软件名称  #list,查看已经安装软件包的文件列表
rpm -qpl 软件包路径  #查看未安装软件包的文件列表
rpm -qi 软件名称     #information,查看软件包信息 
rpm -qpi 软件包路径  #information,查看软件包信息 


#安装
rpm -ivh 软件包路径 ...      #install(安装),verbose(执行过程信息),hash(以#表示安装进度条)


#升级
rpm -Uvh 软件包路径  #update,升级
#升级内核
rpm -ivh 


#卸载
rpm -e 软件名称  #erase






rpm证书: 系统需要导入一个证书,去跟rpm包证书比较,如一致则允许安装
#导入证书:
rpm --import /media/cd/RPM-GPG-KEY-CentOS-6




#作业(在desktop,minimal上都做): 
1.用rpm去安装wireshark,并找出wireshark的命令及用法,尝试着用wireshark去抓包
2.安装lftp,ftp工具




YUM(Yellowdog Updater, Modified)  #用python写的一个基于rpm的包管理器




URL:统一资源定位符,用于描述资源在互联网中的位置
组成:
协议://域名或ip[资源路径]




#先删除默认仓库配置文件
rm -rf /etc/yum.repos.d/* 


在用户端仓库配置文件: /etc/yum.repos.d/*.repo 
#vi /etc/yum.repos.d/local.repo
[local]       #仓库名称(不能用空格)
name=this is a local repo         #仓库描述
baseurl=file:///media/cd      #仓库url
gpgcheck=0        #是(1)否(0)检查证书
gpgkey=URL        #证书路径
enabled=1         #是(1)否(0)启用此仓库,默认开启


#yum clean all   清除上一个仓库缓存文件


yum操作
#选项:
-y   #自动应答,自动yes


#查询
yum repolist    #查看仓库列表
yum list    #查看仓库软件包列表
yum list installed  #查看已经安装的软件包
yum info    #查看软件包信息(rpm -qi)
yum provides  #等于rpm -qf


#安装
yum install   #安装
yum reinstall  #重装


#升级
yum update    #升级
yum upgrade   #升级


#卸载
yum remove    #卸载  


包组管理
#查询
yum grouplist
#安装
yum groupinstall
#卸载
yum groupremove


#图形化相关包组:
"X Window System"  #必装
"Desktop"或 "KDE Desktop"  #选一或选二
#Gnome  KDE  XFCE桌面


#启动图形化:
startx
init 5 


#http yum源
[163]
name=this is a 163 repo
baseurl=http://mirrors.163.com/centos/6/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
enabled=1





#ftp仓库
baseurl=ftp://10.1.1.251/cdrom/




作业2:
1.使用网易仓库作为yum源,安装wireshark
2.在最小化系统安装图形化桌面,安装图形化的wireshark
(3.使用epel的仓库作为yum源安装nginx)




4.Linux 基础知识


运行级别(runlevel)   #用来控制系统启动模式
0     #关机 
1     #单用户模式(用于维护,恢复root密码)
2     #无网络功能的多用户模式
3     #全功能多用户模式(命令行模式)
4     #保留
5     #图形化环境
6     #重启


临时切换运行级别:
init N  (N=0..6) 


永久修改运行级别:  /etc/inittab
id:3:initdefault:  


#变量
本地变量: 只在当前shell中
变量名=值


环境变量: 在当前shell及其子shell中生效
export 变量名=值


#系统常用环境变量:
PATH    #命令的搜索路径
HOME    #用户家目录
普通用户:/home/USERNAME
root: /root


PS1    #命令提示字符
#PS1=[\u@\h \W]\$   
\u   当前用户名
\h   主机名 (www).baidu.com
\H   主机名 (www.baidu.com)
\W   当前工作目录
\w   当前工作目录绝对路径
\$   用户提示字符 (普通用户$,root用户#)
\#   下达第几个命令
\t   时间 HH:MM:SS


#小作业: 将自己的提示字符改为如下格式:
"<第几个命令><当前时间>-> " 
USER  #当前用户名
MAIL  #用户邮箱文件路径(/var/spool/mail/USERNAME)
HOSTNAME  #主机名
HISTSIZE=10000  #历史记录大小
HISTFILESIZE=10000 #历史记录文件大小
LANG      #language,语言编码 (/etc/sysconfig/i18n)
#LANG=zh_CN.UTF-8
#LANG=en_US.UTF-8


history  #查看命令历史  (~/.bash_history存放用户命令历史)
!N   #执行编号为N的命令
!-N  #执行倒数第N跳命令
!String  #执行最近以String开头的命令
!!   #执行上一条命令
ctrl+r   #搜索执行过的命令


#创建用户
useradd USERNAME


#修改用户密码
passwd USERNAME   #只能root才能修改所有人密码,普通用户只能改自己的


#切换用户(switch user) 
su USERNAME              #非登录过程
su -l 或 su - USERNAME  #登录过程


#登录过程:
1./etc/profile
2./etc/profile.d
3.~/.bash_profile
4.~/.bashrc
5./etc/bashrc


#非登录过程:
1.~/.bashrc
2./etc/bashrc


sudo  #授权用户使用哪些命令


#修改sudo配置文件  /etc/sudoers
格式:
USER  WHERE=(WHO)  WHAT
bob   ALL=(root)  ALL




7.Filesystem Hierachy Standard  文件系统层级标准


FHS定义了两层规范:
#一./目录下的文件数据存放规范
dev     #设备文件
#block device块设备(硬盘分区,光盘)
#character device字符设备(终端)
/dev/zero  #零字符设备
#dd if=/dev/zero  of=/tmp/BIGFILE   bs=1M   count=1024
/dev/null  #垃圾桶,吸收任何信息


boot    #引导程序相关文件(引导程序,内核等)
#实现系统基本功能命令
bin     #binary,系统基本命令(普通用户也可用)
sbin    #系统管理相关命令(一般是root用户才能执行)
etc     #各种配置文件
rc.d 
sysconfig 
yum.repos.d 
inittab 
resolv.conf
fstab    #开机自动挂载文件系统


lib     #库文件(*.so.*),和内核模块
lib64   #64位库文件
mnt     #文件系统临时挂载点
media   #可移动介质挂载点(u盘,光盘)   
home    #普通用户家目录
root    #root用户家目录
srv     #服务提供的数据文件目录,现已弃用(转移到/var)
lost+found   #丢失+查找,保存未来的及保存的文件
opt     #第三方软件安装目录,弃用(转移到/usr/local/) 
tmp     #临时文件  
sys     #伪文件系统,系统硬件参数映射文件  
proc    #伪文件系统,内核参数和进程信息文件映射
uptime  #运行时间
cpuinfo #cpu信息
meminfo #内存信息(实时变化)


数字(进程号)目录:  进程相关信息


sys     #内核参数映射文件


selinux  #selinux相关文件
  




#二./usr,/var目录数据存放规范
/usr 
#实现系统扩展功能
bin    #基本命令
sbin   #管理类命令(一些服务器程序)
include #C头文件
lib     #库文件
local   #第三方软件默认安装目录
bin
sbin
lib
include


share   #结构独立数据
man 
doc




/var   #可变数据
run   #进程运行pid文件
spool/mail  #用户邮箱文件
lock   #锁文件m
log    #日志
messages  #系统所有日志
dmesg     #内核启动日志
secure    #认证信息日志
mail.log  #邮件日志


tmp    #系统启动时临时文件




#文件管理相关命令
#查看文件内容(文件,类型为目录文件)
文件:
cat FILE ...  #合并输出多个文件内容
vim FILE      #编译文本文件
head FILE     #查看文件的头10行     
head -n N FILE
head -N FILE
tail FILE     #查看文件的尾10行  
more FILE     #分屏浏览文件内容
less FILE     #分屏浏览文件内容
空格   #向下翻页
b     #向上翻页


文件/目录:
ls [Options] [PATH]
#Options:
-a
-l
-d
-h  #human-readable,人类可读单位
-R  #recursive,递归


#通配符:  在路径中匹配文件名
*    #任意个任意字符
?    #单个任意字符
[]   #匹配字符集
#[12cjfdsa]
#[a-d] [0-9]
#系统规定字符集: 要多套一层中括号[]
[:alpha:] #字母
[:digit:] #数字
[:alnum:] #字母+数字
[:blank:] #空白字符(空格,制表符(tab),换行符)
[:upper:] #大写字母
[:lower:] #小写字母


{}   #命令行展开
touch 
mkdir
#mkdir -p {baidu,tencent,sina}-{sales,market,tech} 
cp
mv
rm 




#创建文件:
文件:
vim
touch FILE   #如文件存在,修改文件时间戳,不存在则创建空文件


目录:
mkdir -p DIR   # -p自动创建父目录


#复制文件: cp
用法:
cp [options] SOURCE... DEST
cp FILE1  FILE2
cp FILE1 FILE2  DIR
cp DIR1  DIR2


#options:
-a   #archive归档,保留文件属性
-r|-R  #recursive,递归
-f     #force,强制
-i     #interactive,交互(覆盖之前提示)
-v     #verbose,显示命令执行过程信息




#移动文件: mv
用法:  
mv  FILE1  FILE2  #重命名功能
mv  FILE... DIR 
mv  DIR1  DIR2
#options: 
-v   #详细过程信息
-f   #强制,忽略-i交互
-i #交互


#删除文件: rm
文件:
rm [options] FILE...
#options:
-r   #递归,用于删除目录
-f   #强制
-i   #交互
-v   #详细信息


目录:
rmdir  #只能删除空目录
rm -r 




作业:
1.清空/tmp目录下的文件,创建目录Redhat,CentOS,Debian,Ubuntu,每个目录下创建4个文件linux1,linux2,linux3,linux4

2.将Redhat目录移动到Ubuntu目录下
3.将CentOS的linux2和linux3移动到Debian目录下并改名为gnu2、gnu3
4.将/boot/grub目录下以数字结尾的所有文件拷贝到/tmp目录下,要求保持其属性信息  
5.将/var/log/, 以maillog开头的所有文件拷贝到/tmp/maillog目录下
6.删除/tmp目录所有文件
7.创建几个文件:   #   *  ?   !  @  .  ..  / -    



深入ext文件系统
文件系统: 明确文件在分区上组织方法和数据结构


#常见文件系统类型:
windows:ntfs,fat16,fat32等 
linux:ext2,ext3,ext4,xfs




#相关术语
superblock #用来存放文件系统整体信息 
dumpe2fs /dev/sda1   显示device中文件系统的超级块和块组信息
block   #存放实际数据
inode   #存放元数据(metadata)  
stat FILE 查看文件的元数据
#文件名
#文件大小
#inode编号
#硬链接数
#权限
#类型
#拥有者
#所属组
#时间戳(atime ctime mtime)
#指向block指针


ls -i  #查看文件的inode编号






#链接:  一种文件复用,一种是硬连接,一种是软链接或符号链接
ln SOURCE DEST      #硬链接(不能对目录做,不能跨文件系统)
-s SOURCE DEST  #软链接,快捷方式(无限制)




#命令:
内建(Builtin): cd echo exit export
外部: ls ifconfig


type  #查看命令类型


file  #查看文件类型
#常见文件类型
-    #普通文件
d    #目录
b    #块设备文件
c    #字符设备
l    #符号链接
p    #pipe,命名管道
s    #socket,套接字文件


df   #查看文件系统磁盘使用率
-T   #Type
-h   #human-readable
 
du   #disk usage,文件磁盘使用率
-s  #summary,汇总,只输出目录总大小
-h




规划:
在sdb上分5个区,每个区大小为500M,采用MBR分区方式,挂载到/mnt/disk1-5目录,
sdb1采用设备文件方式挂载
sdb2采用uuid方式挂载
sdb3采用label方式挂载








#制作文件系统的步骤
1.(确保硬盘有足够空间,确定分区方式)分区
fdisk -l  /dev/sdb 
fdisk -cu /dev/sdb 
d   #删除分区delete a partition 
m   #查看fdisk帮助
n   #新建一个分区,add a new partition 
p   #显示分区表信息,print the partition table
q   #不保存退出quit without saving changes
w   #保存并退出write table to disk and exit
t   #改变分区系统ID,change a partition's system id
l   #列出已知分区类型,list known partition types


#重读分区表
partx -a /dev/sda  两次


2.格式化(制作文件系统)
#mkfs -t FS_TYPE 分区设备文件
mkfs -t ext4 /dev/sda5
mkfs -t ext4 /dev/sda6
mkfs -t ext4 /dev/sda7
mkfs.ext4 /dev/sda5 


3.挂载
mount [options] SOURCE MOUNT_POINT
#options:
-a  #挂载fstab文件中所有未挂载文件系统
-t  #指定挂载设备文件系统类型
-o  #option文件系统挂载选项(多个挂载选项用','号隔开):
defaults  #默认挂载选项包含(rw, suid, dev,  exec,auto, nouser, async, and relatime.)
ro   #readonly,只读
rw   #read-write,读写
sync #同步
async #异步
dev   #解释字符设备和块设备
exec  #是否能够执行(execute)
auto  #能够被mount -a选项挂载
user  #允许普通用户管理文件系统

#其他选项
remount   #原子重挂载
loop      #挂载本地文件,常用于iso镜像文件挂载




#SOURCE:
设备文件: /dev/sda5 
卷标: LABEL=xxx 
UUID: UUID=xxxx
#查看设备UUID:  blkid 设备路径




#卸载: umount DEVICE/MOUNT_POINT
卸载前提:文件系统不能被其他进程占用
查看文件系统被哪个进制占用:  lsof,  fuser -av


4.写入配置文件(/etc/fstab)
DEVICE   MOUNT_POINT  FS_TYPE  FS_MOUNT_OPTIONS dump fsck 
#/dev/sda5       /mnt/disk5      ext4    defaults 0 0
#UUID=49ede8aa-d8bb-4a59-b436-1f91175e9c94  /mnt/disk6 ext4 defaults 0 0
#/dev/sda7       /mnt/disk7      ext4    defaults 0 0




#如何扩展swap分区
free  #查看内存和swap的信息
方 
1.分区
fdisk -cu /dev/sda
2.将分区制作成swap分区
mkswap /dev/sda8
3.挂载 
swapon  /dev/sda8  #挂载
swapon -s  #查看swap分区挂载情况
swapoff /dev/sda8  #卸载
4.写入fstab
/dev/sda8       swap    swap    defaults        0 0


方法2: 使用dd生成大文件
1.用dd生成一个大文件
dd if=/dev/zero of=/root/BIGFILE bs=1M  count=1024
2.将文件制作成swap分区
mkswap /root/BIGFILE 


3.挂载swap
swapon /root/BIGFILE


4.写入fstab
/root/BIGFILE   swap    swap    defaults        0 0


作业:
1.在sdb上分5个区,每个区大小为500M,采用MBR分区方式,挂载到/mnt/disk1-5目录
sdb1采用设备文件方式挂载
sdb2采用uuid方式挂载
sdb3采用label方式挂载
其他分区随意


2.扩展系统swap分区,分别采用fdisk和dd做,分区大小500M,文件大小500M




9.VI编辑器
特点:
不依赖图形化环境
跨平台(windows,mac,unix,linux)
插件丰富
学习难度大


#三个基本模式:
命令模式:(vi打开文件后所处的默认模式)
#功能: 
1.光标移动(大部分命令前可以接数字,代表操作多次)
hjkl  #左上下右
w     #word,按单词移动到单词首字母
W     #word,按空格为标准移动到单词首字母
e     #end,按单词移动到单词尾字母
E     #word,按空格为标准移动到单词尾字母
b     #back,按单词移动,往前移动
B     #word,按空格为标准移动,往前移动
0     #绝对的行首
^     #(拖字符)行首(第一个非空字符)
$     #行尾
gg    #首行  
G     #末行
Ngg   #第N行  
NG    #第N行
:N    #第N行


2.文本内容操作(复制,剪切,粘贴,撤销,还原)
#格式: [数字]+操作命令+移动命令
y   #yank,不能单独使用
5yw
y0
y$
yy   #复制当前行
Nyy  #复制N行


d  #delete,剪切,不能单独使用
dw
5dw
d^
d0
d$
dd   #删除当前行
Ndd  #删除N行


x  #删除当前字符


p   #paste,粘贴
P   #paste,粘贴


u   #undo
ctrl+r  #recover




3.其他模式入口
#插入模式(Insert)
a   #光标移动到当前位置的下一个位置,进入插入模式
A   #光标移动到行末,进入插入模式
i   #光标在当前位置进入插入模式
I   #光标移动到行首,进入插入模式
o   #另起一行进入插入模式
O   #在上一行中另起一行进入插入模式


#替换模式(Replace)
r  #单次替换
R  #进入替换模式 


#选择模式(Visual),之后d剪切,y复制
v    #进入选择模式
V    #进入行选择模式
ctrl+v #进入块选择模式


#窗口模式
ctrl+w,s
ctrl+w,上/下
ctrl+w,o  #关闭其他窗口


#末行模式
:  #进入末行模式


#搜索模式
/  #进入搜索模式
/STRING 
n  #跳转到下一个搜索到的内容
N  #跳转到上一个搜索到的内容


插入模式:(编辑文件内容)




末行模式:设置vi选项,文件操作(保存,不保存,另存为,打开文件等)
#设置vi选项
:set all  #查看vi所有选项
:set ignorecase  #忽略大小写(用于搜索功能) set ic
:set number      #显示行号  set nu
:set autoindent  #自动缩进 set ai
:nohl   #关闭高亮显示
:Nd   #删除第N行
:N    #移动到第N行
:N,Md  #删除第N到M行
:[N,M]s/OLD/NEW/gc    #搜索和替换  g 全局, c 交互


#文件操作
:w  #保存
:w FILE  #另存为到文件
:q  #退出
:wq #保存并退出
:x  #保存并退出
:X  #将文件加密
:q! #不保存退出
:e FILE #打开文件




#使vi选项永久生效
vim ~/.vimrc
set nu
set ai
set ic


10.用户-组-权限管理


用户:每一个用户系统分配唯一的id号UID(0~65535),每一个用户必须属于一个基本的组,还可以加入其他组,用户必须设置密码才能登录
#分类
普通用户
uid>=500


系统用户    #用于运行系统进程,不需要登录系统
0<uid<500


root用户
uid=0


组:每个组系统分配唯一的id号GID,一个组可以有多个成员
#按照uid分类:
普通组
uid>=500


系统组
0<gid<500


root组
gid=0


#按照作用:
基本组:   每个用户必须要有的组
附加组:   一个可以属于多个附加组


#三个文件
/etc/passwd   #存放用户信息
#   root : x   : 0 : 0 : root : /root : /bin/bash
    用户名: 密码 :UID:GID:描述信息:家目录: 登录shell


创建用户:  
useradd [options] USERNAME  #自动分配uid,gid,自动创建家目录(/home/USERNAME),拷贝配置文件(/etc/skel)到家目录,邮箱文件(/var/spool/mail/USERNAME),创建一个与用户名同名的组做为用户的基本组
#options:
-u UID  #指定UID 
-g GID  #指定基本组的GID
-G GID  #指定附加组的GID
-d DIR  #指定家目录
-s SHELL #指定用户登录shell
#/bin/bash (默认)
#/sbin/nologin  不允许登录


id [USERNAME]  #查看用户信息
id -u   #查看uid
id -un  #查看当前用户用户名 


删除用户:  userdel  USERNAME  #不会删除家目录和邮箱文件
 userdel -r USERNAME  #同时删除家目录和邮箱文件


修改用户信息:  usermod  #对已创建用户修改信息
-u
-g
-G
-s
-d 




/etc/group    #存放组信息
#  root : x   : 0 : 
   组名 : 保留:  GID :  组成员  


groupadd -g GID GROUPNAME
groupdel GROUPNAME 




/etc/shadow   #存放密码信息
#root:$6$T2WdGnY0CdckQnBWQe0:17296:0:99999:7:::
passwd USERNAME  #修改用户密码(root用户可以修改任何人密码通过passwd USERNAME,普通用户只能修改自己密码通过passwd


echo "密码" | passwd --stdin USERNAME #无交互式修改密码




#用户访问资源,用户对于资源来说有三种访问类型:
进程---> 资源,进程在访问资源时,进程会携带用户的uid和gid和groups的gid,与资源uid和gid对比顺序:
#拥有者(user)
如果进程uid和资源的uid一致,用户是资源的拥有者,赋予用户资源拥有者权限
#所属组(group)
如果进程gid与资源gid一致,说明用户是资源的所属组,赋予用户资源所属组权限
#其他人(other)
如果进程uid和gid都不匹配,说明用户对于资源来说属于其他人,赋予用户其他人权限


chown USER[.GROUP] FILE   #即可以改拥有者,又可以改所属组


chgrp GROUP FILE   #改文件所属组




#权限(Permission)  
#文件
r   #readable,可读,可以读取文件内容,cat,vim,more,less
w   #writable,可写,可以编辑文件内容
x   #excutable,可执行,可以执行文件内容(用于可执行文件)


#目录
r   #readable,可读,可以读取目录内容,ls
w   #writable,可写,可以修改目录内容,rm,mv,rename,touch等
x   #excutable,可执行,可以进入目录, cd rm cp


ls -l  #查看文件属性
  rw-    r--     r--
  拥有者  所属组  其他人




chmod  #修改权限(只能root用户操作,普通用户只能改属于自己的文件)
#字符表示法:
chmod        FILE
u  + r 
g  - w 
o  = x
a    s|t


#chmod u+x FILE 
#chmod g+w FILE
#chmod u=rwx FILE
#chmod a+x FILE  = chmod ugo+x FILE


#数字表示法
r w x        十进制
0 0 0  ---    0
1 1 1  rwx    7


chmod 777 FILE   #rwx rwx rwx
chmod 664 FILE   #rw- rw- r--




umask    #权限掩码,控制用户去创建文件和目录的默认权限


#用户去创建文件的默认权限: 原始权限-umask=默认权限(不要用数字相减)
文件的原始权限: 666  rw- rw- rw-
普通用户umask: 002  --- --- -w-
664   rw- rw- r--


root用户umask: 022 --- -w- -w-
 644


umask=033  --- -wx -wx
#用户创建目录的默认权限:
目录的原始权限: 777  rwx rwx rwx  
普通用户umask: 002  --- --- -w-
 775  rwx rwx r-x
root用户umask: 022  --- -w- -w-
 755




#特殊权限:
suid(set uid)  #(只能对可执行文件),使用户可以临时取得文件拥有者的权限
sgid(set gid)  
#(对可执行文件)使用户临时取得文件所属组的权限


#(对目录)则用户在此目录中创建的文件所属组为此目录的所属组
sbit(sticky bit)  #黏贴位(只能对目录做),在目录下,用户无法删除其他用户文件




#扩展权限(Access Control List):设置特定用户权限


getfacl  #查看
setfacl -m u:USER:PERM  #设置
setfacl -x u:USER   #删除扩展权限