一、Linux环境配置
先来看看 Linux 怎么读「你可想死,利尼克斯」,只要不是读的太离谱就行。Linux 系统可以直接像 Windows 系统一样直接安装在电脑上,但是一般学习我们都是安装虚拟机,在虚拟机上安装 Linux。
Linux 环境配置的主要步骤:
- 下载安装 VMware Workstation
- 通过 VMware Workstation 创建并配置一个虚拟空间
- 下载安装系统 Centos/Ubuntu(乌班图)
- 使用Linux系统
1.1 下载安装 VMware Workstation
安装 VMware Workstation 前,先去 window 开机 BOIS 引导里面去修改虚拟化支持(virtualizationTechnology为enable),其中同学 ThinkPad 电脑上修改顺序是:开机→F1→security→virtualization→virtualizationTechnology。
官方下载需要登录,还得花钱买激活码,所以请去:https://www.nocmd.com/740.html 然后无脑安装。
1.2 通过 VMware Workstation 创建并配置一个虚拟空间
安装完成需要创建并配置一个虚拟空间参考 VMware下载和安装:http://c.biancheng.net/view/714.html
需要注意的几点:
- 创建虚拟机有「典型」「自定义」两种模式,安装的东西差不多,没啥区别。
- 配置虚拟机,内存最好不要超过宿主机内存的一半,一般是两个G。
- CD/DVD(IDE) 里面可以选择光驱配置。选择“使用 ISO 映像文件”,直接加载 ISO 映像文件,单击“浏览”按钮找到 ISO 映像文件位置即可。
- 网络适配器
了解三种模式:
- 桥接模式:相当于虚拟机的网卡和宿主机的物理网卡均连接到虚拟机软件所提供的 VMnet0 虚拟交换机上,因此虚拟机和宿主机是平等的,相当于一个网络中的两台计算机。这种设置既可以保证虚拟机和宿主机通信,也可以和局域网内的其他主机通信,还可以连接 Internet,是限制最少的连接方式,推荐新手使用,但是容易IP冲突。
- NAT 模式:相当于虚拟机的网卡和宿主机的虚拟网卡 VMnet8 连接到虚拟机软件所提供的 VMnet8 虚拟交换机上,因此本机是通过 VMnet8 虚拟网卡通信的。在这种网络结构中,VMware 为虚拟机提供了一个虚拟的 NAT 服务器和一个虚拟的 DHCP 服务器,虚拟机利用这两个服务器可以连接到 Intemet。所以,在正常情况下,虚拟机系统只要设定自动获取 IP 地址,就能既和宿主机通信,又能连接到 Internet了。但是这种设置不能连接局域网内的其他主机。
- 仅主机模式:宿主机和虚拟机通信使用的是 VMware 的虚拟网卡 VMnet1,但是这种连接没有 NAT 服务器为虚拟机提供路由功能,所以仅主机网络只能连接宿主机,不能连接局域网,也不能连接 Internet 网络。
1.3 下载安装系统 Centos/Ubuntu(乌班图)
- Centos7下载
- Ubuntu下载
在使用ISO映像文件选中即可
1.4 使用Linux
- 确定终端可以使用
鼠标右击选择打开终端,输入 ls 查看终端是否可以使用 - 联网
打开火狐浏览器输入:www.baidu.com 发现不能上网。
按图示操作自动联网获取IP,进行联网。
1.5 VMtools 安装使用
VMtools 让 window 和 Linux 之间进行某种通信,例如在Linux虚拟机和我的Windows实体机之间可以实现相互之间的粘贴复制,设置一个虚拟机和实体机的共享文件夹,调整虚拟机的大小使虚拟机铺满全屏。
Ubuntu VMware Tools 安装
需要注意的是 Ubuntu 设置铺满屏幕的时候,屏幕是拉伸的,安装完 VMware Tools 可自动适应全屏了。
CentOS7 的 VMware Tools 工具在系统安装完成时,屏幕底部会有提示。点击安装就会自动安装 VMware Tools 工具。
二、Linux目录结构
Linux 中的一切皆文件
登录系统后,在当前命令窗口下输入命令:
ls /
你会看到如下所示:
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
对应树状目录结构:
以下是对这些目录的解释:
目录 | 解释 |
---|---|
/bin | bin是Binary的缩写, 这个目录存放着最经常使用的命令。 |
/boot | 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 |
/dev | dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的 |
/etc | 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 |
/home | 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的 |
/lib | 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 |
/media | linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了 |
/opt | 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录 |
/sbin | s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序 |
/selinux | 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的 |
/srv | 该目录存放一些服务启动之后需要提取的数据 |
/tmp | 这个目录是用来存放一些临时文件的 |
/usr | 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录 |
/usr/src | 内核源代码默认的放置目录 |
/etc | 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动 |
/sbin, /usr/bin, /usr/sbin | 这是系统预设的执行文件的放置目录 |
/bin, /usr/bin | 是给系统用户使用的指令(除root外的通用户) |
/sbin, /usr/sbin | 是给root使用的指令。 |
/var | 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里 |
三、Linux 远程登录
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的 Linux 服务器。这时我们就需要远程登录到 Linux 服务器来管理维护系统。Linux 系统中是通过ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 22。
常用远程登录软件组合:
命令行 | 文件传输 |
---|---|
putty | SSH Secure Shell Slient |
xshell | xftp |
putty 下载:https://www.putty.org/
xshell 和 xftp 下载:https://www.portablesoft.org/xshell-xftp-integrated/
3.1 CentOs 远程登录
CentOs7 默认安装 SSH 软件包而且默认是打开的,而 Ubuntu 默认是不安装的。
CentOs7 打开 22 端口一共两种办法:
- 命令行输入 setup → 系统服务 → 打开 sshd.service 服务(空格选中变星,tab 切换选项)。
- 防火墙法
firewall-cmd --zone=public --add-port=22/tcp --permanent # 开放22端口
netstat -lnpt # 查看监听的端口
####下面了解,没用了
systemctl stop firewalld.service #关闭防火墙
firewall-cmd --state #查看防火墙状态running/not running
netstat -lnpt # 查看监听的端口
有时候开机 22 端口自动关了,重启下。
service sshd start
- 关闭 22 端口
一是通过 setup ,二是通过:
netstat -lnpt # 查看监听的端口,找到22端口对应的四位进程数例如:3216
kill -9 3216 #-9 强制关闭
3.2 Ubuntu 远程登录
SSH 的全称是 Secure Shell Protocol ,中文译名安全外壳协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。,由 IETF 的网络工作小组(NetworkWorkingGroup)所制定;SSH 是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
登录步骤(需要注意的是Ubuntu没有默认的SSH):
- 更新源列表
打开"终端窗口",输入 "sudo apt-get update" --> 回车 --> "输入当前登录用户的管理员密码" --> 回车,就可以了。
- 安装 SSH
在 "终端窗口" 输入 "sudo apt-get install openssh-server" --> 回车 --> 输入 "y" --> 回车 --> 安装完成。
- **查看 **SSH 服务是否启动
打开"终端窗口",输入 "sudo ps -e | grep ssh" --> 回车 --> 有 sshd,说明 ssh 服务已经启动,如果没有启动,输入 "sudo service ssh start" --> 回车 --> ssh 服务就会启动。
- 查看 Ubuntu 的 IP 地址
打开"终端窗口",输入 "ifconfig" --> 回车 --> 就可以查看到 IP 地址。
Ubuntu18.04 ifconfig 命令找不到
3.3 静态化IP地址
Linux 作为一个服务器,我们在连上网之后,会自动获取 IP 地址,所以得静态化 IP。大致步骤为:
1、配置文件所在目录为 /etc/sysconfig/network-scripts
cd /etc/sysconfig/network-scripts
2、打开配置文件进行修改,建议在修改之前先备份
cp ifcfg-ens33 ifcfg-ens33.bak
vim ifcfg-ens33
3、参数配置如下、只需要修改注释的6个地方即可
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 使用静态IP地址,默认为dhcp【修改】
IPADDR="192.168.1.150" # 设置的静态IP地址【修改】
NETMASK="255.255.255.0" # 子网掩码【修改】
GATEWAY="192.168.1.250" # 网关地址【修改】
DNS1="192.168.1.250" # DNS服务器【修改】
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="95b614cd-79b0-4755-b08d-99f1cca7271b"
DEVICE="ens33"
ONBOOT="yes" #是否开机启用
4、保存文件,重启网卡
systemctl restart network
5、重启虚拟机
reboot
四、Vi 和 Vim 编辑器
Vim 是 Vi 的增强版(在 Vi 的基础上增加了正则表达式的查找、多窗口的编辑等功能),使用 Vim 进行程序开发会更加方便。,Vim 是一个基于文本界面的编辑工具,使用简单且功能强大。更重要的是,Vim 是所有 Linux 发行版本默认的文本编辑器。
Vi 和 Vim 的区别和联系
如果Linux没有编辑器:请使用yum install vim
安装,需要注意的是,此命令运行时,有时需要手动确认 [y/n],遇到此情况,选择 “y” 即可。如果你想省略手动输入“y”的过程,希望全自动安装,可以使用如下这条命令:yum -y install vim
4.1 Vim 的三种模式
使用 Vim 编辑文件时,存在 3 种工作模式,分别是正常模式、编辑模式和命令模式,这 3 种工作模式可随意切换。示意图如下:
- 正常模式:
用户刚刚启动 vi/vim,便进入了正常模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符。比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,可以输入字符。
x 删除当前光标所在处的字符。
: 切换到命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了正常模式,按下i,切换到编辑模式。
- 编辑模式
在正常模式下按下 i 就进入了编辑模式。
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
ESC,退出编辑模式,切换到命令模式
- 命令模式
在正常模式下按下:(英文冒号)就进入了命令模式。
q 退出程序
w 保存文件
! 强制退出
一般使用 :wq
或 q!(强制离开不储存档案。)
。
4.2 Vim 常用按键说明
按键 | 作用 |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
^ | 定位行首 |
$ | 定位行尾 |
G | G 移动到这个档案的最后一行 |
gg | 移动到这个档案的第一行,相当于 1G 啊 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
p, P | 粘贴 |
dd | 剪切游标所在的那一整行(常用) |
ndd | n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
/word | 向光标之下寻找一个名称为 word 的字符串。输入n,下一个,N上一个 |
n |
n 为数字。光标向下移动 n 行 |
u | 撤销 |
Ctrl + r | 恢复撤销 |
:set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
ddp | 光标所在行跟下面一行进行交换 |
xp | 光标所在的字符后面一个字符进行交换 |
五、rpm 和 yum
5.1 rpm
RPM 早期被称为 RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为 RPM is Package Manager。rpm 就相当于windows 里面的 .exe 安装包文件。只不过这里使用了命令行操作。
命令 | 作用 |
---|---|
-q | 查询 |
-a | 查询所有 |
-i | 显示相关信息 |
-e | 删除 |
-l | 显示文件列表 |
rpm -qa | 查询所有的软件 |
rpm -qa | less | 分屏查询所有的软件 |
rpm -ql firefox | firefox安装目录 |
rpm -qf firefox | firefox安装目录 |
rpm -qa | grep firefox | 安装火狐浏览器的信息,返回版本和适用系统 |
rpm -e firefox | 卸载Firefox |
安装软件:
# rpm -hvi dejagnu-1.4.2-10.noarch.rpm
警告:dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名:NOKEY, key ID db42a60e
准备...
########################################### [100%]
5.2 yum( Yellow dog Updater, Modified)
YUM 是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器,用来管理 YUM 包。
基於 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum常用命令:
命令 | 作用 |
---|---|
yum list | grep xx | 是否安装了 xx 软件 |
yum install |
安装指定的软件 |
yum remove |
删除软件 |
yum update | 更新所有软件 |
yum update |
更新指定软件 |
yum clean, yum clean all | 清除缓存目录下的软件包及旧的headers |
特殊的是:CentOs7 安装谷歌浏览器
rpm 和 yum 安装软件的区别:
- rpm 只能安装已经下载到本地机器上的rpm 包,
- yum 能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是 rpm 工具所不具备的。
六、LInux系统开机、重启和用户登录注销
6.1 关机&重启
shutdown -h now #立即关机
shutdown -h 1 # 一分钟之后关机
shutdown -r now # 立即重启
halt #关机
reboot #重启
注意:当我们在关机重启的时候,都应该先执行一下 sync
,把内存数据写进磁盘,防止数据丢失。
6.2 用户登录注销
一般使用普通用户进行登录办公,当权限不够的时候,使用su root
切换到 root 用户。用户退出使用logout
,只在运行级别三下有效,也就是说在可视化桌面上打开的终端不能使用这个命令。其中 exit
表示切换到上一个登录的用户。
注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
七、用户和用户组管理
1、Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
2、不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务。
3、如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。
用户和用户组的对应关系有以下 4 种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。
用户和组之间的关系可以用图 1 来表示:
注意:”用户和组的管理必须在 root 权限下。
7.1 用户管理
添加一个 xm (小明)用户:
useradd xm
创建这个用户会自动在/home
文件夹下创建同名家目录。如果不想默认同名的话,可以自己随便指定。
useradd -d /home/people xm
接下来就是给用户指定或者称为修改密码:
passwd xm
按照提示输入新的密码。密码不能太简单不然都通不过系统的检测,还得注意的是输入密码时什么也看不到。
接下里 xm 可能离职不干了,删掉这个用户:
userdel xm # 家目录没删
userdel -r xm # 家目录也删掉了
一般我们不删家目录,因为 xm 用户工作肯定会留下代码在里面。很大可能我们还在使用。
创建用户完成或删除用户,可以查询一下看看,例如:
id xm
#uid=1000(xm) gid=1000(xm) 组=1000(xm),10(wheel)
我们可以看到用户的用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID)。
如果用户不存在:
[root@localhost home]# id xk
id: xk: no such user
切换用户,一般在工作中权限不够临时切超级用户权限使用。通过例如:su root
。
[xm@localhost home]$ su root
密码:
[root@localhost home]# exit
exit
[xm@localhost home]$
一般过程是从 普通用户(xm)→ su root
→ 干点高级权限的事 → exit → 回到普通用户。
7.2 组管理
添加一个组少林(shaolin):
groupadd shaolin
删除这个组:
groupdel shaolin
当我们创建一个用户的时候,会默认创建一个同名的组名。也就是一个用户至少属于一个组的来源。现在我们可以在创建用户的时候自定义组名,例如 xm 指定到 shaolin。
useradd -g shaolin xm
修改用户组,现在小明改投武当门下:
usermod -g wudang xm
7.3 Linux /etc/passwd 内容解析
Linux /etc/passwd
文件,是系统用户配置文件,存储了系统中所有用户(user)的基本信息。打开这个文件,看看到底包含哪些内容:
[root@localhost ~]# vi /etc/passwd
#查看一下文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...省略部分输出...
每行记录对应一个用户。每行用户信息都以 ":" 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认shell
- "x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,这个文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。如果删除了 "x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以的)。
- UID 就是一个 0~65535 之间的数。
UID 范围 | 用户身份 |
---|---|
0 | 超级用户,普通用户升级成管理员只需把用户的 UID 修改为 0 就可以了 |
1~499 | 系统用户(伪用户)此范围的 UID 保留给系统使用 |
500~65535 | 普通用户,2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了。 |
- “Group ID”,简称“组ID”,表示用户初始组的组 ID 号,包括初始组和附加组概念。此用户的用户名相同的组名作为该用户的初始组。附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。
- 用户的主目录,用户登录后有操作权限的访问目录,root 超级管理员账户的主目录为 /root。
- 默认的Shell,Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。
7.4 Linux /etc/shadow(影子文件)内容解析
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
[root@localhost ~]#vim /etc/shadow
root:$6$ZvooSMP8$lDQJR0x.3XJ7ga5kE6BKfG0.qmQg9dV6F7UNtk9J7A5QPgR6HP5XYON2pH0ls.5vxeevVxM1uFVTIAuFwROUw0:18173:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
systemd-network:!!:18173::::::
…省略部分输出…
每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
- 这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
- 最后一次修改时间,此字段表示最后一次修改密码的时间。例如 root 用户的时间,18173实际为:
[root@localhost ~]# date -d "1970-01-01 18173 days"
2019年 10月 04日 星期五 00:00:00 CST
- 最小修改时间间隔,如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
- 密码有效期,该字段的默认值为 99999,也就是 273 年,可认为是永久生效。
- 密码需要变更前的警告天数,该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。
7.5 Linux /etc/group 文件解析
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,此 GID 的组名就要从 /etc/group 文件中查找。
[root@localhost ~]#vim /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
…省略部分输出…
xm:x:1000:
此文件中每一行各代表一个用户组。我们曾创建 xm用户,系统默认生成一个 xm 用户组,在此可以看到,此用户组的 GID 为 1000,目前它仅作为 xm 用户的初始组。各用户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:密码:GID:该用户组中的用户列表
- 和 /etc/passwd 文件一样,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
- 组ID (GID)这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
- 组中的用户
此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
7.5 Linux /etc/gshadow文件内容解析
组用户的密码信息存储在 /etc/gshadow 文件中。
首先,我们借助 Vim 命令查看一下此文件中的内容:
[root@localhost ~]#vim /etc/gshadow
root:::
bin:::bin, daemon
daemon:::bin, daemon
...省略部分输出...
文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:
组名:加密密码:组管理员:组附加用户列表
八、Linux 七个运行级别
运行级别 | 含 义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以想象为 Windows 的安全模式,主要用于系统修复 |
2 | 多用户无网络服务 |
3 | 多用户有网络服务 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启 |
经常使用的运行级别就是3 和 5
两个。CenTos7 之前要设置开机默认不启动图形界面是通过 vim /etc/inittab 来设置 id:3:initdefault:
。但是,在 centos7 之后就不是这样子的。CentOS7 之后的版本查看 /etc/inittab 显示内容为:
[root@localhost etc]# cat inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
按照该文件所说的,runlevels 被 targets 所取代,即 CentOS7 采用加载 target 的方式来替代之前的启动级别。其中有两个重要的 target:multi-user.target 与 graphical.target。它们分别表示运行级别中的 3 与 5 级别。
通过 systemctl get-default 可获得默认启动的 target
通过 systemctl set-default 设置默认启动的 target
那么,想修改默认启动级别为多用户状态只需执行:
systemctl set-default multi-user.target
修改为图形界面执行:
systemctl set-default graphical.target
CentOS7.0 运行级别的简单对应关系
poweroff.target ------------------------> 0
rescue.target --------------------------> 1
emergency.target --------------------------> 2
multi-user.target ----------------------> 3
graphical.target -----------------------> 5
reboot.target --------------------------> 6
在 Linux 系统中可以使用 runlevel 命令来查看系统的运行级别,命令如下:
[root@localhost ~]# runlevel
N 5
在这个命令的结果中,"N 5" 中的 N 代表在进入这个级别前,上一个级别是什么;5 代表当前级别。"N" 就是 None 的意思,也就是说,系统是开机直接进入 5 运行级别的,没有上一个运行级别。
手动改变当前的运行级别:
init 3
init 0
(关机)init 6
(重启)不过要注意,使用 init 命令关机和重启并不是太安全,容易造成数据丟失。所以推荐大家使用 shutdown/halt 命令进行关机和重启。
Linux 系统忘记 root 密码的情况该怎么办呢?除了重装系统,还可以进入单用户模式更改一下 root 密码即可。操作都必须在实体机上进行,不能远程操作。
1、开机 按“e”,然后输入init=/bin/sh
2、根据提示按ctrl+x 得如下图:
3、输入
mount -o remount,rw /
在输入
passwd root
设置新密码。如下图:
4、输入
touch / .autorelabel
更新系统信息
5、执行命令
exec /sbin/init
来正常启动
小小恶作剧
系统启动的默认运行级别如果我们给设置成poweroff.target
或reboot.target
会造成什么现象?
没错电脑一开机就会关机/重启。让别人的 Linux 电脑永远打不开。
解决办法:
进入 1 级运行级别,centos7之前使用下面的修改方法:
[root@localhost /]# vim /etc/inittab
id:3:initdefault:
CentOS7 之后版本,通过 init=/bin/sh
进入 1 级运行级别时不能使用 systemctl set-default graphical.target
更改运行级别,只能通过直接输入运行级别的数字进入(1或3级别都行):
输入运行级别的级数,对应的就进入响应的运行级别:
输入 root 用户的密码:
更改运行级别:
九、Linux 常见命令
Linux 为什么不用图形界面?因为对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。而且服务器是一个连显示器都没有的家伙,要图形界面干啥?
9.1 命令提示符
登录系统后,第一眼看到的内容是:
[root@localhost ~]#
这就是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?
- []:这是提示符的分隔符号,没有特殊含义。
- root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。
- @:分隔符号,没有特殊含义。
- localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
- ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
- #:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。
家目录(又称主目录)是什么? Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家:用户在自己的家目录中拥有完整权限
- 超级用户的家目录:/root。
- 普通用户的家目录:/home/用户名。
9.2 命令的基本格式
[root@localhost ~]# 命令[选项][参数]
命令格式中的 [] 代表可选项,也就是有些命令可以不写选项或参数,也能执行。例如ls
命令之后不加选项和参数也能执行,不过只能执行最基本的功能,即显示当前目录下的文件名。
[root@localhost xm]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost xm]# ls -l
总用量 0
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 公共
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 模板
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 视频
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 图片
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 文档
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 下载
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 音乐
drwxr-xr-x. 2 xm xm 6 10月 5 06:03 桌面
如果加一个-l
选项,则可以看到显示的内容明显增多了。-l
是长格式(long list)的意思,也就是显示文件的详细信息(ls -a
显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一)。
Linux 的选项又分为短格式选项(-l)和长格式选项(--all)。短格式选项是英文的简写,用一个减号调用,一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项。
9.3 cd 命令,是 Change Directory 的缩写,用来切换工作目录。
cd ~ 代表回到当前登录用户的主目录
cd . 当前目录
cd .. 回到上级目录(cd 空格在..)
9.4 pwd 命令
pwd 命令,是 Print Working Directory (打印工作目录)的缩写,功能是显示用户当前所处的工作目录。
[root@localhost xm]# pwd
/home/xm
9.5 mkdir 命令和 rmdir 命令
mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。
- -m 手动配置所创建目录的权限,
[root@localhost ~]# mkdir -m 755 test2
。 - -p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。
rmdir(remove empty directories 的缩写)命令用于删除空目录。rmdir -p lm/movie/jp/cangls
递归删除。
这个命令比较"笨",所以并不常用。后续我们会学习 rm 命令,使用此命令不但可以删除目录,还可以删除文件。
9.6 touch命令:创建文件及修改文件时间戳
创建一个 1.txt
[root@localhost xm]# touch 1.txt
修改文件时间戳
9.7 ln命令:硬链接和软链接
ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:
- 软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。
- 硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。
硬链接和软链接
9.8 cp 复制文件和目录
cp 命令,主要用来复制文件和目录。源文件可以有多个。
[root@localhost ~]# touch 1.txt
#建立源文件
[root@localhost ~]# cp 1.txt /tmp/
#把源文件不改名复制到 /tmp/ 目录下
复制目录只需使用 -r
(默认递归):
[root@localhost ~]# cp -r /root/movie/ /tmp/
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
9.9 rm命令:删除文件或目录
rm 可以永久性地删除文件系统中指定的文件或目录
-f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。
-r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。
[root@localhost ~]# rm -rf /test
#强制删除,一了百了
9.10 mv命令:移动文件或改名
mv 命令(move 的缩写),既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名,类似剪切。
#使用 "-v" 选项来查看详细的移动信息
[root@localhost ~]# mv -v *.txt /tmp
#如果源文件和目标文件在同一目录中,那就是改名。例如:
[root@localhost ~]# mv bols lmls
9.11 cat 命令
关于此命令,有人认为写 cat 命令的人是因为喜欢猫,因此给此命令起名为“cat”,其实不然,cat 是 concatenate(连接、连续)的简写。
#直接查看文件的内容
root@localhost ~]# cat hello.txt
hello i am cat
#将文件 file1.txt 和 file2.txt 的内容合并后输出到文件 file3.txt 中。
[root@localhost base]# cat file1.txt file2.txt > file3.txt
如果使用 "-n" 选项,则会显示行号,cat 出来的文件只读,cat 命令适合查看不太大的文件。为了浏览方便查看大文件时 cat 1.txt | more
或cat 1.txt less
9.12 more命令:分屏显示文件内容
more 命令可以分页显示文本文件的内容,使用者可以逐页阅读文件中内容。
more xiaoaojianghu.txt
more 命令的执行会打开一个交互界面,需要了解常用的交互命令:
交互指令 | 功能 |
---|---|
q 或 Q | 退出 |
v | 在当前行启动一个编辑器 |
回车键 | 向下移动一行 |
空格键 | 向下移动一页 |
/ 字符串 | 搜索指定的字符串 |
= | 显示当前行的行号 |
9.13 less 命令:查看文件内容(浏览文件推荐使用)
less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容,不同之处在于,使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
使用光标键可以在文本文件中前后(左后)滚屏; 提供更加友好的检索、高亮显示等操作;less 在屏幕底部显示一个冒号(:),等待用户输入命令,比如说,用户想向下翻一页,可以按空格键;如果想向上翻一页,可以按 b 键。
9.14 head 显示文件开头的内容
head 命令可以显示指定文件前若干行的文件内容,如不设置显示的具体行数,则默认显示 10 行的文本数据。
head 命令默认显示文件的开头 10 行内容。
如果想显示指定的行数,则只需使用 "-n" 选项即可,例如:
[root@localhost ~]# head -n 20 anaconda-ks.cfg
这是显示文件的开头 20 行内容,也可以直接写 "-行数",例如:
[root@localhost ~]# head -20 anaconda-ks.cfg
9.15 tail命令:显示文件结尾的内容
tail 命令和 head 命令正好相反,它用来查看文件末尾的数据。
它最常用于 Linux 查看 log(日志)文件,因为 Linux 的日志文件比较大且日志最新输出在文档的最下面,还可能是一直产生的。所以一般使用:
tail -f server.log
来动态查看日志最后十条记录。-f 表示循环读取
。
还有些组合键:
显示文件 server.log 的内容,从第 20 行至文件末尾:
tail +20 server.log
显示文件 server.log 的最后 10 个字符:
tail -c 10 server.log
9.16 grep:查找文件内容和管道符 |
以及 Shell 重定向(输入输出重定向)
grep 命令的由来可以追溯到 UNIX 诞生的早期,在 UNIX 系统中,搜索的模式(patterns)被称为正则表达式(regular expressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global(全面的),一旦找到相匹配的内容,用户就像将其输出(print)到屏幕上,而将这一系列的操作整合到一起就是 global regular expressions print,而这也就是 grep 命令的全称。
说白了 grep 就是 windows 里面的查找文件。都是使用正则查找的。
假设有一份 emp.data 员工清单,现在要搜索此文件,找出职位为 CLERK 的所有员工,则执行命令如下:
[root@localhost ~]# grep CLERK emp.data
#忽略输出内容
重定向分为两种,一种输入重定向,一种是输出重定向;从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思。
输入输出方向就是数据的流动方向:
- 输入方向就是数据从哪里流向程序。数据默认从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向。
- 输出方向就是数据从程序流向哪里。数据默认从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向。
输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。Bash 支持的输出重定向符号常见的两个如下:
代表的是覆盖,>>代表的是追加。
ls -l >> a.txt
#列表的内容追加到 a.txt
cal >> a.txt
#a.txt里面追加一个日历
echo "自己写点东西加进去" >> a.txt
#自己写点东西加进去
cat xiaoaojianghu.txt << a.txt
#打开笑傲江湖的内容在追加到 a.txt 里面
上面的 echo 指令表示输出内容到控制台:
[root@localhost xm]# echo "输出内容到控制台"
输出内容到控制台
[root@localhost xm]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH
输出环境变量。
Shell 有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),用 |
表示,称为管道符。
command1 | command2
当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。大部分的 Linux 命令都可以用来形成管道。
例如:查看 a.txt 文件里面的 yes ,同时显示行号和不区分大小写输出。
[root@localhost xm]# cat a.txt | grep -ni yes
1:yes
6:yes
10:Yes
还有个常用的用法:
cat a.txt | less
#=less a.txt
9.17 history:查找所有的执行过的历史命令
9.18 yes命令在命令行中输出指定的字符串,直到yes进程被杀死。不带任何参数输入yes命令默认的字符串就是y。
[root@localhost ~]# yes testline
testline
testline
testline
testline
testline
testline
testline
testline
...一直重复打印 testline,按Ctrl+C结束。
9.19 Find命令: 用来在指定目录下查找文件
将目前目录及其子目录下所有后缀名是.txt
的文件列出来。
# find . -name "*.txt"
查找 /home目录下所有大于 2M 的文件(+n大于,-n小于,n等于):
[root@localhost xm]# find /home -size +2M
/home/xm/xiaojianghu.txt
查找 /home 目录下用户名为 xm 的文件:
[root@localhost xm]# find /home -user xm | less
locate 查找与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。例如:
[root@localhost xm]# locate xiaojianghu.txt
/home/xm/xiaojianghu.txt
/root/.cache/vmware/drag_and_drop/Lgeg3z/xiaojianghu.txt
9.20 cal命令:用于显示当前日历
则显示当前月份:
[root@localhost xm]# cal
十月 2019
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
显示2020年的日历:
[root@localhost xm]# cal 2020
2020
一月 二月 三月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 1 2 3 4 5 6 7
5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14
12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21
19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28
26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31
四月 五月 六月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
七月 八月 九月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
十月 十一月 十二月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
9.21 date:命令可以用来显示或设定系统的日期与时间
显示当前时间:
[root@localhost ~]# date
2019年 10月 06日 星期日 13:02:34 CST
十、Linux 压缩文件和解压文件。
10.1 tar 命令
Linux 系统中,最常用的打包命令就是 tar。实现了对 7z,gzip,xz,bzip2 ,gz,zip,tar,tar.gz 压缩格式的支持,tar 的解压和压缩都是同一个命令,只是参数不同。
- -z:代表打包同时压缩。
- -v:显示打包文件过程。
- -c:将多个文件或目录进行打包。
- -f :指定包的文件名。
- -x:代表解压缩。
[root@localhost yasuo]# ls
a.txt
[root@localhost yasuo]# tar -zcvf 1.zip a.txt
[root@localhost yasuo]# ls
1.zip a.txt
tar -zcvf 1.zip a.txt
把 1.txt 压缩变成 1.zip。
解压:
tar -zxvf 1.zip
10.2 gzip:压缩文件,压缩后的文件是 .gz 格式的文件 ;gunzip:解压文件
通过 gzip 命令压缩得到的新文件,其扩展名通常标记为 .gz
。gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件。
对 a.txt 进行压缩,我们发现生成了一个 a.txt.gz,原来的 a.txt 文件没了。
[root@localhost yasuo]# gzip a.txt
[root@localhost yasuo]# ls
a.txt.gz
反过来进行解压:
[root@localhost yasuo]# gunzip a.txt.gz
[root@localhost yasuo]# ls
a.txt
a.txt.gz 解压后也没了。
10.3 zip/unzip 指令:压缩文件或目录
我们经常会在 Windows 系统上使用 “.zip”格式压缩文件,zip 用来压缩,unzip 用来解压缩。其中 -r
递归压缩,即压缩目录;-d
指定解压存放目录。
压缩一个目录:
[root@localhost xm]# ls
xiaojianghu.txt yasuo
[root@localhost xm]# zip -r yasuo ./
adding: yasuo/ (stored 0%)
adding: yasuo/1.zip (stored 0%)
adding: yasuo/a.txt (deflated 59%)
adding: xiaojianghu.txt (deflated 59%)
[root@localhost xm]# ls
xiaojianghu.txt yasuo yasuo.zip
解压:
[root@localhost xm]# unzip yasuo.zip
#解压到当前目录
[root@localhost xm]# unzip yasuo.zip -d /home
#解压到指定目录
十一、权限管理
权限管理,其实就是指对不同的用户,设置不同的文件访问权限,包括对文件的读、写、删除等,对非 root 用户来说,它们只能在自己的主目录下才具有写权限,而在主目录之外,只具有访问和读权限。
11.1 查看文件所有者
[root@localhost home]# ls -al
总用量 2952
drwxr-xr-x. 4 root root 52 10月 6 19:57 .
dr-xr-xr-x. 17 root root 245 10月 5 21:16 ..
-rw-------. 1 root root 3020051 10月 6 00:03 xiaojianghu.txt
drwxr-xr-x. 3 root root 59 10月 6 19:56 xm
drwxr-xr-x. 2 root root 32 10月 6 19:47 yasuo
Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 注意,这三个权限的位置不会改变,如果没有权限,就会使用 [ - ] 代替。也可用数字表示为:r=4,w=2,x=1 因此 rwx=4+2+1=7
每个文件的属性由左边第一部分的10个字符来确定(如下图)。
11.2 chgrp命令:修改文件和目录的所属组
chgrp 理解为是 "change group" 的缩写。
xiaojianghu.txt 文件由组 root 修改到 shaolin 组。
[root@localhost home]# groupadd shaolin
[root@localhost home]# chgrp shaolin xiaojianghu.txt
[root@localhost home]# ls -l
总用量 2952
-rw-------. 1 root shaolin 3020051 10月 6 00:03 xiaojianghu.txt
drwxr-xr-x. 3 root root 59 10月 6 19:56 xm
drwxr-xr-x. 2 root root 32 10月 6 19:47 yasuo
11.3 chown 命令:修改文件和目录的所有者
chown 命令,可以认为是 "change owner" 的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。
xiaojianghu.txt 文件由的所有者由 root 修改为 xm。
[root@localhost home]# chown xm xiaojianghu.txt
[root@localhost home]# ls -l
总用量 2952
-rw-------. 1 xm shaolin 3020051 10月 6 00:03 xiaojianghu.txt
drwxr-xr-x. 3 root root 59 10月 6 19:56 xm
drwxr-xr-x. 2 root root 32 10月 6 19:47 yasuo
修改 yasuo 目录文件的权限:
[root@localhost home]# chown -R xm yasuo
-R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。
11.4 chmod命令:修改文件或目录的权限
Linux 系统中,文件的基本权限由 9 个字符组成,拿 rwxrw-r-x 来说,所有者、所属组和其他人分别对应的权限值为:
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
所以,此权限对应的权限值就是 765。
chmod 命令还可以使用字母修改文件权限,既然文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
加入
chmod u+w a.txt
a.txt 的所有者加入写(w)权限。+ 变成 - 就是移除。
设置 xiaojianghu.txt 的文件权限为 765
[root@localhost home]# ls -l
总用量 2952
-rw-------. 1 xm shaolin 3020051 10月 6 00:03 xiaojianghu.txt
[root@localhost home]# chmod 765 xiaojianghu.txt
[root@localhost home]# ls -l
总用量 2952
-rwxrw-r-x. 1 xm shaolin 3020051 10月 6 00:03 xiaojianghu.txt
chmod 765 xiaojianghu.txt
可等价于 chmod u=rwx,g=rw,o=r-x xiaojianghu.txt