[华为云在线课程][Linux常用命令及Shell编程][学习笔记][下]
【摘要】 5.Linux用户及用户组 5.1.用户及用户组Linux用户只有两个级别:root和非root。Linux中还有一部分用户,如:apache、mysql、nobody、ftp等,这些也都是非root用户,即普通用户。Linux权限实际上是不同用户所能访问的文件的不同产生的假象。这些假象的造成,要涉及另一个概念:用户组。一个用户至少要属于一个用户组。一个用户可以属于多个用户组。Linux采...
5.Linux用户及用户组
5.1.用户及用户组
- Linux用户只有两个级别:root和非root。
- Linux中还有一部分用户,如:apache、mysql、nobody、ftp等,这些也都是非root用户,即普通用户。Linux权限实际上是不同用户所能访问的文件的不同产生的假象。这些假象的造成,要涉及另一个概念:用户组。
- 一个用户至少要属于一个用户组。
- 一个用户可以属于多个用户组。
- Linux采用组来组织和管理用户
- 在Linux中每个用户有唯一的用户标识符UID,该UID是一个无符号整数。
- 每个用户也必须至少属于一个组,也有组标识符GID
- 其中UID与GID独立编号:
- UID 0 root用户
- UID 1-999是占坑用户,即一些无法登录的用户
- UID 1000以上是正常可登录用户
5.2.创建用户账号
- useradd命令
- useradd示例一 - 创建用户账号
[root@localhost ~]# useradd user1
- 功能:创建一个用户user1,同时在/etc/passwd和/etc/shadow文件增加一行,并自动为用户创建相应的主目录:/home/user1。
- 说明:/etc/passwd文件记录了系统中每个用户的用户名、UID号、GID号、主目录、shell等信息。
- 注意:用户的口令原来也存放在此文件中,现在为了保证安全采用了影子口令文件/etc/shadow来保存每个用户的口令。
- useradd示例二 - 创建用户账号并设置相应属性值
[root@localhost ~]# userdel -u 600 -g mygroup1 -G mygroup2 -d /home/student1 s1
- 功能:创建用户s1,其中参数
- -u 指定UID为600;
- -g 指定用户的主要组为mygroup1
- -G 指定用户的附加组为mygroup2,每个用户可以有多个附加组
- -d 指定用户的主目录为/home/student1
5.3.删除用户帐号
- userdel命令
- userdel示例一 - 删除用户
[root@localhost ~]# userdel user1
- 功能:删除指定用户user1。
- userdel示例二 - 删除用户的同时删除其主目录
[root@localhost ~]# userdel -r user1
- 功能:删除指定用户同时删除其主目录。
5.4.创建组账号
- groupadd命令
- groupadd示例一 - 创建组账号
[root@localhost ~]# groupadd mygroup2
- 功能:创建一个新的组,GID号为现有GID的下一个顺序编号。
- 说明:创建一个组的同时会在/etc/group文件中为该组增加相应的一行,用来记录该组的名称、GID和成员等信息。
- groupadd示例二 - 创建组账号并设置GID号
[root@localhost ~]# groupadd -g 5000 mygroup2
- 功能:创建一个新组,并指定GID号为5000,其中-g用来设置用户的主要组,每个用户都有一个主要组。
5.5.删除组
- groupdel命令
[root@localhost ~]# groupdel mygroup2
- 功能:删除指定的组
- 注意:当某个组是某现有用户的主要组时,则不能被删除。
5.6.改变口令
- passwd命令
[root@localhost ~]# passwd Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
- 功能:普通用户只可以修改自己的口令。
5.7.禁止用户登录
- passwd示例 - 禁止用户登录
[root@localhost ~]# passwd -l hello Locking password for user hello. passwd: Success
- 功能:参数 -l 可以给指定用户加锁,禁止用户登录。
5.8.恢复用户登录
- passwd示例 - 恢复用户登录
[root@localhost ~]# passwd -u hello
- 功能:参数-u可以给指定用户解锁,恢复用户登录
5.9.删除用户口令
- password示例 - 删除用户口令
[root@localhost ~]# passwd -d hello Removing password for user hello. passwd: Success
- 功能:参数-d可以删除指定的用户口令,登录无需密码。
5.10.显示用户信息
- id命令
[root@localhost ~]# id hello uid=1000(hello) gid=1000(hello) groups=1000(hello)
- 功能:显示用户UID、GID及所属组信息。
6.Linux进程管理
6.1.查看进程命令
- ps命令
- ps命令示例一 - 不带参数
[root@localhost ~]# ps PID TTY TIME CMD 2070 pts/1 00:00:00 bash 2187 pts/1 00:00:00 ps
- 功能:查询在当前控制台上运行的进程。
- ps命令示例二 - 查看所有进程
[root@localhost ~]# ps -aux
- 功能:查询系统中所有运行的进程,包括后台进程,其中参数a表示所有进程,参数x包括不占用控制台的进程,参数u表示用户。
- ps命令示例三 - 查看所有进程
[root@localhost ~]# ps -ef
- 功能:查询系统中所有运行的进程,包括后台进程,而且可以显示出每个进程的父进程号。
6.2.top命令
- 功能:动态显示系统中的进程。
6.3.free命令
- 功能:显示出系统中的内存空闲情况。
6.4.杀掉指定进程
- kill命令示例一 - 杀掉指定进程
[root@localhost ~]# kill 3029
- 功能:kill命令可以杀掉一个进程,当然普通用户只能杀掉自己的进程。
- 说明:上述命令中3029是进程号;一般在执行kill命令之前,先用ps或pstree查询一下将要被杀掉的进程的进程号。
- kill命令示例二 - 强制杀掉指定进程
[root@localhost ~]# kill -9 3029
- 功能:强制终止3029号进程的运行,参数-9表示强制。
- 说明:实际上kill命令是向该进程发送信号,该进程接到信号后决定是否停止运行,有些守护进程必须要收到参数9才可终止运行。
7.Linux软件包管理
7.1.软件包管理
- Linux也能和Windows那样安装各种应用程序,通常称为软件包。目前,在Linux系统下常见的软件包管理工具为RPM。
- rpm --RedHat Package Management
- 软件包文件名中i386,noarch等含义
- i386.rpm 适用于80386及以上CPU
- i586.rpm 适用于Pentium及以上CPU
- i686.rpm 适用于Pentium Pro及以上CPU
- noarch.rpm 该软件包与硬件平台无关
- src.rpm 软件包源代码
7.2.查询系统中已安装软件包
- rpm命令
- rpm命令示例一 - 查询系统中安装的软件包
[root@localhost ~]# rpm -qa
- 功能:查询系统中安装的软件包列表,其中参数-q的功能是"查询",参数-a的功能是"所有的"。
- rpm命令示例二 - 查询软件包中文件清单
[root@localhost ~]# rpm -ql php
- 功能:查询已安装的软件包php中的文件列表,参数-l的功能是"列出指定软件包中的文件"。
- rpm命令示例三 - 卸载指定的软件包
[root@localhost ~]# rpm -e php
- 功能:卸载已安装的软件包php,参数-e是卸载。
- 说明:请注意执行上述命令时,采用的身份是不同的,普通用户只能执行查询操作。
- rpm命令示例四 - 安装软件包
[root@localhost ~]# rpm -ivh 软件包.rpm
- 功能:安装软件包
- 参数 -i 表示安装
- 参数 -v 表示显示处理过程
- 参数 -h 功能是显示 # 来表示进度
- rpm命令示例五 - 忽略依赖关系安装软件包
[root@localhost ~]# rpm -ivh --nodeps 软件包.rpm
- 功能:安装软件包时忽略与其他软件包的依赖关系,参数–nodeps表示忽略依赖关系。
- 说明:在安装或卸载软件时经常会遇到提示"该软件包存在依赖关系",只有加上参数–nodeps忽略掉依赖关系才能进行安装或卸载。
7.3.通过源代码安装软件包
- rpm管理
- 安装:
- 通过源代码安装软件包
- rpmbuild --rebuild software-version.src.rpm
- rpm -ivh /usr/src/redhat/RPMS/i386/software-version.i386.rpm
7.4.rpm管理常用命令
- 升级:
- rpm -U software.rpm
- rpm -Uvh software.rpm
- rpm -force -Uvh software.rpm
- 删除:
- rpm -e software
- 查询:
- rpm -qi software
- rpm -qpi software.rpm
- rpm -qf /dir/file
- rpm -ql software
- rpm -qpl software.rpm
8.Shell编程应用
8.1.shell是什么
- shell是用户与Linux系统沟通的桥梁。
- Linux的shell种类众多,这里学习的是bash,也就是Bourne again shell。
- 由于易用和免费,bash在日常工作中被广泛使用。
- bash是大多数Linux系统默认的shell。
8.2.shell执行的常用方式
- a.sh
- 这样的话需要保证脚本具有执行权限并且在环境变量PATH中有(.),这样在执行的时候会从当前目录查找。
- ./a.sh
- 只要保证这个脚本具有执行权限即可。
- bash a.sh
- 直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash,是将hell.sh作为参数传给sh(bash)命令来执行。
8.3.后台模式运行脚本
- 在脚本后面加一个&
- test.sh &
- 说明:这样的话虽可以在后台运行,但是当前会话窗口关闭之后这个脚本也会停止运行。
- test.sh &
- nohup命令
- 不间断的运行命令,忽略所有挂断(SIGHUP)信号
- 使用nohup test.sh &
- nohup命令将进程和终端分开,所以关闭当前会话窗口不会影响这个进程的执行。
- nohup会在当前执行的目录生成一个nohup.out日志文件。
8.4.标准输入、输出、错误、重定向`
- 标准输入、输出、错误可以使用文件描述符0、1、2引用
- ls >file 或者 ls 1>file (ls >> file)
- ls >file 2>&1
- ls > /dev/null(把输出信息重定向到无底洞)
- 例如:***** su -cbpapp -c “monitor_crontab.sh” >/dev/null 2>&1,标准输出和标准错误都重定向到了/dev/null
- 使用重定向可以把信息转换到其他位置
8.5.变量
- 变量不需要声明,初始化不需要指定类型
- 变量命名
- 不能使用程序中的关键字(保留字)
- 只能使用数字、字母、下划线,且不能以数字开头
- 建议命令要通俗易懂
- 显示变量值使用echo命令,加上
{变量名}
- 例如:echo $JAVA_HOME
- echo ${JAVA_HOME}
8.6.变量分类
8.6.1.本地变量
- 只对当前shell进程有效的,对当前进程的子进程和其他shell进程无效。
- 定义:VAR_NAME=VALUE
- 变量引用:${VAR_NAME}
- 取消变量:unset VAR_NAME
- 相当于Java中的私有变量(private),只能当前类使用,子类和其他类不能使用。
8.6.2.环境变量
- 自定义的环境变量对当前shell进程及其子shell进程有效,对其他shell进程无效。
- 定义:export VAR_NAME=VALUE
- 对所有shell进程都有效需要配置到配置文件中
- vi /etc/profile
- source /etc/profile
8.6.3.局部变量
- 在函数中调用,函数执行结束,变量就会消失。
- 对shell脚本中某代码片段有效
- 定义:local VAR_NAME=VALUE
8.6.4.位置变量
- $1, {10}
- test.sh 3 89
- $0:脚本本身
- $1:脚本的第一个参数
- $2:脚本的第二个参数
- 相当于Java中main函数中的args参数,可以获取外部参数
8.6.5.特殊变量
-
$?:接收上一条命令的返回状态码
-
$#:脚本执行时,输入的参数的个数
-
@:输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列表)
代码 描述 0 命令成功完成 1 通常的未知错误 2 误用shell命令 126 命令无法执行 127 没有找到命令 128 无效的退出参数 128+x 使用Linux信号x的致命错误 130 使用ctrl+c终止的命令 255 规范外的退出状态
8.7.for循环
- 通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环
- 格式一
for((i=0;i<10;i++)) do ... done
- 格式二
for i in 0 1 2 4 5 8 9 do ... done
- 格式三
for i in {0..9} do ... done
8.8.while/until循环
- 适用于循环次数未知,或不便用for直接生成较大的列表时。
- 格式
while 测试条件;do 循环体 done
- 如果测试条件为真,则进入循环,测试条件为假,则退出循环。
- until循环的格式和while循环的格式一致,但是和while循环的意思相反,如果测试条件为假,则进入循环,推出条件为测试条件为真。
8.9.if判断
- 单分支
if 测试条件;then 选择分支 fi
- 双分支
if 测试条件 then 选择分支1 else 选择分支2 fi
8.10.循环控制命令 - break
- break命令是在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while循环和until循环
- 跳出单循环
- 跳出内循环
- 使用多循环时break命令自动终止你所在的最里面的循环,注意,当内循环被break命令终止,外循环会继续执行。
- 跳出外循环
- 有时处于内循环但需要停止外循环,break命令后面就需要指定一个参数了
- break n
- n表明要跳出的循环级别,默认情况下,n是1,代表跳出当前循环,如果将n设置为2,break命令将停止外循环的下一级循环。
8.11.循环控制命令 - continue
- continue命令是一种提前停止循环内的命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件。
#!/bin/bash for((i=0;i<10;i++)) do if [ $i -eq 2 ] then continue fi echo $i done
8.12.自定义函数
function 函数名(){
...
}
- 引用自定义函数文件时,使用source func.sh
- 有利于代码的重用性
- 函数传递参数
- 函数的返回值,只能是数字
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)