Linux常用命令及知识点汇总(二)

2022/2/3 7:16:53

本文主要是介绍Linux常用命令及知识点汇总(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

1.Linux文件系统 

1.1存储结构

1.2挂载点

1.3查看磁盘使用情况

1.4硬连接和符号连接

2.磁盘操作

2.1查看磁盘分区情况

2.2磁盘分区

3.压缩与打包

3.1gzip

3.2bzip2

3.3xz

3.4tar打包

4.账号管理和ACL权限设置

4.1用户管理

4.2组管理

4.3ACL权限管理        

4.4用户身份切换

4.5用户信息传递


1.Linux文件系统 

1.1存储结构

linux文件的存储方式为

  •  inode:记录文件的属性(权限,大小,拥有者,时间),并且记录该文件在数据区分配的数据区的区块号
  • 数据区块:记录真正的数据,大文件占用多个区块
  • 超级区块:记录文件系统整体信息,inode与数据区的总量、使用量

目录也是一样的也有inode,但是目录数据区的内容如下

所以文件的名字是存在目录中的,inode本生不记录文件名。

使用ls命令时加上-i可查看文件和目录对应的inode

1.2挂载点

每个文件系统都有独立的inode、区块、超级区块等信息,把文件系统与目录树结合称为【挂载】,挂载点是个目录,通过该目录即可访问该文件系统

输出ls -lid / /root /home命令,因为他们都是独立的文件系统挂载点,所以inode可以一样,且xfs文件最顶层的目录一般为64和128号,所以这三个挂载点的inode相同。

建立硬连接(cp -l)时,两个文件的inode是一样的,所以改动任意一处硬连接的数据,所有的内容都改动

1.3查看磁盘使用情况

  • df [文件或目录]:列出文件系统的整体磁盘使用量
    • df -h:以GB、MB、KB等格式进行显示
    • df -i:不同磁盘容量显示,而是显示inode的数量
    • df -h test:显示test文件所在文件系统的使用情况
  • du:查看文件系统的磁盘使用量(查看目录下文件的使用情况)
    • -h:同上
    • du -s:仅列出所用容量,我们可以用来统计当前目录下所占用情况,使用ls是显示的指定该目录所占容量,而不包括下面的所有文件。
    • du -a:列出所有的文件与目录容量,因为默认只统计目录下面的文件量

1.4硬连接和符号连接

硬连接的本质就是一个数据区对应了多个文件,这多个文件的inode都指向该数据区的内容。

所以你删除一个硬连接,真正的内容不会被删除,另外一个硬连接还是可以正常访问的,但是硬连接不能跨文件系统,这点很好理解。

符号链接就是个快捷方式,当源文件被删除了符号链接就打不开了。由符号链接建立的文件会创建它独有的inode和数据区。

  • ln:源文件 目标文件:创建一个硬连接
    • ln -s:建立符号连接

2.磁盘操作

2.1查看磁盘分区情况

  • lsblk [磁盘文件]:列出系统上所有的磁盘列表
    • lsblk -f:同时列出对应的文件系统和uuid
  • parted [磁盘文件] print:列出磁盘的分区表类型和分区信息
     

2.2磁盘分区

  • MBR分区表使用fdisk命令分区,GPT使用gdisk命令。使用步骤
  • mkfs.[文件系统]  设备名称:创建文件系统
    • mkfs.xfs /dev/sdb1 :格式化/dev/sdb1为xfs文件系统
  • mount [设备] [挂载的目录] :挂载文件系统
    • 永久挂载需要修改/etc/fstab

/etc/fstab中的条目为:

[设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump?] [fsck?]

后面4个直接写默认的即可。

3.压缩与打包

tar打包文件(无压缩),压缩只能针对文件不能是目录,所以需要使用tar命令把多个文件打包为一个文件进行压缩;为了方便一般使用打包+压缩的方式,后缀为 *.tar.gz等等,Linux压缩方式有很多种,通过规范后缀名来识别文件是用的哪种压缩方式。

3.1gzip

gzip应用最广,后缀为*.gz。

gzip [参数] 文件名

  • -d:解压缩,也可以单纯使用gzip的解压缩命令gunzip命令进行解压缩
  • -v:显示压缩的详细信息
  • -#:#为1-9的数字,表示压缩等级,1速度快,但是压缩比最差,9最慢,但是压缩比最好。默认6

压缩后原始文件不保留,生成一个.gz的文件。

3.2bzip2

升级版的gzip,压缩比更高了,后缀名为.bz2

bizp2 [参数] 文件名

  • -d:解压缩,或者用bunzip2命令代替
  • -v:显示压缩的详细信息,压缩比
  • -k:保留原始文件
  • -#:与gzip相同

3.3xz

压缩比更高了,但是压缩的时间较长,用法一模一样,后缀为.xz。

xz [参数] 文件名

解压缩为unxz

3.4tar打包

打包命令,生成的后缀为.tar文件。

①:这三个参数只能出现一个

  • -c打包
  • -x解包
  • -t:查看打包文件的内容含义哪些文件名

②:打包并且压缩的参数,这三个参数最多只能出现一个

  • -z:通过gzip的支持进行压缩/解压缩;文件名最好为*.tar.gz
  • -j:通过bzip2的支持进行压缩/解压缩;文件名最好为*.tar.bz2
  • -J:通过xz的支持进行压缩/解压缩;文件名最好为*.tar.xz

其他参数:

  • -v:压缩/解压缩的过程中显示详细信息
  • -f [filename]:-f后面要立刻接文件名,不能把-f参数放在前面,建议单独分出来
  • -C 目录:用于在特点目录进行解压缩

tar命令不像压缩命令一样;tar需要自行指定文件名,且我们不要乱取名。

 示例:

单纯的打包操作,不压缩:

tar -cv -f  test.tar  aa.txt  bb:将aa.txt文件和bb目录打包为test.tar包

tar -xv -f test.tar:将test.tar包解包出来,解到当前路径下

tar -xv -f test.tar -C /etc:将test.tar解包到/etc下


打包并压缩:

tar -zcvf  t.tar.gz  aa.txt  bb:将aa.txt文件和bb目录打包为一个文件并且使用gzip进行压缩(bzip2使用-j)

tar -zxvf  t.tar.gz  :使用gzip解压缩并且解包。

只有根据包的名称知道是用何种解压缩方式,又或者是没有压缩,所以后缀是十分重要的。

从上述的规律看出,我们只需要记住:

打包使用-cvf,解包使用-xvf即可,如有压缩的情况只需记住常用的-z(gzip)、-j(bzip2)即可

4.账号管理和ACL权限设置

4.1用户管理

/etc/shadow文件示例:bin:*:18353:0:99999:7:::

每一栏的作用分别为:①账号名称、②密码、③最近修改密码日期、④密码不可被修改日期、⑤密码需要重新修改的天数、⑥密码需要修改期限前的警告天数、⑦密码过期后的宽限天数、⑧账号失效日期、⑨保留

上面的日期都是1970.1.1的间隔天数,可以使用下面的查看某日期到1970的天数

echo $(($(date -d "2015/05/04" +%s)/86400+1))

反过来查看相隔天数的日期date -d "1970/01/01 17932 days"

  • groups:查看当前用户所在的组,第一个显示的是初始用户组,其他的为有效用户组
  • newgrp:切换初始用户组,当前用户必须在该组内
  • useradd:添加新的用户,添加好后需要passwd修改密码
    • -u:指定uid
    • -d:指定用户的家目录,目录不存在自动创建
    • -g:指定用户的初始用户组,默认组名和用户名同名
    • -G:可以指定该用户的有效用户组
    • -s:指定shell文件
    • -r:创建一个系统账号
    • -D:查看useradd的默认值,该值存在于/etc/default/useradd文件中

文件①/etc/default/useradd

# useradd defaults file
GROUP=100          //默认用户组,已弃用
HOME=/home         //家目录的基准目录
INACTIVE=-1        //密码失效后的宽限日期,-1永不过期,0表示密码过期后立即失效(建议值)
EXPIRE=            //密码失效时间,这些日期都是距离1970年1月1日的天数
SHELL=/bin/bash    //默认shell
SKEL=/etc/skel     //用户家目录的模板
CREATE_MAIL_SPOOL=yes    //建立用户的邮箱,默认在/var/spool/mail下

文件②/etc/login.defs

MAIL_DIR	/var/spool/mail         //默认邮箱的放置目录
PASS_MAX_DAYS	99999               //多久需要修改密码的天数,/etc/shadow的第5栏
PASS_MIN_DAYS	0                   //多久不可重新设置密码,0随时修改,/etc/shadow的第4栏
PASS_MIN_LEN	5                   //密码最短的字符长度,已经废弃
PASS_WARN_AGE	7                   //密码失效前多少天提示用户,/etc/shadow的第6栏
UID_MIN                  1000       //使用者最小uid
UID_MAX                 60000       //最大uid
SYS_UID_MIN               201       //系统账号的最小uid
SYS_UID_MAX               999       //系统账号最大uid
GID_MIN                  1000       //用户自定义用户组的最小gid
GID_MAX                 60000       //最大gid
SYS_GID_MIN               201       //同上
SYS_GID_MAX               999    
CREATE_HOME	yes                     //是否主动建立用户家目录
UMASK           077                 //家目录的权限
USERGROUPS_ENAB yes                 //userdel删除用户时,是否删除初始用户组,前提是改组没有其他人
ENCRYPT_METHOD SHA512               //密码的加密

  • passwd:修改密码,root可以修改所有人的密码,使用 passwd 用户名
    • --stdin:通过管道的数据作为密码
    • -l:lock该用户,即将/etc/shadow的第二栏前面加上!使密码失效
    • u:unlock
    • -S:列出密码相关参数
    • -n:后面接天数,shadow的第4栏,多久不可修改密码的天数
    • -x::shadow的第5栏,多久内必须修改密码
    • -w:shadow第6栏,密码过期的警告天数
    • -i:密码失效日期,shadow第7栏
    • -e:使用户的密码失效,下次登录时必须修改密码
    • -d:是账号无口令
  • chage:同passwd功能差不多,修改shadow文件
    • -l:查看详细密码参数
    • -d:修改shadow第3栏,最近一次修改密码的日期,设置为0可强制使用户下次登录重设密码
    • -m:第4栏,密码最短保留天数
    • -M:第5栏,密码多久需要重新修改
    • -W:第6栏,密码过期前警告天数
    • -I:第7栏,密码失效日期inactive
    • -E:第8栏,账号失效日
  • userdel:删除用户
    • -r:连同家目录一起删除,删除前最好find / -username查出该用户的文件,将其手动删除
  • usermod:修改用户账号,就是根据实际情况更改用户的有关属性,修改文件
    • -c:账号的说明,即paswd第5栏
    • -d:修改家目录,passwd第6栏
    • -e:shadow第8栏,账号失效日
    • -g:修改初始用户组,passwd的第4栏,同newgrp
    • -G:修改用户支持的用户组,即修改/etc/group
    • -a:与-G合用,添加用户组,而不是-G默认的替换,如usermod -a -G wheel  lxc
    • -l:修改账号名称,passwd的第1栏
    • -s:修改shell
    • -u:设置uid,passwd第3栏
    • -L:锁定
    • -U:解锁

前面的useradd、usermod、userdel只能root使用

  • id:查看本用户的相关的uid/gid等信息,root用户可以查看别的用户信息
  • chsh:修改当前用户的shell文件

4.2组管理

主要是管理/etc/group和/etc/gshadow两个文件。

/etc/group文件示例:lxc:x:1001:      ①组名、②密码、③gid、④组内的成员,用逗号分隔

/etc/gshadow文件示例:lxc:!::   ①组名、②密码,!表示没有密码,也表示没有用户组管理员、③用户组管理员的账号、④组内的成员,和group文件相同

  • groupadd:添加组
    • -g:特定的gid
    • -r:建立系统用户组
  • groupmod:修改group相关参数
    • -g:修改gid
    • -n:修改名称
  • groupdel:删除组,不能删除用户的初始用户组,如果能删也要确认一下
  • gpasswd用户组管理员功能,组管理员的功能是管理一个组的成员,可以管理用户加入/移除该用户组
    • ①root做的操作有:
    • gpasswd groupname:设置组的密码
    • gpasswd -A user1,user2……  groupname:将-A后面参数的用户变为group的组管理员
    • gpasswd -r groupname:删除该组的密码
    • gpasswd -R:让组密码栏失效
    • gpasswd -M user1,user2……  groupname:将用户加入到这个组中
    • ②组管理员可以执行的操作有:
    • gpasswd -a user  groupname:将用户加入到这个组
    • gpasswd -d user  groupname:将用户从这个组删除

4.3ACL权限管理        

setfacl  选项  文件名:设定ACL权限

  • -m:添加后面的acl参数给文件/目录,不可与-x合用
  • -x:删除后面的acl参数
  • -b:删除所有acl设置参数
  • -k:删除默认的acl参数
  • -R:递归设置子目录
  • -d:设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值

①针对特定用户使用【u:用户账号:权限】:setfacl -m u:lxcc:rx aa.txt。特别的如果用户账号为空代表文件拥有者

②针对特定组使用【g:用户组名:权限】:setfacl -m g:lxc1:rw aa.txt 。同上,如果为空代表本组

③针对有效权限设置使用【m:权限】:即getfacl中的mask,用户或用户组所设置的权限必须在mask范围内存在,否则的话也不能生效。

getfacl  文件名:查看acl等信息

目录的ACL的权限默认不会继承到它的子目录或文件,如果想让子目录/文件都继承的话需要使用默认权限设置:d:[u|g:[user|group]:权限],就是在前面加上一个额外的d,即可实现继承,和-R的区别就是,新建的文件也会自动继承。

4.4用户身份切换

su  [-] [选项] [username]:身份切换命令,省略username就是切换root用户;如果中间加上-的话,就是以login shell进行登录,不加是以nologin shell启动,且当前很多环境是不会变的,所以最好加上-

  • -c:仅进行一次命令,后面接对应的命令,如su - -c "cat /etc/shadow" root,使用root身份临时查看shadow文件,需要先输入root的密码

sudo允许一个已授权用户以超级用户或者其它用户的角色运行一个命令,而无需root的密码

  • -u:后面接预切换的用户,若无此项默认切换身份为root
  • -b:将命令放到后台执行
  • -l:查看当前用户能给sudo的命令

如sudo -u sshd touch /tmp/hi,用系统用户sshd的身份创建一个文件,该文件的拥有者是sshd

只有/etc/sudoers文件中指定的用户才能运行sudo这个命令,只需输入自己的密码即可开始执行

visudo:修改/etc/sudoers文件提供的命令,不建议直接vim修改。

如何修改sudoers文件?基本语法为:  使用者账号  登录者的来源主机=(可切换的身份)  可执行的命令

如root    ALL=(ALL)     ALL         :代表root用户可使用sudo,且来源主机可以是任何主机,可以切换任何人的身份去执行任何命令。

①某个用户可使用root所有命令

增加 lxc  ALL=(ALL)     ALL

②利用组批量设置

centos7默认sudoers里就有这么一行:%wheel    ALL=(ALL)    ALL,其中前面的%,代表是一个组,wheel是组名,表示只要是这个组的用户都能够执行sudo命令切换身份,执行任何操作。

③无需密码的设置

只需在按照lxc  ALL=(ALL)     NOPASSWD:ALL,就表示sudo切换身份时lxc不用输入自己的密码。

④有限制的命令操作

上面的设置可以让用户能做任何事,包括修改root的密码,不太好,我们需要加以限制。

如 lxc  ALL=(root)  /usr/bin/passwd  ,就是让lxc用户仅能够切换root,执行passwd命令,注意这里的可执行命令这一栏一定要填绝对路径,否则报错

上面的操作并不能解决lxc能够修改root密码的问题,lxc依然能够使用 sudo passwd修改,可以使用 lxc  ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root 修改解决该问题,即lxc用户只能sudo切换为root,且不能修改root的密码

其中可以支持正则表达式!的作用是不允许执行。 多个命令中间必须有空格。

⑤通过变量设置

前面的都是单个用户或组的设置,也可以通过变量方式设置,就是将多个用户一起定义为一个变量,如mywork,然后myworl ALL=(ALL)  xxx,来减少工作量。不一定是多个用户一个变量也可以是多个操作一个变量。

⑥sudo搭配su

可以设置一些用户可以执行的命令为 su - ,即允许他们登入管理员账号。

4.5用户信息传递

  • wwho:查询目前已登录在系统的用户
  • lastlog:查询每个账号最近登录的日期,调用/var/log/lastlog文件
  • last:查询系统最近登录的信息
  • write:用户对谈,使用  write 对方账号  [使用者所在的终端界面],ctrl+d结束输入
  • mesg:查看当前用户是否接收信息
    • n:不接受任何信息,如mesg n,当前用户就不会接收任何信息,除了root发送的
    • y:接收信息
  • wall:向系统上的所有在线用户发送信息
  • mail:发送邮件,格式为【mail -s"邮件标题"  用户账号@localhost】,再输入邮件内容,最后以一个 结束;除了命令行输入内容外,还可以使用<重定向文件作为内容。接受者使用mail查看邮件。



这篇关于Linux常用命令及知识点汇总(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程