admin管理员组文章数量:1599279
Linux课堂笔记
1 初识Linux
1.1 操作系统
主流操作系统按照应用领域的划分
1、桌面操作系统
- Window 系列
- 用户群体大
- macOS
- 细节处理的更好, 没有windows软件丰富, 价格高
- Linux
- 应用软件少
2、服务器操作系统
-
Linux
- 安全、稳定、免费
- 占有率高
-
Windows Server
- 付费
- 占有率低
3、嵌入式操作系统
Linux
4、移动设备操作系统
- IOS
- Android (基于Linux)
- 华为鸿蒙(基于linux)
1.3 Linux发展历程
1.3.1 什么是 Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
1.3.2 Linux的特点
基本思想
Linux的基本思想有两点:
第一:一切都是文件
包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言
第二:每个软件都有确定的用途
完全免费
完全兼容POSIX1.0标准
多用户、多任务
良好的界面
支持多种平台
1.4 Linux和Unix区别
1、开源情况
Unix 是商业化的,而 Linux 是开源的,是免费、公开源代码的。
2、硬件适用
Unix 系统大多是与硬件配套的,也就是说,大多数Unix系统如AIX、HP-UX等是无法安装在 x86 服务器和个人计算机上的,而 Linux则可以运行在多种硬件平台上。
可以先学习Linux后再学习Unix,因为Linux可以方便的在虚拟机上运行,防止新手的误操作。
3、本质不同
Linux是开放源代码的自由软件,用户对前者有很高的自主权,在实际的的开发是处在一个完全开放的环境之中;
而Unix是对源代码实行知识产权保护的传统商业软件,用户的开发完全是处在一个黑箱之中,只有相关的开发人员才能够接触的产品的原型;
2 系统与设置命令
2.2 Linux 用户和用户组管理
2.2.1 Linux账号管理
1) 添加用户
使用者权限:管理员用户
useradd 选项 用户名
参数说明:
-
选项:
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
-
用户名:
指定新账号的用户名(后续我们可以使用这个用户名进行系统登录)。
添加用户czbk(传智播客的首拼)执行
useradd czbk
我们使用useradd命令创建了一个用户czbk
useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。
我们在使用useradd新增用户的时候,出现了权限不足,也就是说我们使用用户itcast没有创建用户的权限。
我们通过管理员账号root进行创建,首先我们从控制台中切换到root
su root
在 密码的地方输入我们的root密码【root】即可进入到root用户下。
我们在root下继续创建czbk用户
2) 用户口令
使用者权限:管理员用户
指定和修改用户口令的Shell命令是passwd
。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
设置当前用户的口令
passwd czbk
3) 修改用户
usermod 命令通过修改系统帐户文件来修改用户账户信息
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
使用者权限:管理员用户
修改已有用户的信息使用usermod
命令,其格式如下:
usermod 选项 用户名
下面命令将用户czbk用户名修改成czbk2019
usermod -l czbk2019 czbk
4) 删除用户
使用者权限:管理员用户
删除一个已有的用户账号使用userdel
命令,其格式如下:
userdel 选项 用户名
-f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件
此命令删除用户czbk2019
userdel czbk2019
2.2.2 Linux用户组
引子:
为了方便用户管理, 提出了 组 的概念
新增一个账户,它默认属于自己(账户)的组
一个用户可以有一个或者多个组
1) 增加用户组
新增一个用户组(组名可见名知意,符合规范即可),然后将用户添加到组中
使用者权限:管理员用户
groupadd 选项 用户组
使用的选项有:
- -g GID 指定新用户组的组标识号(GID)。
- -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
新增用户组czbk-it
groupadd czbk-it
上面的命令向系统中增加了一个新组czbk-it,新组的组标识号是在当前已有的最大组标识号的基础上加1
2) 修改用户组
使用者权限:管理员用户
groupmod 选项 用户组
常用的选项有:
- -g GID 为用户组指定新的组标识号。
- -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- -n新用户组 将用户组的名字改为新名字
groupmod -n czbk-it-2019 czbk-it
上面的命令将组czbk-it的组名修改为czbk-it-2019。
3) 查询用户所属组
在查询用户所属的用户组前,我们先增加一个用户ituser-groups
useradd ituser-groups
要查询一个用户属于哪个用户组,使用groups命令,其格式如下
groups 用户名
查询用户ituser-groups属于某个用户组,执行groups命令
groups ituser-groups
4) 删除用户组
使用者权限:管理员用户
要删除一个已有的用户组,使用groupdel命令,其格式如下
groupdel 用户组
删除czbk-it-2019用户组
groupdel czbk-it-2019
2.2.3 将用户添加到组
1、创建一个新的组,并添加组ID(需要切换到root用户)
groupadd -g 8888 itbj2020group
2、创建3个用户(需要切换到root用户)
useradd itbeijinguser1
useradd itbeijinguser2
useradd itbeijinguser3
3、将上面三个用户添加到组itbj2020group
我们通过passwd命令将三个用户添加到组
什么是gpasswd:
gpasswd 是 Linux 下工作组文件 /etc/group 和 /etc/gshadow 管理工具,用于将一个用户添加到组或者从组中删除。
语法
gpasswd [可选项] 组名
将上面的三个用户使用gpasswd添加到组(需要切换到root用户)
gpasswd -a itbeijinguser1 itbj2020group
gpasswd -a itbeijinguser2 itbj2020group
gpasswd -a itbeijinguser3 itbj2020group
查看用户组下所有用户(所有用户)
注意
此处的grep命令我们将在文件管理章节详细讲解,这里先使用它查看下效果
grep 'itbj2020group' /etc/group
2.3 系统管理
系统管理,说的就是我们的CentOS系统,它不同于Windwos,CentOS是字符界面,我们需要通过命令进行操作,在当前章节,我们先从基本命令学起,比如创建用户、设置密码、修改用户以及用户组的相关操作。也为我们后面的章节打下基础
2.3.1 日期管理
当前日期如果通过date进行设置,在系统重启后不会保存date的设置,常用的只是通过date命令查看日期
date 可以用来显示或设定系统的日期与时间
使用者权限:所有用户
语法如下:
date [参数选项]
参数
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT;
–help:在线帮助;
–version:显示版本信息
1、设置时间
用 -s选项可以设置系统时间,如下:
date -s "2019-12-11 16:15:00"
2、显示时间
date
总结:
上面提到了很多知识:即UTC/GMT/CST/东八区
总结一下就是,北京时间(中国国家标准时间CST)采用东八区区时,即:
协调世界时(UTC)+8 / 格林尼治时间(GMT)+8
也就是说+8后的时间才是北京时间
2.3.2 显示用户
logname命令用于显示用户名称。
执行logname指令,它会显示目前用户的名称
语法为如下:
logname [--help][--version]
参数:
- –help 在线帮助。
- –vesion 显示版本信息。
显示登录账号的信息
logname
2.3.3 su切换账户
su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
使用权限:所有使用者。
语法如下:
su
变更帐号为 root 并在执行 ls 指令后退出返回原使用者
su -c ls root
切换到root
su root
2.3.4 id命令
我们如果需要查看当前账号详细信息的时候,比如查看它的用户id、群组id以及所属组的时候,我们就可以使用id命令进行查看
id命令用于显示用户的ID,以及所属群组的ID。
id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
使用者权限:所有用户
语法
id [-gGnru][--help][--version][用户名称]
参数说明:
- -g或–group 显示用户所属群组的ID。
- -G或–groups 显示用户所属附加群组的ID。
- -n或–name 显示用户,所属群组或附加群组的名称。
- -r或–real 显示实际ID。
- -u或–user 显示用户ID。
- -help 显示帮助。
- -version 显示版本信息。
显示当前用户信息
id
总结
id命令参数虽然很多
但是常用的也就是id命令,不带参数的
主要看他的uid和组信息
2.3.5 sudo执行
比如我们使用普通用户操作用户或者操作用户组、以及修改网卡配置文件的时候,需要切换到root用户才操作,此时我们可以使用sudo命令提高普通用户的操作权限,以达到操作目的
sudo:控制用户对系统命令的使用权限,root允许的操作。
通过sudo可以提高普通用户的操作权限
使用者权限:普通用户
语法如下:
sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
sudo command
参数说明:
- -V 显示版本编号
- -h 会显示版本编号及指令的使用方式说明
- -l 显示出自己(执行 sudo 的使用者)的权限
- -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
- -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
- -b 将要执行的指令放在背景执行
- -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
- -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
- -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
- -H 将环境变数中的 HOME 指定为要变更身份的使用者HOME目录(如不加 -u 参数就是系统管理者 root )
- command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
sudo命令使用
sudo ls
指定root用户执行指令
sudo -u root ls -l
修改网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
那么我们在修改上面的 命令,使用sudo进行修改
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
2.3.6 top命令
top命令用于实时显示 process 的动态。
使用权限:所有使用者。
显示进程信息
top
各进程(任务)的状态监控属性解释说明:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
显示完整命令,与top命令不同的就是command属性像是进行了命令补全
top -c
显示指定的进程信息,以下显示进程号为6972的进程信息,CPU、内存占用率等
top -p 6972
top命令的用法很多
但是常用的就是top(不带参数),有的时候,在进程比较多的时候,我们常常记住进程的pid,然后通过top -p pid进行查看
也就是说,top+ top -p是经常被用到的
2.3.7 ps命令
ps命令类似于我们在Windows中通过任务管理器查看进程信息
Linux ps命令用于显示当前进程 (process) 的状态信息
使用者权限:所有用户
语法如下:
ps
显示进程信息
ps -A
显示指定用户信息
ps -u itcast
显示所有进程信息
ps -ef
2.3.8 kill命令
Linux kill命令用于删除执行中的程序或工作(可强制中断)
使用者权限:所有用户
语法如下:
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
- -l <信息编号> 若不加<信息编号>选项,则-l参数会列出全部的信息名称。
- -s <信息名称或编号> 指定要送出的信息。
- [程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
杀死一个进程
kill 15642
强制杀死进程
kill -KILL 15642
彻底杀死进程
kill -9 15642
杀死指定用户所有进程
1.方法一 过滤出itcast用户进程
kill -9 $(ps -ef | grep itcast)
2.方法二,直接杀死
kill -u itcast
注意
上面列举了很多kill进程的命令
但是我们我们常用的就是kill -9命令,我们常常找到进程的pid
然后通过kill -9进行杀死进程
2.3.9 关机命令
shutdown命令可以用来进行关闭系统,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机
使用者权限:管理员用户
语法如下:
shutdown [-t seconds] [-rkhncfF] time [message]
参数说明:
- -t seconds : 设定在几秒钟之后进行关机程序。
- -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
- -r : 关机后重新开机。
- -h : 关机后停机。
- -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
- -c : 取消目前已经进行中的关机动作。
- -f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。
- -F : 关机时,强迫进行 fsck 动作。
- time : 设定关机的时间。
- message : 传送给所有使用者的警告讯息。
立即关机
shutdown -h now
或者
shudown
指定1分钟后关机,1分钟关机并显示警告信息
shutdown +1 “System will shutdown after 1 minutes”
指定1分钟后重启,并发出警告信息
shutdown –r +1 “1分钟后关机重启”
2.3.10 重启命令
reboot命令用于用来重新启动计算机
使用者权限:管理员、普通(需要验证)用户
语法如下:
reboot [-n] [-w] [-d] [-f] [-i]
参数:
- -n : 在重开机前不做将记忆体资料写回硬盘的动作
- -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
- -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
- -f : 强迫重开机,不呼叫 shutdown 这个指令
- -i : 在重开机之前先把所有网络相关的装置先停止
开始重新启动
reboot
此时我们的虚拟机正在重启**(别忘记使用root用户执行)**
2.3.11 who命令
who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等
使用者权限:所有使用者都可使用。
语法如下:
who - [husfV] [user]
参数说明:
- -H 或 --heading:显示各栏位的标题信息列;
- -i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
- -m:此参数的效果和指定"am i"字符串相同;
- -q 或–count:只显示登入系统的帐号名称和总人数;
- -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
- -w 或-T或–mesg或–message或–writable:显示用户的信息状态栏;
- –help:在线帮助;
- –version:显示版本信息
显示当前登录系统的用户
who
显示明细(标题)信息
who -H
2.3.12 timedatectl命令
使用者权限:所有使用者都可使用,设置时间需要管理员,下面会标注。
显示系统的当前时间和日期,使用命令行中的timedatectl命令
timedatectl status
查看当前时区
timedatectl | grep Time
或者
timedatectl
查看所有可用的时区
timedatectl list-timezones
设置本地时区
timedatectl set-timezone "Asia/Shanghai"
禁用时间同步(使用管理员账户)
timedatectl set-ntp false
在执行
timedatectl set-time "2019-03-11 20:45:00"
注意: 如果ntp时间同步为true时无法修改时间设定,下面马上介绍
打开ntp
timedatectl set-ntp true
在执行
timedatectl set-time "2019-03-11 20:45:00"
启用时间同步
NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于同步计算机之间的系统时钟。timedatectl实用程序可以自动同步你的Linux系统时钟到使用NTP的远程服务器。
要开始自动时间同步到远程NTP服务器,在终端键入以下命令。
timedatectl set-ntp true
比如,在上面我们使用timedatectl set-time “2019-03-11 20:45:00”,如下图
此时我们执行timedatectl set-ntp true,发现时间正常同步过来了如下图
要禁用NTP时间同步,在终端键入以下命令
timedatectl set-ntp false
执行上面的 命令即可关闭ntp
总结
在实际使用过程中
我们经常使用timedatectl进行时区、CST、UTC的设置
2.3.13 clear命令
clear命令用于清除屏幕
使用者权限:所有使用者都可使用。
语法
clear
通过执行clear命令,就可以把缓冲区的命令全部清理干净了
2.3.14 exit命令
exit命令用于退出目前的shell。
执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
退出码(exit status,或exit code)的约定:
0表示成功(Zero - Success)
非0表示失败(Non-Zero - Failure)
2表示用法不当(Incorrect Usage)
127表示命令没有找到(Command Not Found)
126表示不是可执行的(Not an executable)
>=128 信号产生
语法如下
exit [状态值]
退出终端
# exit
exit会被经常在shell中使用
我们在明天的课程【综合案例】中会使用到exit
2.4 总结
用户账号管理和用户组是我们在实际使用过程中常用的命令,学习完创建账号、创建组后,需要通过gpasswd命令将用户添加到组,这也是我们学习的最终目的
系统管理的常用命令都是在开发过程中经常使用到的
3 Linux目录管理
3.1 Linux 文件与目录管理
3.1.1 目录常用命令
- ls: 列出目录
- cd: 切换目录
- pwd: 显示目前的目录
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
- cp: 复制文件或目录
- rm: 移除文件或目录
- mv: 移动文件与目录或修改文件与目录的名称
自动补全
- 在敲出 文件/ 目录 / 命令 的前几个字母之后, 按下
tab
键 - 如果还存在其他 文件 / 目录 / 命令, 再按一下tab键, 系统会提示可能存在的命令
1) ls (列出目录)
ls命令相当于我们在Windows系统中打开磁盘、或者打开文件夹看到的目录以及文件的明细
语法如下:
ls [选项] 目录名称
选项与参数:
- -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
将根目录下的所有文件列出来(含属性与隐藏档)
ls -al ~
ls -l
ls -l
可以查看文件夹下文件的详细信息, 从左到右 依次是:
- 权限(A区域), 第一个字符如果是
d
表示目录 - 硬链接数(B区域), 通俗的讲就是有多少种方式, 可以访问当前目录和文件
- 属主(C区域), 文件是所有者、或是叫做属主
- 属组(D区域), 文件属于哪个组
- 大小(E区域):文件大小
- 时间(F区域):最后一次访问时间
- 名称(G区域):文件的名称
ls
总结
以上三种是经常被使用到的命令
它们之间的区别是
ls 显示不隐藏的文件与文件夹
ls -l 显示不隐藏的文件与文件夹的详细信息
ls -al 显示所有文件与文件夹的详细信息
2) pwd显示当前目录
执行pwd命令相当于我们在Windows系统路径导航栏中查看到的当前浏览位置信息
pwd 是 Print Working Directory 的缩写,也就是显示目前所在当前目录的命令。
使用者权限:所有使用者都可使用。
查看当前所在目录
pwd -P
3) cd (切换目录)
Linux的cd切换目录,相当于我们在Windows中通过鼠标或者快捷键点开不同的目录
cd是Change Directory的缩写,这是用来变换工作目录的命令
使用者权限:所有使用者都可使用。
语法如下:
cd [相对路径或绝对路径]
- 绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。 - 相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法啦!
1、使用相对路径定位目标
- 特征: 相对路径 输入路径时, 最前面不是以 “/” 开始的, 表示相对 当前目录 所在的位置
- 缺点: 参照工作目录 发生变化 相对路径也要发生变化
需求1: 当前工作目录是 /usr, 使用相对路径 切换到 /usr/tmp 目录下
需求2: 当前工作目录是 /root, 使用相对路径 切换到 /usr/tmp 目录下
注意:
cd ~ 表示回到根目录
2、使用绝对路径定位目标
- 特征: 绝对路径 在输入路径时, 最前面是以
/
开始的, 表示 从 根目录 开始的具体目录位置 - 优点: 定位准确, 不会因为 工作目录变化 而变化
需求1: 当前工作目录是 /usr, 使用绝对路径 切换到 /usr/tmp 目录下
需求2: 当前工作目录是 /root, 使用绝对路径 切换到 /usr/tmp 目录下
执行效果如下
总结
- 相对路径 在输入路径时, 最前面不是以
/
开始的 , 表示相对 当前目录 所在的目录位置- 绝对路径 在输入路径时, 最前面是以
/
开始的, 表示 从 根目录 开始的具体目录位置
4) mkdir(创建目录)
引子:
Linux的mkdir命令相当于我们在Windows中通过鼠标或者快捷键新建文件夹
mkdir命令用于建立名称为 dirName 之子目录
使用权限:于目前目录有适当权限的所有使用者
语法
mkdir [-p] dirName
参数说明:
- -p 确保目录名称存在,不存在的就建一个
建立一个名为jinyanlong 的子目录
mkdir jinyanlong
查看新建的 文件
在工作目录下的 aaa目录中,建立一个名为 bbb的子目录。 若 aaa目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 aaa目录不存在,则产生错误。)
mkdir -p aaa/bbb
执行效果如下
这里为了显示更直观,我们使用了tree命令
后面在讲解到yum的时候,会详细讲解
此处先使用
由上图我们发现,aaa目录被强制创建,里面包含了bbb文件。
5) rmdir(删空目录)
Linux的rmdir命令相当于我们在Windows中通过鼠标或者快捷键删除文件夹。
稍微有点不同的就是在Linux中删除子目录的时候,如果主目录下没有了目录以及文件,会连同主目录同时删除了(需要写Linux带有P的参数)
rmdir命令删除空的目录
使用权限:于目前目录有适当权限的所有使用者。
语法
rmdir [-p] dirName
参数:
- -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
将工作目录下,名为 jinyanlong 的子目录删除 :
rmdir jinyanlong
在工作目录下的 aaa目录中,删除名为 bbb的子目录。若 bbb删除后,aaa目录成为空目录,则 aaa同时也会被删除
rmdir -p aaa/bbb
总结:
rmdir -p aaa/bbb也就是说
在删除bbb目录完成后,发现aaa目录也是空目录了,在删除完bbb后aaa也同时被删除了。
6) cp(文件复制)
Linux的cp命令相当于我们在Windows中通过鼠标或者快捷键复制文件或者目录
cp命令主要用于复制文件或目录。
使用权限:于目前目录有适当权限的所有使用者
语法
cp [options] source dest
或
cp [options] source... directory
参数说明:
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。
- -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r/R:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -l:不复制文件,只是生成链接文件。
我们将当前目录"aaa/"下的所有目录以及文件复制到新目录"ccc"下,输入如下命令:
1、数据准备
创建aaa目录并且aaa下包含bbb目录
mkdir -p aaa/bbb
mkdir -p ccc
2、执行复制
cp –r aaa/* ccc
总结:
用户使用该指令复制目录时,必须使用参数"-r"或者"-R"。
如果不加参数"-r"或者"-R",只复制文件,而略过目录
7) rm(删除目录)
Linux的rm命令相当于我们在Windows中通过鼠标或者快捷键删除文件或者目录
rm命令用于删除一个文件或者目录。
使用权限:于目前目录有适当权限的所有使用者
语法
rm [options] name...
参数:
- -i 删除前逐一询问确认。
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
- -r 将目录及以下之档案亦逐一删除。
如果我们要删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r"
rm -r ccc
注意
文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令
如果删除文件(比如.sh 、.txt)
直接使用rm name.txt
8) mv(移动文件)
Linux的mv命令相当于我们在Windows中通过鼠标或者快捷键剪切(+重命名)+粘贴文件或者目录
mv 命令用来为文件或目录改名、或将文件或目录移入其它位置
语法
mv [options] source dest
mv [options] source... directory
参数说明:
- -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
- -f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
将文件 aaa 更名为 bbb :
1、创建aaa目录、
mkdir aaa
2、开始重命名
mv aaa bbb
将ccc目录放入ddd目录中。
注意,如果ddd目录不存在,则该命令将ccc改名为ddd。
创建ccc
mkdir ccc
开始移动
mv ccc/ ddd
3.2 Linux 文件基本属性
在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:
ls -l
实例中,bin文件的第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
每个文件的属性由左边第一部分的10个字符来确定(如下图)。
从左至右用0-9这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;
第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-“字符表示没有写权限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用”-"字符表示,则没有执行权限。
3.3 Linux文件属主和属组
3.3.1 chgrp更改属组
chgrp命令用于变更文件或目录的所属群组。
文件或目录权限的的拥有者由所属群组来管理。可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可
语法如下
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
改变文件的群组属性
我们通过root用户进入(如下图),上接上面的例子
我们的aaa文件的属主和属组都属于itcast(如下图)
我们现在通过chgrp命令将文件aaa的属组更改成root(其他也可以)
chgrp -v root aaa
ls -l
3.3.2 chown更改属主和属组**
Linux是多任务操作系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限
使用权限 : 管理员账户
语法如下
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
我们通过root用户进入(如下图),上接上面的例子
我们的aaa文件的属主属于itcast、属组属于root
我们现在通过chgrp命令将文件aaa的属主更改成root,执行
chown root aaa
我们将aaa文件的拥有者与群组改回为itcast:
注意:chown命令可以更改属主和属组
chown itcast:itcast aaa
我们通过下面的命令查询文件aaa的属主是否发生了变化,执行
ls -l
3.3.3 chmod权限命令
Linux文件属性有两种设置方法,一种是数字,一种是符号
Linux的文件调用权限分为三级 : 文件属主、属组、其他。利用 chmod 可以控制文件如何被他人所调用。
使用权限 : 所有使用者
语法
chmod [-cfvR] [--help] [--version] mode file...
参数说明
mode : 权限设定字串,格式如下
[ugoa...][[+-=][rwxX]...][,...]
解释:
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
1) 数字权限
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组(owner/group/others就是所说的三个一组 )的,我们也可以使用数字来代表各个权限,各权限的分数对照表如下
各权限的数字对照表:[r]:4;[w]:2;[x]:1;[-]:0
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是770啦,变更权限的指令chmod的语法是这样的
chmod [-R] xyz 文件或目录
选项与参数:
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
- -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
上面的 可以表示如下
chmod -R 770 档案或目录
我们进入itcast用户创建文件czbk.txt
touch as.txt
然后切换到root
那么命令如下:
chmod -R 777 as.txt
由此可见,as.txt的属主权限、属组权限、其他权限都发生了改变
由之前的【-rw-rw-r–】变成【-rwxrwxrwx】
根据前面的换算我们已经知道如何将一个文件的属主、属组、其他权限换算成数字了,换算成数字后,我们只需要通过chmod命令即可更改文件的权限
2) 符号权限
还有一个改变权限的方法,就是 符号权限,我们先回顾下之前提到的9个权限
- (1)user 属主权限
- (2)group 属组权限
- (3)others 其他权限
那么我们就可以使用 u, g, o 来代表三种身份的权限!
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看
如果我们需要将文件权限设置为 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
上接上面的例子,如下图
我们将as.txt的权限设置为**-rwxr-xr–**
执行
chmod u=rwx,g=rx,o=r as.txt
由上图我们发现,as.txt的权限变成了-rwxr-xr–
假如我们要将权限去掉而不改变其他已存在的权限呢?举个例子,比如我要拿掉全部人的可读权限,则
chmod a-r as.txt
3.4 综合案例
需求:
比如一个公司的开发团队有三个用户:java、erlang、golang有一个文件目录tmp/work供他们开发,如何实现让这三个用户都对其具有写权限
1、首先,我们创建三个账户(切换到root)
adduser java
adduser erlang
adduser golang
2、增加用户组
groupadd -g 8888 dev-group
3、创建公共文件并设置权限
给文件/tmp/project2019/设置属组为dev-group
mkdir /tmp/project2019
chown -R :dev-group /tmp/project2019/
或者
chgrp -R dev-group /tmp/project2019/
4、将用户添加到组
gpasswd -a java dev-group
gpasswd -a erlang dev-group
gpasswd -a golang dev-group
查询dev-group组下所有用户
grep 'dev-group' /etc/group
切换到java用户看看是否有写入权限
su java
新建文件
在我们上面创建的目录tmp/project2019/下面创建文件
mkdir java-files-new
我们发现目录project2019的文件属性为【drwxr-xr-x】
根据前面学的知识,我们拆分如下
【d】:文件类型
【rwx】:属主
【r-x】:属组
【r-x】:其他
现在答案就出来了,也就是说我们的属组权限是【r-x】,只有读和执行权限,没有写入权限,那么下面我们就给project2019目录增加写入权限。
6、增加写入权限
给project2019目录增加写入权限,执行下面的命令(前面已经学习过了)
记得切换到root下执行
chmod -R 770 project2019
此时我们发现project2019目录的属组权限变成了【rwx】即可读、可写、可执行
7、切换用户,继续写入
su java
mkdir java-files-new
ls -l
执行效果如下
由此发现,这个时候我们有了写入权限,java-files-new文件被成功写入
那么,其他两个用户golang、erlang也是和java一个组的,他们能不能正常写入呢,我们试试(从root切换过去)
su
su erlang
mkdir erlang-files-new
==============================
su
su golang
mkdir golang-files-new
ls -l
8、验证结论
为了验证上面的结论,我们新增一个用户itbeijing
看看能否正常新建文件
useradd itbeijing
su itbeijing
mkdir itbeijing-files-new
我们刚刚新创建的用户在创建文件的时候发现了权限不足。
由此说明用户itbeijing用户的属组和文件的属组不一样,所以没有权限。
本文标签: Linux
版权声明:本文标题:Linux(day1) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728312822a1153254.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论