linux基础知识

文章目录

磁盘

在这里插入图片描述
扇区(sector):磁盘的最小物理储存单位,通常为512bytes与4Kbytes;
磁道(track):同一个同心圆的扇区组合成的圆;
磁柱(cylinder):所有磁盘盘上面的同一个磁道组成磁柱;

分区

通常所说的"硬盘分区"就是指修改磁盘分区表,它定义了"第n个磁盘块是从第x个柱面到第y个柱面(分区就是分磁柱)".因此,当系统要读取第n个磁盘块时,就是去读硬盘上第x个柱面到第y个柱面的信息。
两种分区表格式:

  1. MSDOS(windos磁盘处理方式的dos)/MBR(Master Boot Record)
    主要启动记录区(Master Boot Record):有446个字节,用于存放引导代码,可以安装开机管理程序的地方,即bootloader。
    分区表(partition table):有64个字节,用于存放磁盘分区表.其中,每个分区的信息需要用16个字节来记录。因此,一个硬盘最多可以有4个分区,这4个分区称之为主分区和扩展分区(extended)。
    结束标志:55AA占2字节,方便校验硬盘正确性,4位(bit)二进制可以表示一个16进制数字,2字节(byte)是16位,正好可以表示4个16进制数字 55AA = 0101 0101 1010 1010 网上对55aa的解释
    稍微具体点的windows分区
    标准4个分区示意图:
    在这里插入图片描述
    包含扩展分区(重新划分为逻辑分区)示意图:
    在这里插入图片描述

  2. GUID partition table ,GPT磁盘分区表,GPT分区已经没有延伸跟逻辑分区槽的概念,可以想象成全部是主分区;
    LBA区块(预设512bytes):逻辑区块地址(Logical Block Address);
    在这里插入图片描述
    在这里插入图片描述
    LBA0(MBR相容区块):这个兼容区块也分为两部分,一个是跟之前一样的446bytes相似的区块,储存了第一阶段的开机管理程序;而第二部分由原来的分区表记录换成了记录特殊标志的分区,用来表示此磁盘为GPT格式之意;
    LBA1(GPT 表头记录):这个部分记录了分区表本身的位置与大小,同时记录了备份用的GPT分区(就是前面谈到的在最后的34个LBA区块)防止的位置,同时放置了分区表的检验机制码(CRC32),操作系统可以根据这个检验码来判断GPT是否正确,若有错误,还可以通过这个记录区来去的备份的GPT(最后的备份区块),来恢复GPT的正常运作;
    LBA2-33(实际记录分区信息处):从LBA2区块开始,每个LBA都可以记录4个分区记录,所以默认可以记录4*32=128个分区记录;因为每个LBA有512bytes,所以每个记录用128bytes的空间,除了每个记录所需要的标识符与相关记录之外,GPT在每笔记录中分别提供了64bits来记载开始/结束扇区号码

格式化

每种操作系统所设定的文件属性/权限并不相同,为了存放这些文件所需的数据,需要将分区槽格式化,已成为操作系统能够利用的文件系统格式;
Inode:储存文件元信息的区域,并能通过inode找到具体文件数据存放区域block;
Block:由多个扇区组成的快;

Data block(数据块)

用来放置文件内容数据,支持的有1K,2K,4K;

Inode table(inode表格)

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
为了记录大型文件,每个block需要占inode中的4byte,如果400M的文件每个block4K则需要十万个block记录,这样一个inode的128byte就不够,于是就出现了12个直接,一个间接,一个双间接,一个三间接

Superblock(超级区块)

整个记录filesystem相关信息的地方
Block与inode的总量
未使用与已使用的inode/block数量
Block与inode的大小(bock为1,2,4k,inode为128或者256bytes)
Filesystem的挂在时间、最近一次写入的时间,最近一次校验磁盘时间等;
一般来说superblock的大小为1K

Filesystem Description(文件系统描述说明)

这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间

block bitmap(区块对照表)

辅助用来判断哪些block是空;

Inode bitmap(inode对照表)

辅助判断哪些inode是空的;

Dumpe2fs:查询ext 家族superblock信息的指令

Xfs_info用来观察xfs文件系统

文件目录

文件系统格式化好了之后就可以创建目录或者文件,文件系统会分配一个inode与至少一个block

由于文件名等是在block中,所以只有inode中判断权限通过之后才能进入block操作;

挂载点

挂载:将文件系统与目录树结合的动作成为挂载;
挂载点:一定是目录,该目录为进入该文件系统的入口;
疑问:三个挂载点,/,/boot,/home,boot跟/是两个挂载点,但是boot又是在/下面,怎么理解?
解答:按照目录树结构,/所在的位置为最高父节点,也是一个文件系统的入口,针对该文件系统来说,/的inode为128(XFS filesystem最顶层目录一般128),然后其中有两个目录boot跟home分别对应另外两个文件系统的入口,/boot跟/home来说针对各自的文件系统的inode也为128;
所以其实如果找/boot目录,实际上是先进入/的文件系统中然后找到boot目录,然后进入boot的文件系统,实现从一个文件系统到另外一个文件系统的访问;

Df:查看磁盘容量情况 du:通常用来评估目录所占容量

常用df -hl:用来显示磁盘空间大小

free(显示内存使用情况)

free -h

热键

tab

  1. 按tab键的地方如果是命令后面,则是命令补全功能;
  2. 如果是文件后面,则是文件补全功能;
  3. 某些特殊指令下面,可能是参数或者选项补齐功能;
  4. 按两下tab会将以若干字符开头的命令或者文件都显示出来;

Ctrl-c

中断目前程序;

Ctrl-d

快速离开文字接口相当于exit;

知识点

重要的目录

/etc/issue : 欢迎讯息的内容
/usr/share/man/(usr/local/man):man page 显示的内容的文件

目录结构

在这里插入图片描述

环境变量

查看环境变量

[root@study tmp]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

注意事项

  1. 一般命令在任何地方都能使用是因为命令都在环境变量中,因此从环境变量配置的路径中都能找到,因此命令都能使用;
  2. 假设把ls命令从/bin中移到/root中:
    1. 不能在任何地方直接使用ls命令;
    2. 因为ls命令确实存在,可以使用绝对路径或者相对路径来调用/root/ls或者在目录下./ls
    3. 将/root目录加到PATH中 ${PATH}:/root,这样就可以在任何地方调用ls
  3. 多个相同的指令,在PATH先找到哪个就执行哪个;
  4. 不同身份的使用者对应的PATH预设不同,默认能使用的指令也不同;
  5. “.”目录最好不要加入PATH中;

基础命令

系统命令

Locale(更改语种)

  1. 由于locale是用来显示影响显示结果的语系变量,并且需要在其他子程序执行使用,因此LC_ALL需要用export放到环境变量中,LANG直接赋值使用即可;
  2. locale把按照所涉及到的使用习惯的各个方面分成12个大类,这12个大类分别是:
    1. 语言符号及其分类(LC_CTYPE)
    2. 数字(LC_NUMERIC)
    3. 比较和习惯(LC_COLLATE)
    4. 时间显示格式(LC_TIME)
    5. 货币单位(LC_MONETARY)
    6. 信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)
    7. 姓名书写方式(LC_NAME)
    8. 地址书写方式(LC_ADDRESS)
    9. 电话号码书写方式(LC_TELEPHONE)
    10. 度量衡表达方式 (LC_MEASUREMENT)
    11. 默认纸张尺寸大小(LC_PAPER)
    12. 对locale自身包含信息的概述(LC_IDENTIFICATION)。
  3. 设定locale就是设定12大类的locale分类属性,即 12个LC_。除了这12个变量可以设定以外,为了简便起见,还有两个变量: LC_ALL和LANG。它们之间有一个优先级的关系: LC_ALL>LC_>LANG,可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
    当LANG设置了值之后,其他LC_*都没有值,但是用locale命令都会以LANG为默认值显示;
    当LC_ALL设置了值之后,默认值都会以LC_ALL的这取代;
    从上面可以看出,LANG是LC_*的默认值,而LC_ALL比LC_*的优先级别高,设置完LC_ALL之后,会强制重置LC_*各个值,如果不将LC_ALL重新设置为空,则再无法设置LC_*的单个值 。

Date(显示时间)

命令简介

date 根据给定格式显示日期或设置系统日期时间,指令所在路径:/bin/date

命令语法

date [OPTION]… [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]

参数描述
-d显示字符串描述的时间
-f显示文件中每行时间
-r显示文件的最后修改时间
-s设置当前时间
注意事项
  1. date ‘+%F %T’–>注意这里的格式如果中间有空格需要用引号,不然会报错;
  2. 生产中使用``反引号或者$()来使用变量
[root@Andy andy]# tar zcvf etc-$(date +%F).tar.gz /etc
[root@Andy andy]# tar zcvf etc-`date +%F`.tar.gz /etc
  1. 下面两种方式都可以增加或减少日期
[huzd@study ~]$ date -d '+1day' '+%F %T'
2018-06-10 13:44:59
[huzd@study ~]$ date '+%F %T' -d '+3day'
2018-06-12 13:45:44
[huzd@study ~]$ 

Cal(显示日历指令)

命令简介

显示日历

命令语法

cal [month] [year]

参数描述
-j用天数来显示当前日历
-m日历以周一为第一天,默认周日

Bc (计算器)

1、bc进入计算器
2、Scale可以定义精度;
3、Quit离开计算器环境

Sync(数据同步写入磁盘)

Shutdown(关机)

命令描述

关机命令

命令语法
参数描述
-k不是真关机,只是警告
-r将系统服务停止掉之后,重新启动
-h将系统服务停止掉之后,关机
-c取消已经在进行的shutdown命令内容
shutdown -r +时间表示多长时间之后重启,now表示现在
注意事项

与poweroff,halt,reboot的区别

  1. halt 其實跟 shutdown 沒多大分別,只不過 shutdown 在關機時會把系統的服務都關閉之後,才關閉電腦,而 halt 指令則允許不管系統的狀態為何,直接停止電腦的運作
  2. poweroff 指令也是類似的狀況,它也允許你不管系統的狀況,直接把電腦的電源切斷
  3. 雖然系統有提供這樣的功能,但是其實這些功能在一般的狀況根本用不到,除非是系統真的當機,不然使用 shutdown 來關機會比較安全
  4. 這裡的停止運作(halt)與關閉電源(power off)是有差異的,停止運作是指停止電腦上所有 CPU 的運作,這時候螢幕上應該會出現類似「System halted」的字眼,然後就停住了(電源還是開著的),而關閉電源(power off)就是會送出 ACPI 指令通知 PSU 關閉電腦的電源。

文件命令

cd(变换目录)

命令语法

cd [路径]

注意事项
  1. 如果cd后面什么都没加,也是跟cd ~ 一样回到用户家目录;

pwd(显示目前所在目录)

命令语法

pwd [-P]

参数描述
-P用实际路径显示,而非连接路径

mkdir(建立新目录)

命令语法

mkdir [-mp] [xyz] 目录名称

参数描述
-m直接在创建目录的时候设置权限,xyz代表权限
-p递归建立目录

rmdir(删除目录)

命令语法

rmdir [-p] 目录

参数描述
-p递归删除目录
注意事项
  1. 如果是需要删除非空目录,需要用 [ \ ]rm -r 目录

ls (文件与目录检视)

命令语法

ls [-选项] 目录或者文件

参数描述
-a将全部文件列出来,包括隐藏档
-d列出目录的信息,而不是目录内容
-i列出 inode
-l将文件详细信息列出来
-n列出UID与GID而非使用者与群组
-R将目录及子目录的内容全部显示出来
-S将文件按照容量大小排序
-t按照时间排序
- -colornever:不依据文件特性显示颜色,always: 显示颜色,auto: 让系统自行依据设定来判断是否显示颜色
- -full-time以完整形式显示时间(年月日时分)
- -timeatime:输出文件访问时间,ctime:输出文件属性改变时间,而非mtime:文件内容变更时间
注意事项:
  1. 可以直接用 ll 代替 ls -l
[root@study tmp]# alias ll
alias ll='ls -l --color=auto'

cp(复制文件或目录)

命令语法

cp [选项] 来源文件 目标文件
或者 cp [选项] 来源文件1 来源文件2 … 目标目录

参数描述
-a相当于 -dr --preserve=all 的意思
-d若来源为链接文件,则复制链接文件属性而非文件本身,简单说就是不加-d就是复制链接文件的源文件,加上-d就是复制链接文件
-f强制,若目标已经存在且无法开启,则删除在尝试复制
-i若目标已经存在,则先进行询问
-l建立硬链接,而非复制文件
-p复制文件连同属性一起复制,而非使用文件默认属性
-r递归复制,用于目录复制
-s建立符号链接
-u目标文件比源文件旧,或者目标文件不存在,才进行更新
- -preserve=all除了-p的权限相关参数之外,还加入了SELinux,links,xattr等属性;
注意事项:
  1. 如果来源文件有两个以上,则目标文件必须是目录;
  2. 由于一般用户权限不足,不能随意修改文件的所属用户跟群组,所以即使用-a也不能将文件的权限复制;
  3. 复制时注意:
    1. 是否需要保留原文件信息?-p,–preserve=all,-d,-a
    2. 是否是链接文件复制?-d
    3. 源文件是否为目录? -r
  4. cp 等价于 cp -i
[root@study tmp]# alias cp
alias cp='cp -i'

scp(远程拷贝)

scp [-12BCpqrv] [-l limit] [-o ssh_option] [-P port] [[user@]host1:]file1 … [[user@]host2:]file2
选项说明:

-1:使用ssh v1版本,这是默认使用协议版本
-2:使用ssh v2版本
-C:拷贝时先压缩,节省带宽
-l limit:限制拷贝速度,Kbit/s.
-o ssh_option:指定ssh连接时的特殊选项,一般用不上。偶尔在连接过程中等待提示输入密码较慢时,可以设置GSSAPIAuthentication为no
-P port:指定目标主机上ssh端口,大写的字母P,默认是22端口
-p:拷贝时保持源文件的mtime,atime,owner,group,privileges
-r:递归拷贝,用于拷贝目录。注意,scp拷贝遇到链接文件时,会拷贝链接的源文件内容填充到目标文件中(scp的本质就是填充而非拷贝)
-v:输出详细信息,可以用来调试或查看scp的详细过程,分析scp的机制

rm (移除文件或者目录)

命令语法

rm [选项] 文件

参数描述
-f强制删除,忽略不存在的文件,不会警告
-i删除前询问
-r递归删除
注意事项
  1. 级联删除非空目录:
    方法1:
    [root@study tmp]# rm -rf test
    
    方法2:
    [root@study tmp]# \rm -r test
    
    这里用\来取消alias指定选项 也就是说,默认rm等价于rm -i,但是用\代表只是rm,不用-i,即去掉了询问,然后加上-r级联删除;
  2. rm 等价于 rm -i
[root@study tmp]# alias rm
alias rm='rm -i'
  1. 如果需要删除带“-”的文件
[root@study tmp]# touch -aa
touch: 缺少了文件操作数
Try 'touch --help' for more information.
[root@study tmp]# touch ./-aa
[root@study tmp]# ls
-aa
ssh-ULPOolaEwAab
systemd-private-007886d7579b4ae29b75f1dcbac445db-colord.service-B22JP8
systemd-private-007886d7579b4ae29b75f1dcbac445db-cups.service-yJGQed
systemd-private-007886d7579b4ae29b75f1dcbac445db-rtkit-daemon.service-gg9riA
systemd-private-007886d7579b4ae29b75f1dcbac445db-vgauthd.service-a1bWH2
systemd-private-007886d7579b4ae29b75f1dcbac445db-vmtoolsd.service-SZvYaj
test
tracker-extract-files.1000
[root@study tmp]# rm -aa
rm:无效选项 -- a
Try 'rm ./-aa' to remove the file "-aa".
Try 'rm --help' for more information.
[root@study tmp]# rm ./-aa
rm:是否删除普通空文件 "./-aa"?y

这里创建或者删除 -aa这种文件还有一种方法是touch – -aa或者rm – -aa,其中 - - 代表 终止选项列表
意思就是- -之后接的-aa不当成指令;

mv(移动文件与目录,更名)

命令语法

mv [选项] 源文件 目标文件
或者 mv [选项] 源文件1 源文件2 … 目标目录

参数描述
-f强制覆盖,如果目标文件已经存在,不询问直接覆盖
-i目标文件存在时,询问是否覆盖
-u目标文件比源文件旧,才用源文件更新目标文件
注意事项
  1. 与cp不同的地方是,cp指令执行完之后,源文件还在,mv指令执行之后,源文件不在了,因此,可以用来重命名;

basename(取文件名)/dirname(取路径名)

示例
[root@study tmp]# basename ./tmp/test100/test1
test1
[root@study tmp]# dirname ./tmp/test100/test1
./tmp/test100
[root@study tmp]# 
注意事项
  1. 上面示例中test100目录跟test1并不存在,但是还是能用命令取到,这里只是截取命令字面路径而已;

cat(输出文件内容)

命令语法

cat [OPTION]… [FILE]…
选项说明
-n:显示所有行的行号
-b:显示非空行的行号
-E:在每行行尾加上$符号
-T:将TAB符号输出为"^I"
-s:压缩连续空行为单个空行

tac(与cat相反输出)

head(打印前几行)

命令语法
head [-n num] | [-num] [-v] filename
-n:显示前num行;如果num是负数,则显示除了最后|num|(绝对值)行的其余所有行,即显示前"总行数 - |num|"
-v:会显示出文件名

tail(反向输出)

命令语法
tail [OPTION]... [FILE]...
选项说明:
-n:输出最后num行,如果使用-n +num则表示输出从第num行开始的所有行
-f:监控文件变化
--pid=PID:和-f一起使用,在给定PID的进程死亡后,终止文件监控
-v:显示文件名

more/less(输出内容)

按页显示文件内容。使用more时,使用/搜索字符串,按下n或N键表示向下或向上继续搜索。使用less时,还多了一个搜索功能,使用?搜索字符串,同样,使用n或N键可以向上或向下继续搜索。

which(显示二进制或脚本全路径)

whereis(找出二进制文件、源文件和man文档文件)

whatis(列出给定命令(并非一定是命令)的man文档信息)

locate(从库中查找)

默认库/var/lib/mlocate/mlocate.db

find(查找)

命令语法
  1. find 路径 -name basename:表示从某个路径下查找名称为basename的文件,注意只是basename,不包含dirname,意味着除非名称本身含有/符号,否则匹配不到内容;
  2. find 路径 -path dirname+basename:想要在指定目录下搜索某目录中的某文件,应该使用-path而不是-name。
  3. find 路径 -type f/d/l -name ‘a.sh’:-type表示文件类型,一般有三种:f表示文件,d表示目录,l表示链接;
  4. find 路径 -atime/ctime/mtime -3 -name ‘a.sh’:根据时间戳来查找
  5. find 路径 -size +100k -name ‘a.sh’:根据文件大小来找
  6. find 路径 -perm -0700 -name ‘a.sh’:根据文件的权限来找;

用户命令

相关文件信息

/etc/group/:用户组信息,其内容结构为组名:占位符:gid:用户(逗号分隔)
/etc/gshadow/:用户组密码信息
/etc/passwd/:linux系统中用户信息,其内容结构为 用户名:x:uid:gid:用户注释信息:家目录:使用的shell类型
/etc/shadow:存放的是用户的密码信息,其内容结构为:

第一列:用户名。
第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。
①.该列留空,即"::",表示该用户没有密码。
②.该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的,如ssh key的方式,su的方式。
③.该列为"*",即":*:",也表示该用户被锁,和"!"效果是一样的。
④.该列以"!""!!"开头,则也表示该用户被锁。
⑤.该列为"!!",即":!!:",表示该用户从来没设置过密码。
⑥.如果格式为"$id$salt$hashed",则表示该用户密码正常。其中$id$的id表示密码的加密算法,$1$表示使用MD5算法,$2a$表示使用Blowfish算法,"$2y$"是另一算法长度的Blowfish,"$5$"表示SHA-256算法,而"$6$"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。$5$和$6$这两种算法的破解难度远高于MD5。$salt$是加密时使用的salt,$hashed才是真正的密码部分。
第三列:从197011日到上次密码修改经过的时间(天数)。通过计算现在离197011日的天数减去这个值,结果就是上次修改密码到现在已经经过了多少天,即现在的密码已经使用了多少天。
第四列:密码最少使用期限(天数)。省略或者0表示不设置期限。例如,刚修改完密码又想修改,可以限制多久才能再次修改
第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,用户将不能修改密码。
第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。
第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。
第八列:帐号过期时间。从197011日开始计算天数。设置为空帐号将永不过期,不能设置为0。不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,修改密码重设密码都无法使用该帐号。
第九列:保留字段。

/etc/skel:骨架目录,骨架目录中的文件是每次新建用户时,都会复制到新用户家目录里的文件。默认只有3个环境配置文件,可以修改这里面的内容,或者添加几个文件在骨架目录中,以后新建用户时就会自动获取到这些环境和文件。
/etc/login.defs:用户账号限制信息,如果跟/etc/shadow中的设置重复,则以shadow中的为准
/etc/default/useradd:创建用户时的默认配置,useradd -D就是修改此文件内容

useradd

useradd [options] login_name
选项说明:
-b:指定家目录的basedir,默认为/home目录
-d:指定用户家目录,不写时默认为/home/user_name
-m:要创建家目录时,若家目录不存在则自动创建,若不指定该项且/etc/login.defs中的CREATE_HOME未启用时将不会创建家目录
-M:显式指明不要创建家目录,会覆盖/etc/login.defs中的CREATE_HOME设置

-g:指定用户主组,要求组已存在
-G:指定用户的辅助组,多个组以逗号分隔
-N:明确指明不要创建和用户名同名的组名
-U:明确指明要创建一个和用户名同名的组,并将用户加入到此组中

-o:允许创建一个重复UID的用户,只有和-u选项同时使用时才生效
-r:创建一个系统用户。useradd命令不会为此选项的系统用户创建家目录,除非明确使用-m选项
-s:指定用户登录的shell,默认留空。此时将选择/etc/default/useradd中的SHELL变量设置
-u:指定用户uid,默认uid必须唯一,除非使用了-o选项
-c:用户的注释信息

-k:指定骨架目录(skeleton)
-K:修改/etc/login.defs文件中有关于用户的配置项,不能修改组相关的配置。设置方式为KEY=VALUE,如-K UID_MIN=100
-D:修改useradd创建用户时的默认选项,就修改/etc/default/useradd文件
-e:帐户过期时间,格式为"YYYY-MM-DD"
-f:密码过期后,该账号还能存活多久才被禁用,设置为0表示密码过期立即禁用帐户,设置为-1表示禁用此功能
-l:不要将用户的信息写入到lastlog和faillog文件中。默认情况下,用户信息会写入到这两个文件中

useradd -D [options]
修改/etc/default/useradd文件
选项说明:不加任何选项时会列出默认属性
-b, --base-dir BASE_DIR
-e, --expiredate EXPIRE_DATE
-f, --inactive INACTIVE
-g, --gid GROUP
-s, --shell SHELL

newusers(批量新增用户)

命令语法

newusers用于批量创建或修改已有用户信息。在创建用户时,它会读取/etc/login.defs文件中的配置项。
newusers [options] [file]
newusers命令从file中或标准输入中读取要创建或修改用户的信息,文件中每行格式都一样,一行代表一个用户。格式如下:

pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell

各列的意义如下(跟/etc/passwd格式一致):
pw_name:用户名,若不存在则新创建,否则修改已存在用户的信息
pw_passwd:用户密码,该项使用明文密码,在修改或创建用户时会按照指定的算法自动对其进行加密转换
pw_uid:指定uid,留空则自动选择uid。如果该项为已存在的用户名,则使用该用户的uid,但不建议这么做,uid应尽量保证唯一性
pw_gid:用户主组的gid或组名。若给定组不存在,则自动创建组。若留空,则创建同用户名的组,gid将自动选择
pw_gecos:用户注释信息
pw_dir:指定用户家目录,若不存在则自动创建。留空则不创建。
:注意,newusers命令不会递归创建父目录,父目录不存在时将会给出信息,但newusers命令仍会继续执行
:以完成创建剩下的用户,所以这些错误的用户家目录需要手动去创建。
pw_shell:指定用户的默认shell
newusers [options] [file]
选项说明:
-c:指定加密方法,可选DES,MD5,NONE,SHA256和SHA512
-r:创建一个系统用户

groupadd(增加群组)

命令语法

groupadd [options] group
选项说明:
-f:如果要创建的组已经存在,默认会错误退出,使用该选项则强制创建且以正确状态退出,只不过gid可能会不受控制。
-g:指定gid,默认gid必须唯一,除非使用了-o选项。
-K:修改/etc/login.defs中关于组相关的配置项。配置方式为KEY=VALUE,例如-K GID_MIN=100 -K GID_MAX=499
-o:允许创建一个非唯一gid的组
-r:创建系统组

passwd(修改密码)

命令语法

passwd options [username]
选项说明:
-l:锁定指定用户的密码,在/etc/shadow的密码列加上前缀"!“或”!!"。这种锁定不是完全锁定,使用ssh公钥还是能登录。要完全锁定,使用chage -E 0来设置帐户过期。
-u:解锁-l锁定的密码,解锁的方式是将/etc/shadow的密码列的前缀"!“或”!!“移除掉。但不能移除只有”!“或”!!"的项。
–stdin:从标准输入中读取密码
-d:删除用户密码,将/etc/shadow的密码列设置为空
-f:指定强制操作
-e:强制密码过期,下次登录将强制要求修改密码
-n:密码最小使用天数
-x:最大密码使用天数
-w:过期前几天开始提示用户密码将要过期
-i:设置密码过期后多少天,用户才过期。用户过期将被禁用,修改密码也无法登陆。

chpasswd(批量修改密码)

命令语法

以批处理模式从标准输入中获取提供的用户和密码来修改用户密码,可以一次修改多个用户密码。也就是说不用交互。适用于一次性创建了多个用户时为他们提供密码。
chpasswd [-e -c] “user:passwd”
-c:指定加密算法,可选的算法有DES,MD5,NONE,SHA256和SHA512
user:passwd为用户密码对,其中默认passwd是明文密码,可以指定多对,每行一个用户密码对。前提是用户是已存在的。
-e:passwd默认使用的是明文密码,如果要使用密文,则使用-e选项。参见man chpasswd

示例
shell> cat /tmp/passwdfile
zhangsan:123456
lisi:123456

shell> chapasswd -c SHA512 </tmp/passwdfile

userdel(删除用户)

命令语法

userdel [options] login_name
-r:递归删除家目录,默认不删除家目录。
-f:强制删除用户,即使这个用户正处于登录状态。同时也会强制删除家目录。

usermod (修改用户)

命令语法

usermod [options] login
选项说明:
-l:修改用户名,仅仅只是改用户名,其他的一切都不会改动(uid、家目录等)
-u:新的uid,新的uid必须唯一,除非同时使用了-o选项
-g:修改用户主组,可以是以gid或组名。对于那些以旧组为所属组的文件(除原家目录),需要重新手动修改其所属组
-m:移动家目录内容到新的位置,该选项只在和-d选项一起使用时才生效
-d:修改用户的家目录位置,若不存在则自动创建。默认旧的家目录不会删除
如果同时指定了-m选项,则旧的家目录中的内容会移到新家目录
如果当前用户家目录不存在或没有家目录,则也不会创建新的家目录
-o:允许用户使用非唯一的UID
-s:修改用的shell,留空则选择默认shell
-c:修改用户注释信息

-a:将用户以追加的方式加入到辅助组中,只能和-G选项一起使用
-G:将用户加入指定的辅助组中,若此处未列出某组,而此前该用户又是该组成员,则会删除该组中此成员

-L:锁定用户的密码,将在/etc/shadow的密码列加上前缀"!“或”!!"
-U:解锁用户的密码,解锁的方式是移除shadow文件密码列的前缀"!“或”!!"
-e:帐户过期时间,时间格式为"YYYY-MM-DD",如果给一个空的参数,则立即禁用该帐户
-f:密码过期后多少天,帐户才过期被禁用,0表示密码过期帐户立即禁用,-1表示禁用该功能

groupmod(群组修改)

id(获取uid,gid,groups)

users(查看当前正在登陆的用户名)

last(查看最近登录的用户列表)

其实last查看的是/var/log/wtmp文件

who/w(查看有谁登陆过)

lastlog(查看登录的来源IP)

su(切换用户或以指定用户运行命令)

命令语法
su [options...] [-] [user [args...]]
选项说明:
-c command:使用-c选项传递要指定的命令到shell上执行。使用-c执行命令会为每个su都分配新的会话环境
-, -l, --login:启动shell作为登录的shell,模拟真正的登录环境。它会做下面几件事:
                1.清除除了TERM外的所有环境变量
                2.初始化HOME,SHELL,USER,LOGNAME,PATH环境变量
                3.进入目标用户的家目录
                4.设置argv[0]为"-"以便设置shell作为登录的shell
                  使用--login的su是交互式登录。不使用--login的su是非交互式登录(除不带任何参数的su外
-m, -p, --preserve-environment:保留整个环境变量(不会重新设置HOME,SHELL,USER和LOGNAME),
                                保留环境的方法是新用户shell上执行原用户的各配置文件,如~/.bashrc。
                                当设置了--login时,将忽略该选项
-s SHELL:运行指定的shell而非默认shell,选择shell的顺序优先级如下:
                1.--shell指定的shell
                2.如果使用了--preserve-environment,选择SHELL环境变量的shell
                3.选项目标用户在passwd文件中指定的shell
                4./bin/sh

chgrp (改变群组)

命令语法

chgrp [-R] group file

参数描述
-R递归更新
注意事项

在/tmp中普通用户不能更改群组,一般需要root用户

chown(更改用户)

命令语法

chown [-R] 账号名称 [:群组] file

参数描述
-R递归更新

chmod(更改权限)

命令语法
  1. 方式一:利用数字
    chmod [-R] xyz file
参数描述
xyz表示的是r w x:4 2 1,例如7=4+2+1,代表拥有rwx权限
-R递归更新
  1. 方式二:利用字母
    chmod [ugoa] [+ - =] [rwx] file
参数描述
ugoau:user,g:group,o:other,a(all):代表三种文件属性,例如:chmod a=rw text.txt,代表设置text.txt的三种属性为rw;
示例

在这里插入图片描述

注意事项
  1. 权限对文件的意义:
    1. r:可读取文件内容
    2. w:可编辑文件内容
    3. x:文件具有可执行权限;
  2. 权限对目录的意义:
    1. r:可读取目录内的文件列表;
    2. w:可以更改文件列表的权利
      1. 建立新文件
      2. 删除文件
      3. 更改文件名称
      4. 调整该目录内的文件位置
    3. x: 用户是否能进入该目录
    4. 总的来说
组件rwx
文件读取文件内容修改文件内容文件具有执行权利
目录读取文件列表修改文件列表用户具有进入目录的权利
  1. 文件属性
    在这里插入图片描述
  2. 只有 root才能修改文件权限,普通用户不能修改;

umask(设置权限补码)

文件默认权限:-rw-rw-rw-(666)
目录默认权限:drwxrwxrwx(777)
普通用户umask为:0002

[huzd@localhost ~]$ umask
0002

那么用普通用户创建文件默认权限为0666-0002=0664,同理目录权限为775
系统管理员umask为:0022

[root@localhost ~]# umask
0022

那么用系统管理员创建文件默认权限为0666-0022=0644,同理目录权限为755

suid/sgid/sbit

suid

当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简程SUID。

1、SUID权限仅对二进制程序有效。
2、执行者对于该程序需要具有x的可执行权限。
3、本权限仅在执行该程序的过程中有效。
4、执行者将具有该程序拥有者的权限。
sgid

当s出现在文件的所属用户组x权限位置上时,就是SGID,相对与SUID来说,SGID还是比较少见的。

1、SGID对二进制程序有用;
2、程序执行者对于该程序来说需具备x的权限;
3、SGID主要用在目录上;
sbit

这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。

其他命令

lsblk(显示文件系统信息)

命令语法

常用的是 -f

blkid(显示文件系统的uuid)

du(显示文件大小)

du [OPTION]... [FILE]...
选项说明:
-a, --all:列出目录中所有文件的统计信息,默认只会列出目录中子目录的统计信息,而不列出文件的统计信息
-h, --human-readable:人性化显示大小
-0, --null:以空字符结尾,即"\0"而非换行的"\n"
-S, --separate-dirs:不包含子目录的大小
-s, --summarize:对目录做总的统计,不列出目录内文件的大小信息
-c,--total:对给出的文件或目录做总计。在统计非同一个目录文件大小时非常有用。见下文例子。
-d,--max-depth:指定显示时的目录深度,默认会递归显示所有层次
--max-depth=N:只列出给定层次的目录统计,如果N=0,则等价于"-s"
-x, --one-file-system:忽略不同文件系统上的文件,不对它们进行统计
-X, --exclude-from=FILE:从文件中读取要排除的文件
--exclude=PATTERN:指定要忽略不统计的文件

df(文件系统信息)

mount(挂载)

mount # 将显示当前已挂载信息
mount [-t 欲挂载文件系统类型 ] [-o 特殊选项] 设备名 挂载目录

选项说明:
-a  将/etc/fstab文件里指定的挂载选项重新挂载一遍。
-t  支持ext2/ext3/ext4/vfat/fat/iso9660(光盘默认格式)。 不用-t时默认会调用blkid来获取文件系统类型。
-n  不把挂载记录写在/etc/mtab文件中,一般挂载会在/proc/mounts中记录下挂载信息,然后同步到/etc/mtab,指定-n表示不同步该挂载信息。
-o  指定挂载特殊选项。下面是两个比较常用的:
    loop  挂载镜像文件,如iso文件
    ro  只读挂载
    rw  读写挂载
    auto  相当于mount -a
    dev 如果挂载的文件系统中有设备访问入口则启用它,使其可以作为设备访问入口
    default rw,suid,dev,exec,auto,nouser,async,and relatime
    async   异步挂载,只写到内存
    sync    同步挂载,通过挂载位置写入对方硬盘
    atime   修改访问时间,每次访问都修改atime会导致性能降低,所以默认是noatime
    noatime 不修改访问时间,高并发时使用这个选项可以减少磁盘IO
    nodiratime  不修改文件夹访问时间,高并发时使用这个选项可以减少磁盘IO
    exec/noexec  挂载后的文件系统里的可执行程序是否可执行,默认是可以执行exec, 优先级高于权限的限定
    remount  重新挂载,此时可以不用指定挂载点。
    suid/nosuid 对挂载的文件系统启用或禁用suid,对于外来设备最好禁用suid
    _netdev 需要网络挂载时默认将停留在挂载界面直到加载网络了。使用_netdev可以忽略网络正常挂载。如NFS开机挂载。
    user  允许普通用户进行挂载该目录,但只允许挂载者进行卸载该目录
    users  允许所有用户挂载和卸载该目录
    nouser  禁止普通用户挂载和卸载该目录,这是默认的,默认情况下一个目录不指定user/users时,将只有root能挂载

umount(卸载)

命令语法
umount 设备名或挂载目录
umount -lf 强制卸载

开机自动挂载/etc/fstab

在这里插入图片描述

rpm(包管理工具1)

命令语法

rpm工具安装、升级和卸载的功能都很少使用。对于安装来说,它需要人为解决包的依赖关系,这是极其令人恶心的事对于升级来说,基本上都会使用yum工具进行安装和升级,而卸载行为在Linux上很少出现,大不了直接覆盖重装。

rpm -ivhUe --nodeps --test --force --prefix
选项说明:
-i 表示安装,install的意思
-v 显示安装信息,还可以"-vv"、"-vvv",v提供的越多显示信息越多
-h 显示安装进度,以#显示安装的进度
-U 升级或升级包
-F 只升级已安装的包
-e 卸载包,卸载也有依赖性,"--erase"
--nodeps 忽略依赖性强制安装或卸载(no dependencies)
--test 测试是否能够成功安装指定的rpm包
--prefix 新路径 自行指定安装路径而不是使用默认路径,基本上都不支持该功能,功能极其简单的软件估计才支持重定位安装路径
--force 强制动作
--replacepkgs 替换安装,即重新覆盖安装。

rpm工具的安装功能很少使用,毕竟解决依赖关系不是件容易的事。但是rpm的查询功能则非常实用。

-q[p] -q查询已安装的包,-qp查询未安装的包。它们都可接下面的参数
    -a 查询所有已安装的包,也可以指定通配符名称进行查询
    -i 查询指定包的信息(版本、开发商、安装时间等)。从这里面可以查看到软件包属于哪个包组。
    -l 查询包的文件列表和目录(包在生产的时候就指定了文件路径,因此可查未装包)
    -R 查询包的依赖性(Required)
    -c 查询安装后包生成的配置文件
    -d 查询安装后包生成的帮助文档
-f 查询系统文件属于哪个已安装的包(接的是文件而不是包)
--scripts 查询包相关的脚本文档。脚本文档分四类:安装前运行、安装后运行、卸载前运行、卸载后运行

yum(管理包)

Usage: yum [options] COMMAND

List of Commands:
help           命令的帮助信息,用法:yum help command,如yum help install则查看install命令的用法说明
clean          清除缓存数据,如yum clean all
makecache      生成元数据缓存数据,yum makecache
deplist        列出包的依赖关系
erase          卸载包
fs             为当前文件系统创建快照,或者列出或删除当前已有快照。快照是非常有用的,升级或打补丁前拍个快照,就能放心地升级或打补丁了
fssnapshot     同fs一样
groups         操作包组
history        查看yum事务信息,yum是独占模式的进程,所以有时候查看事务信息还是有用的
info           输出包或包组的信息,例如该包是谁制作的,大概是干什么用的,来源于哪个包组等信息
install        包安装命令
list           列出包名,一般会结合grep来搜索包,如yum list all | grep -i zabbix
provides       搜索给定的内容是谁提供的,可用来搜索来源于个包,如CentOS 7上mysql被mariadb替代,搜索Mysql提供者时就能找出包mariadb
reinstall      重新安装包
repolist       列出可用的仓库列表
search         给定字符串搜索相关包,并给出相关包较为详细的信息
update         更新包
 
Options:

  -R [minutes], --randomwait=[minutes]:最多等待时间
  -q, --quiet           安静模式
  -v, --verbose         详细模式
  -y, --assumeyes       对所有问题回答yes
  --assumeno            对所有问题回答no
  --enablerepo=[repo]   启用一个或多个仓库,可用通配符通配仓库ID
  --disablerepo=[repo]  禁用一个或多个仓库,可用通配符通配仓库ID
  -x [package], --exclude=[package]  通配要排除的包
  --nogpgcheck          禁用gpgcheck
  --color=COLOR         带颜色
  --downloadonly        仅下载包,不安装或升级。默认下载在yum的缓存目录中,默认为/var/cache/yum/$basearch/$releasever
  --downloaddir=DLDIR   指定下载目录

fuser(查看目录id)

命令语法

fuser可以查看文件或目录所属进程的pid,即由此知道该文件或目录被哪个进程使用。例如,umount的时候提示the device busy可以判断出来哪个进程在使用。

fuser [-ki] [-signal] file/dir
-k:找出文件或目录的pid,并试图kill掉该pid。发送的信号是SIGKILL
-i:一般和-k一起使用,指的是在kill掉pid之前询问。
-signal:发送信号,如-1 -15,如果不写,默认-9,即kill -9
不加选项:直接显示出文件或目录的pid
在不加选项时,显示结果中文件或目录的pid后会带上一个修饰符:

    c:在当前目录下

    e:可被执行的

    f:是一个被开启的文件或目录

    F:被打开且正在写入的文件或目录

    r:代表root directory

lsof(显示进程有哪些文件)

而lsof则反过来,它是通过进程来查看进程打开了哪些文件,但要注意的是,一切皆文件,包括普通文件、目录、链接文件、块设备、字符设备、套接字文件、管道文件,所以lsof出来的结果可能会非常多。

lsof  /path/to/somefile:显示打开指定文件的所有进程之列表;建议配合grep使用
lsof -c string:显示其COMMAND列中包含指定字符(string)的进程所有打开的文件;可多次使用该选项
lsof -p PID:查看该进程打开了哪些文件
lsof -U:列出套接字类型的文件。一般和其他条件一起使用。如lsof -u root -a -U
lsof -u uid/name:显示指定用户的进程打开的文件;可使用脱字符"^"取反,如"lsof -u ^root"将显示非root用户打开的所有文件
lsof +d /DIR/:显示指定目录下被进程打开的文件
lsof +D /DIR/:基本功能同上,但lsof会对指定目录进行递归查找,注意这个参数要比grep版本慢
lsof -a:按"与"组合多个条件,如lsof -a -c apache -u apache
lsof -N:列出所有NFS(网络文件系统)文件
lsof -n:不反解IP至HOSTNAME
lsof -i:用以显示符合条件的进程情况
lsof -i[46] [protocol][@host][:service|port]
    46:IPv4或IPv6
    protocol:TCP or UDP
    host:host name或ip地址,表示搜索哪台主机上的进程信息
    service:服务名称(可以不只一个)
    port:端口号 (可以不只一个)

ps(查看进程)

ps -aux:以用户为导向显示所有进程;
ps -ef | grep java:显示全部进程的全部格式信息;

uptime(显示部分系统信息)

显示当前时间,已开机运行多少时间,当前有多少用户已登录系统,以及3个平均负载值。

top(动态显示进程信息)

-d:指定top刷新的时间间隔,默认是5 秒
-b:批处理模式,每次刷新分批显示
-n:指定top刷新几次就退出,可以配合-b使用
-p:指定监控的pid,指定方式为-pN1 -pN2 …或-pN1, N2 [,…]
-u:指定要监控的用户的进程,可以是uid也可以是user_name

crondtab (配置定时任务)

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

watch(监控)

watch -n 1 -d 命令

at(一次性定时任务)

at +时间
然后输入要操作的命令
然后ctrl+D

atq:查询任务
atrm:删除任务

crontab(定时任务)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值