我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
Error: 400 Bad Request
# yum 安装常用软件
-
lrzsz支持xshell和SecureCRT上传下载 rz命令本地上传文件到服务器,sz命令发送文件到本地
[root@centos8 ~]# yum -y install vim tree net-tools wget curl lrzsz
# PS1变量
-
open in Terminal:打开终端
-
Linux以回车键表示命令结束,如果linux命令需要折行输入,那么可以以
\表示每行结束# [用户名@主机名称 当前位置] # 代表管理员 $ 普通用户 [hadoop@hadoop ~]$ su root Password: [root@hadoop hadoop]# # 这个命令提示符是可以改变的。通过PS1系统变量改变,比如:# 先查看PS1变量的结果值: [hadoop@hadoop01 mazhonghua]$ echo $PS1 [\u@\h \W]\$ # \u:用户名,\h:主机名,\w:工作目录,\$:用户表示,root是$,普通用户是# # 然后更改该值: [hadoop@hadoop01 mazhonghua]$ PS1="[\t][\u@\h \W]\$ " # 这是Linux定义变量的方式 #接下来命令提示符就会变成: [11:48:45][hadoop@hadoop01 mazhonghua]$
# 常用命令
# 命令的格式
- 选项 :
-简写单词(短模式)--单词 (长模式)- 也可以使用组合格式,比如:
-a -l等价于-la或者-al
# 归纳分类
| 分类 | 命令 |
|---|---|
| 文件管理 | mkdir, rmdir, mv, rm, cp, touch, cat, tac, echo, more, less, head, tail, file, find, rename, ln, pwd, scp, alias |
| 磁盘管理 | ls, cd, du, df, mount, unmounts, fdisk |
| 文档处理 | wc, sort, uniq, cut, sed, awk, grep, vi, diff |
| 用户和组 | useradd, usermod, passwd, userdel, groupadd, groupdel, chgrp, su |
| 文件传输 | get, put, wget |
| 网络通信 | telnet, nc, ifconfig, ping, netstat, ip, host |
| 备份压缩 | gzip, bzip2, bunzip2, tar, zip |
| 系统管理 | exit, kill, last, ps, top, free, pstree, reboot, halt, shutdown, sudo, who, w, whoami, whereis, which, last, whatis |
| 系统设置 | clear, set, unset, hwclock, time, date, |
| 其他 | history, hostname, nohup, service, init, rpm, ssh, cal, yum |
-
另外再教大家一种方式查看命令的帮助手册
[root@hadoop01 ~]# man clear
# cd 路径
-
配合
pwd(查看当前路径)使用change directory (切换目录) 常使用方式: cd sourcedir 进入用户主目录 cd ~ 进入用户主目录 cd - 返回进入此目录之前所在的目录 cd .. 返回上级目录(若当前目录为"/",则执行完后还在"/";".."为上级目录的意思) cd ../.. 返回上两级目录
# ls
-
list:显示目录内容列表
使用格式:ls [选项]... [目录或文件名] 常用选项 -l:详细信息显示 -a:显示所有子目录和文件的信息,包括隐藏文件 -A:类似于“-a”,但不显示“.”和“..”目录的信息 -R:递归显示内容 -h:以友好方式显示文件大小 例子: ls -l ## 列出文件详细信息, 也可以写作 ll ls -lah ## 以友好方式显示包括隐藏文件的详细信息
# du
-
查看目录和文件的磁盘占用
disk usage:显示每个文件和目录的磁盘使用空间 使用格式:du [选项]... [目录或文件名] 常用选项: -a:统计时包括所有的文件,而不仅仅只统计目录 -h:以更易读的字节单位(K、M等)显示信息 -s:只统计每个参数所占用空间总的大小 例子: du -ah ##
# df
-
显示磁盘相关信息
disk free:显示磁盘相关信息 常用选项: -h:以更易读的字节单位(K、M等)显示信息 -T:显示分区格式 例子: df -h ## 显示磁盘信息,以友好方式 df -T -h ## 以友好格式显示磁盘信息,并且附加磁盘格式
# touch
-
创建/修改文件信息
创建空文件 或更新文件时间标记 使用格式: touch 文件名
# file
-
查看文件类型:根据文件内容
## 创建文件 [root@hadoop hadoop]# touch aa [root@hadoop hadoop]# file aa aa: empty ## 查看目录 [root@hadoop hadoop]# file apps apps: directory ## 创建脚本文件 [root@hadoop hadoop]# touch a.sh [root@hadoop hadoop]# file a.sh a.sh: empty ## 添加 #!/bin/bash 后 [root@hadoop hadoop]# vim a.sh [root@hadoop hadoop]# file a.sh a.sh: Bourne-Again shell script, ASCII text executable
# mkdir
- 创建文件夹
- -p 级联创建 ,父级目录不存在也创建
mkdir -p /root/ma/niu/zhu/dagou## 上级目录不存在自动创建上一级目录,常用
# cp
-
复制
-
-i 需要覆盖文件或目录时进行提醒
-
-r 文件夹复制时要迭代
-
-p 源文件的属性不变
-
cp 源文件路径 目标文件路径 -
cp 源文件路径 目标文件路径/新的名字
-
# mv
- 剪切,如果与源文件位置一样,则相当于重命名
- -i 覆盖时提示
- -f 强制覆盖,不询问
- -u: 新文件覆盖旧文件
# rmdir
-
删除空目录
删除空文件夹 常用选项: -p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; rmdir -p /root/aa/bb/cc/dd/ee 删除文件夹ee,如果删除ee后,dd变为空,则删除dd,依次类推
# rm
-
删除文件和文件夹
删除文件或目录 使用格式:rm [选项] 文件或目录 常用选项: -f:强行删除文件或目录,不进行提醒 -i:删除文件或目录时提醒用户确认 -r:递归删除整个目录树 例子: rm -rf /root/ma/ ## 不提醒递归删除整个目录,慎用慎用慎用
# cat
-
查看文件,连接文件打印到控制台(不适合大文件,缓冲区有限)
# 默认不显示行号 [root@hadoop hadoop]# cat a.sh #!/bin/bash # -n: 设置行号 :空行算一行 [root@hadoop hadoop]# cat -n a.sh 1 #!/bin/bash 2 a 3 b 4 # 使用nl 空行不算一行 [root@hadoop hadoop]# nl a.sh 1 #!/bin/bash 2 a 3 b # 使用tac(cat倒置):倒置输出 [root@hadoop hadoop]# tac a.sh b a #!/bin/bash-
通过cat添加文本到文件末尾.
cat << EOF- 覆盖
> 文件名 - 追加
>> 文件名 - 最后以EOF结尾
- 需要注意的是,不论是覆盖还是追加,在涉及到变量操作时是需要进行转义的
# 覆盖 格式一 将文件放在后面 #!/bin/bash cat << EOF > /root/test.txt Hello! Test for cat and EOF! EOF # 格式二 将文件放在中间 #!/bin/bash cat > /root/test.txt << EOF Hello! Test for cat and EOF! EOF - 覆盖
-
# head
- 屏幕显示文件开头若干行
- -n<数字>:指定显示头部内容的行数;
head -n 5 install.log## 显示该文件前五行内容
# tail
-
显示结尾若干行,查日志
-
-n: 设置行数(默认10行)
tail -n 2 a.sh: 显示a.sh的最后二行 -
-f: 查看最新追加的内容
tail -f a.sh使用另外终端向a.sh写入后可看到追加内容\例子: tail file ## 显示文件file的最后10行 tail +20 file ## 显示文件file的内容,从第20行至文件末尾 tail -c 10 file ## 显示文件file的最后10个字符 tail -f install.log ## 显示最新追加的内容
-
# more
-
翻页查看文件
显示文件内容,每次显示一屏 使用方式: 按Space键:显示文本的下一屏内容。 按Enter键:只显示文本的下一行内容。 按h键:显示帮助屏,该屏上有相关的帮助信息。 按b键:显示上一屏内容。 按q键:退出more命令。
# less
- 分屏滚动显示
- G:跳到结尾
- gg:跳到开始
- 按e键:向上滚动一行
- 按y键:向下滚动一行
- q:退出
# echo
-
输出指定的字符串和变量
-
-e: 能识别特殊字符
-
-ne:输出不换行;最后是不换行的
输出指定的字符串或者变量 常用选项: -e:若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: \a 发出警告声; \b 删除前一个字符; \c 最后不加上换行符号; \f 换行但光标仍旧停留在原来的位置; \n 换行且光标移至行首; \r 光标移至行首,但不换行; \t 插入tab; \v 与\f相同; \ 插入\字符; \nnn 插入nnn(八进制)所代表的ASCII字符; 例子: echo 'ma' ## 输出ma echo -e 'ma\n' ## 打印ma之后换行 echo -ne 'ma' 'zhonghua' ## 打印完不换行 echo 'ma' > ma.dat ## 覆盖 echo 'ma' >> ma.dat ## 追加 echo $PWD ## 输出变量内容 [root@hadoop hadoop]# A=12 [root@hadoop hadoop]# echo $A 12 # 默认原样输出 [root@hadoop hadoop]# echo "aa\nbb" aa\nbb ## -e 能识别特殊字符:换行了 [root@hadoop hadoop]# echo -e "aa\nbb" aa bb [root@hadoop hadoop]# ## 没有换行 [root@hadoop hadoop]# echo -ne "aa\nbb" aa bb[root@hadoop hadoop]#
-
# >
-
重定向 ,覆盖添加
>>追加
[root@hadoop hadoop]# echo 'aaa' > a.txt [root@hadoop hadoop]# cat a.txt aaa ## 在文本后追加 [root@hadoop hadoop]# cal >> a.txt [root@hadoop hadoop]# cat a.txt aaa August 2020 Su Mo Tu We Th Fr Sa 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
# alias
-
别名
> alias:查看别名 > alias la ='ll -a' : 设置别名 > unalias ls :取消别名
# ln
-
设置连接
-s 创建软链接(如果不带 -s 参数,默认创建硬链接) -f 强制创建文件或目录的链接 -i 覆盖前先询问 -v 显示创建链接的过程 -
在 Linux 系统中 , 系统中有一个名为 superblock 的 “硬盘地图”。每个文件的权限与属性记录在 inode("索引节点:index node ") 中,而且每个文件占用一个独立的 inode 表格,该表格的默认大小为 128 字节。
-
inode 号才是文件的唯一标识而非文件名。文件名只是为了方便人们的记忆和适用。
-
“ls -li” 结果中的第一列就是文件的 inode 号。系统是通过 inode 号寻找正确的文件数据块。
[root@hadoop hadoop]# ls -li total 16 1707903 -rw-r--r-- 1 root root 0 Aug 13 09:59 aa 1707725 drwxrwxr-x 4 hadoop hadoop 4096 Jul 15 20:31 apps 1707905 -rw-r--r-- 1 root root 17 Aug 13 10:07 a.sh 1707904 -rw-r--r-- 1 root root 157 Aug 13 10:20 a.txt -
文件的实际内容则保存在 block 中(大小可以是 1KB、2KB 或 4KB),一个 inode 的默认大小为 128B (在 Ext3 文件系统中),记录一个 block 则消耗 4B 。当文件的 inode 被写满后,Linux 系统会自动分配出一个 Block 块,专门用于像 innode 那样记录其他 block 块的信息,这样能把各个 block 块的内容串到一起,就能够让用户读到完整的文件内容了。
-
硬链接:
ln fileName newFileName -
fileName 和 newFileName 都指向同一个文件,因此,无论你编辑哪一个文件,另一个文件也会做相应的改变。

[root@hadoop hadoop]# ls -li total 16 1707903 -rw-r--r-- 1 root root 0 Aug 13 09:59 aa ## 添加硬链接 硬链接是一个指针或者说是文件的引用。只占一点点空间。 [root@hadoop hadoop]# ln aa bb ## 可以看到该文件的 innode 连接数就会增加 1 ; ## 而且只有当该文件的 inode 连接数为 0 时,才算彻底被将它删除 [root@hadoop hadoop]# ls -l total 16 -rw-r--r-- 2 root root 0 Aug 13 09:59 aa -
软链接:快捷方式
-s : 设置软连接[root@hadoop hadoop]# ln -s a.txt b.txt # innode没有添加 [root@hadoop hadoop]# ll total 16 -rw-r--r-- 1 root root 157 Aug 13 10:20 a.txt lrwxrwxrwx 1 root root 5 Aug 13 10:32 b.txt -> a.txt # 删除软链接,但不删除实际数据 # 删除原始文件后 ,这条记录变红 # 测试vim编辑快捷方式后,删除的文件会被重新创建 [root@hadoop hadoop]# rm a.txt 1707906 lrwxrwxrwx 1 root root 5 Aug 13 10:33 b.txt -> a.txt
-
# 其他
-
su 切换用户
-
Ctrl+ C 终止程序
-
| :管道符,表示把前面命令内容的输出当做后面命令的输入
ps -aux | grep ssh
-
host :域名解析
host www.bai.du.com
-
netstat :查看网络接口
netstat -nltpkill -9 pid
# 用户管理
-
用户:能够获取系统权限集合
-
组:权限的容器
> ls -l
-rw-r--r--. 1 root root 13 Sep 14 09:43 a.txt
drwxr-xr-x. 2 root root 4096 Sep 14 10:09 Desktop
-rw-r--r-- :权限
1: 链接数(文件链接数1 目录:子目录个数)
root :所属用户
root: 所属用户组
13: 文件大小
Sep 14 10:09:修改日期
a.txt 文件名称
# 用户类型
-
管理员root
- 具有使用所有权限的用户,uid为0
-
系统用户
- 保障系统运行的用户,一般不提供密码登录系统uid(1-499之间)
-
普通用户
- 一般用户,使用系统的权限受限,uid(500~60000之间)
# 查看用户信息
-
cat /etc/passwdroot:x:0:0:root:/root:/bin/bash # root: 用户名称 # x: 密码的占位符 密码信息:/etc/gshadow # 0: 用户id # 0: 用户组id # root: 备注信息 # /root 家目录 # /bin/bash: shell 解释器类型 # 新建从500开始: # hdp01:x:500:500:hdp01:/home/hdp01:/bin/bash
# 添加用户
格式:格式:useradd [options] LOGIN
-u UID UserName:创建用户时指定用户UID;不能和现有的UID冲突
-g GID/GroupName UserName:创建用户时指定用户默认主组;前提必需是指定的组已存在,否则无法指定。
-c “注释” UserName:创建用户时指定用户信息注释
-d /PATH//HomeDirName UserName: 创建用户时指定目录为其家目录
-M UserName:创建用户时不创建家目录;文件(/etc/passwd)中只是标记家目录属性但实际并不会创建家目录文件
-s SHELL UserName:创建用户时指定用户的默认登录Shell类型;Shell类型可用命令(cat /etc/shells)查看(如Shell类型为/sbin/nologin为用户不可登录)
-G GroupName UserName:创建用户时指定用户附加组;多组时组与组之间用逗号分隔,前提必需是指定的组已存在,否则无法指定。
# 不加任何选项创建用户时根据系统版本默认用户起始UID为第一个或已创建用户UID之后为准以此递增
[root@localhost ~]# useradd user1
[root@localhost ~]# tail -1 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
# -u UID UserName:创建用户时指定用户UID;不能和现有的UID冲突
[root@localhost ~]# useradd -u 1002 user2
[root@localhost ~]# tail -2 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
# -g GID/GroupName UserName:创建用户时指定用户默认主组;
#前提必需是指定的组已存在,否则无法指定。
[root@localhost ~]# useradd -g 1000 user3
[root@localhost ~]# tail -3 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
# -c “注释” UserName:创建用户时指定用户信息注释
[root@localhost ~]# useradd -c 'Test User' user4
[root@localhost ~]# tail -4 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
# -d /PATH//HomeDirName UserName: 创建用户时指定目录为其家目录
[root@localhost ~]# useradd -d /home/testhome user5
[root@localhost ~]# tail -5 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
user5:x:1005:1005::/home/testhome:/bin/bash
[root@localhost ~]# ll /home/
total 0
drwx------ 2 user5 user5 62 Jul 17 16:28 testhome
drwx------ 2 user1 user1 62 Jul 17 15:54 user1
drwx------ 2 user2 user2 62 Jul 17 15:54 user2
drwx------ 2 user3 user1 62 Jul 17 16:01 user3
drwx------ 2 user4 user4 62 Jul 17 16:04 user4
# -M UserName:创建用户时不创建家目录;文件(/etc/passwd)中只是标记家目录属性但实际并不会创建家目录文件
[root@localhost ~]# useradd -M user6
[root@localhost ~]# tail -6 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
user5:x:1005:1005::/home/testhome:/bin/bash
user6:x:1006:1006::/home/user6:/bin/bash
[root@localhost ~]# ll /home/
total 0
drwx------ 2 user5 user5 62 Jul 17 16:28 testhome
drwx------ 2 user1 user1 62 Jul 17 15:54 user1
drwx------ 2 user2 user2 62 Jul 17 15:54 user2
drwx------ 2 user3 user1 62 Jul 17 16:01 user3
drwx------ 2 user4 user4 62 Jul 17 16:04 user4
# -s SHELL UserName:创建用户时指定用户的默认登录Shell类型;Shell类型可用命令(cat /etc/shells)查看(如Shell类型为/sbin/nologin为用户不可登录)
[root@localhost ~]# useradd -s /sbin/nologin user7
[root@localhost ~]# tail -7 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
user5:x:1005:1005::/home/testhome:/bin/bash
user6:x:1006:1006::/home/user6:/bin/bash
user7:x:1007:1007::/home/user7:/sbin/nologin
# -G GroupName UserName:创建用户时指定用户附加组;多组时组与组之间用逗号分隔,
# 前提必需是指定的组已存在,否则无法指定。
[root@localhost ~]# useradd -G root user8
[root@localhost ~]# tail -8 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
user5:x:1005:1005::/home/testhome:/bin/bash
user6:x:1006:1006::/home/user6:/bin/bash
user7:x:1007:1007::/home/user7:/sbin/nologin
user8:x:1008:1008::/home/user8:/bin/bash
[root@localhost ~]# head -1 /etc/group
root:x:0:user8
# 多参数组合实例:
[root@localhost ~]# useradd -u 10010 -g 1005 -c 'Test User2' -d /home/testhome2 -s /sbin/nologin -G root user9
[root@localhost ~]# tail -9 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1000::/home/user3:/bin/bash
user4:x:1004:1004:Test User:/home/user4:/bin/bash
user5:x:1005:1005::/home/testhome:/bin/bash
user6:x:1006:1006::/home/user6:/bin/bash
user7:x:1007:1007::/home/user7:/sbin/nologin
user8:x:1008:1008::/home/user8:/bin/bash
user9:x:10010:1005:Test User2:/home/testhome2:/sbin/nologin
[root@localhost ~]# ll /home/
total 0
drwx------ 2 user5 user5 62 Jul 17 16:28 testhome
drwx------ 2 user9 user5 62 Jul 17 16:44 testhome2
drwx------ 2 user1 user1 62 Jul 17 15:54 user1
drwx------ 2 user2 user2 62 Jul 17 15:54 user2
drwx------ 2 user3 user1 62 Jul 17 16:01 user3
drwx------ 2 user4 user4 62 Jul 17 16:04 user4
drwx------ 2 user7 user7 62 Jul 17 16:33 user7
drwx------ 2 user8 user8 62 Jul 17 16:36 user8
[root@localhost ~]# head -1 /etc/group
root:x:0:user8,user9
# 修改用户
-
usermod[选项] 用户名-g: 修改用户所属群组。 -G: 修改用户所属的附加群组;在改变用户sudo权限时就可以使用这个选项。 -a: 仅和-G一块使用,将用户添加到附属组群。 -c 修改信息 # -u UID UserName:修改用户UID;不能和现有的UID冲突 [root@localhost ~]# id -u user3 1011 [root@localhost ~]# usermod -u 1012 user3 [root@localhost ~]# id -u user3 1012 # -g GID/GroupName UserName:修改用户默认主组;前提必需是指定的组已存在,否则无法指定 [root@localhost ~]# id -g user3 1011 [root@localhost ~]# usermod -g 1012 user3 [root@localhost ~]# id -g user3 1012 # -c “注释” UserName:修改用户信息注释(备注) [root@localhost ~]# tail -1 /etc/passwd user3:x:1012:1012:testuser:/home/user3:/bin/bash [root@localhost ~]# usermod -c "testuser2" user3 [root@localhost ~]# tail -1 /etc/passwd user3:x:1012:1012:testuser2:/home/user3:/bin/bash # -d /HomeDirName UserName: 修改用户新家目录; # 默认新家目录不会被创建,老家目录不会迁移至新家目录。 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2:/bin/bash [root@localhost ~]# usermod -d /home/user2home1 user2 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2home1:/bin/bash [root@localhost ~]# ll /home/ total 0 drwx------ 2 user2 user2 83 Jul 17 20:59 user2 # -md /HomeDirName UserName: 修改用户新家目录 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2:/bin/bash [root@localhost ~]# usermod -md /home/user2home2 user2 [root@localhost ~]# ll /home/ total 0 drwx------ 2 user2 user2 83 Jul 17 20:59 user2home2 # -s SHELL UserName:修改用户的默认登录Shell类型; # Shell类型可用命令(cat /etc/shells)查看 # (如Shell类型为/sbin/nologin为用户不可登录) [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2home2:/bin/bash [root@localhost ~]# usermod -s /sbin/nologin user2 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2home2:/sbin/nologin # -G GroupName UserName:修改(覆盖)用户附加组; # 多组时组与组之间用逗号分隔,前提必需是指定的组已存在,否则无法指定。 [root@localhost ~]# id user3 uid=1012(user3) gid=1012(user4) groups=1012(user4),1013(testgp1) [root@localhost ~]# usermod -G testgp2 user3 [root@localhost ~]# id user3 uid=1012(user3) gid=1012(user4) groups=1012(user4),1014(testgp2) #aG GroupName UserName:修改(追加)用户附加组; # 多组时组与组之间用逗号分隔,前提必需是指定的组已存在,否则无法指定。 [root@localhost ~]# id user3 uid=1012(user3) gid=1012(user4) groups=1012(user4),1014(testgp2) [root@localhost ~]# usermod -aG testgp1 user3 [root@localhost ~]# id user3 uid=1012(user3) gid=1012(user4) groups=1012(user4),1013(testgp1),1014(testgp2) #-l NewUserName OldUserName:修改新登录用户名; # 默认用户家目录属性不变更沿用老用户名的家目录 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user2:x:1001:1002::/home/user2home2:/sbin/nologin [root@localhost ~]# usermod -l user3 user2 [root@localhost ~]# tail -2 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user3:x:1001:1002::/home/user2home2:/sbin/nologin # -L UserName:锁定指定用户; # 实际就是在文件(/etc/shadow)密码位首位添加个叹号(!) [root@localhost ~]# usermod -L user3 [root@localhost ~]# tail -2 /etc/shadow chrony:!!:17911:::::: user3:!$6$i730d3Eq$6EQFStDoK2wj3sfbJJ3MFcA6eO9YAxWbkP81.hOE4lnRLejdm5rsPNiTyeqRZy36gsTFPXB/cOYeLBTKVL9JD0:18094:0:99999:7::: # -U UserName:解锁指定用户; # 实际就是在文件(/etc/shadow)密码位首位删除个叹号(!) [root@localhost ~]# usermod -U user3 [root@localhost ~]# tail -2 /etc/shadow chrony:!!:17911:::::: user3:$6$i730d3Eq$6EQFStDoK2wj3sfbJJ3MFcA6eO9YAxWbkP81.hOE4lnRLejdm5rsPNiTyeqRZy36gsTFPXB/cOYeLBTKVL9JD0:18094:0:99999:7:::
# 删除用户
格式:userdel [options] LOGIN
- -r:删除用户时同时删除用户家目录和邮件目录
# 不加任何选项删除用户时只删除用户本身,
# 其家目录(/home/UserName)和邮箱目录(/var/spool/mail/UserName)不被删除。
[root@localhost ~]# userdel user1
[root@localhost ~]#
[root@localhost ~]# ll /home/
total 0
drwx------ 2 1000 1000 83 Jul 16 01:02 user1
[root@localhost ~]# ll /var/spool/mail/
total 0
-rw-rw---- 1 1000 mail 0 Jul 14 18:28 user1
-r:删除用户时同时删除用户家目录和邮件目录
[root@localhost ~]# userdel -r user1
[root@localhost ~]# ll /home/
total 0
drwx------ 2 user2 user2 62 Jul 17 20:10 user2
drwx------ 2 user3 user3 62 Jul 17 20:10 user3
[root@localhost ~]# ll /var/spool/mail/
total 0
-rw-rw---- 1 user2 mail 0 Jul 17 20:10 user2
-rw-rw---- 1 user3 mail 0 Jul 17 20:10 user3
# 修改密码
格式:passwd [options] [username]
-S UserName:查询用户密码的密码状态;仅root用户可
-l UserName:锁定指定用户(其实就是在用户密码前添加两叹号!!);仅root用户可用
-u UserNmae:解锁指定用户(其实就是删除用户密码前添加的两叹号!!)
-n N UserName:N为数字;指定密码最小使用天数(密码使用最小多少天才可更改密码);如为0则表示无限制(禁用此功能)
-x N UserName:N为数字;指定密码最大使用天数(密码使用最大多少天需要更改密码);默认为99999永不过期
-w N UserName:N为数字;指定密码过期前警告天数(密码过期前多少天警告用户更改密码);默认过期前7天警告
-i N UserName:N为数字;指定密码过期天数(密码过期后多少天用户被锁定);在此时间段内用户依然可以登录系统并更改密码
–stdin:非交互式修改密码(快速配置密码) #适合于CentOS系列
#不指定用户名为设置(修改)当前登录用户密码
[root@localhost ~]# whoami
root
[root@localhost ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
# 指定设置(修改)用户密码
[root@localhost ~]# passwd user1
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
#-S UserName:查询用户密码的密码状态;仅root用户可用
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 0 99999 7 -1 (Password set, SHA512 crypt.)
user1 PS 2017-03-04 0 99999 7 -1 (Password set, SHA512 crypt.)
格式:共八列,列与列之间用空格字符分隔
第一列:用户名
第二列:账户状态;PS为正常、LK为锁定
第三列:系统当前时间
第四列:密码最小使用天数(密码使用最小多少天才可更改密码);默认为0则表示无限制(禁用此功能)
第五列:密码最大使用天数(密码使用最大多少天需要更改密码);默认为99999永不过期
第六列:密码过期前警告天数(密码过期前多少天警告用户更改密码);默认过期前7天警告
第七列:密码过期天数(密码过期后多少天用户被锁定);在此时间段内用户依然可以登录系统并更改密码
第八列:密码配置状态及密码加密算法;Password locked表示密码已被锁定(账户密码未设置或账户已被锁定),Password set表示密码已设置,SHA512 crypt表示使用SHA512算法
#-l UserName:锁定指定用户(其实就是在用户密码前添加两叹号!!);仅root用户可
[root@localhost ~]# passwd -l user1
Locking password for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 LK 2017-03-04 0 99999 7 -1 (Password locked.)
[root@localhost ~]# grep user1 /etc/shadow
user1:!!$6$jxOh9OqV$57OBYLRy6/hfPtx1USHScB1L4ydHrsWmyt3elMcRfgb0s7FuxQgvYCIFPDecbjj6BmGb.7CkfB2cpDjtlrkdv/:18094:0:99999:7:::
#-u UserNmae:解锁指定用户(其实就是删除用户密码前添加的两叹号!!)
[root@localhost ~]# passwd -u user1
Unlocking password for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@localhost ~]# grep user1 /etc/shadow
user1:$6$jxOh9OqV$57OBYLRy6/hfPtx1USHScB1L4ydHrsWmyt3elMcRfgb0s7FuxQgvYCIFPDecbjj6BmGb.7CkfB2cpDjtlrkdv/:18094:0:99999:7:::
#-n N UserName:N为数字;指定密码最小使用天数(密码使用最小多少天才可更改密码);如为0则表示无限制(禁用此功能)
[root@localhost ~]# passwd -n 10 user1
Adjusting aging data for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 10 99999 7 -1 (Password set, SHA512 crypt.)
#-x N UserName:N为数字;指定密码最大使用天数(密码使用最大多少天需要更改密码);默认为99999永不过期
[root@localhost ~]# passwd -x 1000 user1
Adjusting aging data for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 10 1000 7 -1 (Password set, SHA512 crypt.)
#-w N UserName:N为数字;指定密码过期前警告天数(密码过期前多少天警告用户更改密码);默认过期前7天警告
[root@localhost ~]# passwd -w 15 user1
Adjusting aging data for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 10 1000 15 -1 (Password set, SHA512 crypt.)
# -i N UserName:N为数字;指定密码过期天数(密码过期后多少天用户被锁定);在此时间段内用户依然可以登录系统并更改密码
[root@localhost ~]# passwd -i 30 user1
Adjusting aging data for user user1.
passwd: Success
[root@localhost ~]# passwd -S user1
user1 PS 2017-03-04 10 1000 15 30 (Password set, SHA512 crypt.)
# –stdin:非交互式修改密码(快速配置密码) #适合于CentOS系列
[root@localhost ~]# passwd -S user2
user2 LK 2017-03-04 0 99999 7 -1 (Password locked.)
[root@localhost ~]# echo "123456"|passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd -S user2
user2 PS 2017-03-04 0 99999 7 -1 (Password set, SHA512 crypt.)
# 用户组管理
-
系统组
- 一般加入一些系统用户
-
普通用户组
- 可以加入多个用户
-
私有组/基本组
- 创建用户的时候,没有指明所属的组,就为该用户设一个与用户名同名的私有组,该私有组添加了用户会变成普通组
# 查看用户组
格式:id [OPTION]… [USER]‘
-u:查看用户UID
-g:查看用户GID
-G:查看用户所有组(主组、附加组)的GID
# 不加任何选项和指定用户为查看当前登录用户的ID信息
[root@localhost ~]# whoami
root
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1003(user3)
格式:共三列,列与列之间用空格字符分隔。
第一列:用户UID(用户名)
第二列:用户主组GID(主组名)
第三列:用户所有组集合
用户主组GID(主组名) #主组只有一个
用户附加组GID(附加组名) #附加组可以有多个
# -u:查看用户GID
[root@localhost ~]# id -u user2
1001
# -g:查看用户主组GID
[root@localhost ~]# id -g user2
1002
# -G:查看用户所有组(主组、附加组)的GID
[root@localhost ~]# id -G user2
1002 1003
# 修改用户组
格式:groupadd [options] group
-g GID GroupName:创建用户组时指定用户组GID;不能和现有的GID冲突
[root@localhost ~]# groupadd user6
[root@localhost ~]# tail -4 /etc/group
user2:x:1002:
user3:x:1003:
user5:x:1005:
user6:x:1006:
[root@localhost ~]# groupadd -g 1008 user8
[root@localhost ~]# tail -5 /etc/group
user2:x:1002:
user3:x:1003:
user5:x:1005:
user6:x:1006:
user8:x:1008:
# 删除用户组
格式:groupdel [options] GROUP
说明:附加组可以直接删除;主组必须先把所属用户移除才可删除
# 附加组可以直接删除;主组必须先把所属用户移除才可删除
[root@localhost ~]#tail -2 /etc/group
user6:x:1006:
user8:x:1008:
[root@localhost ~]# groupdel user8
[root@localhost ~]# tail -2 /etc/group
user5:x:1005:
user6:x:1006:
[root@localhost ~]# groupdel user5
groupdel: cannot remove the primary group of user 'user5'
# 切换用户su
su [options…] [-] [user [args…]]
# 不加任何选项为非登录式切换,即不会读取目标用户的配置文件(环境变量);
# 生产环境此模式会有位置的问题,故此不推荐此方式。
root@localhost ~]# su user3
[user3@localhost root]
# – UserName:切换用户身份(环境变量同时切换);不加用户名默认切换至root用户
[root@localhost ~]# su - user3
Last login: Wed Jul 17 21:15:53 CST 2017 on pts/0
[user3@localhost ~]$ env
[user3@localhost ~]$ su -
Password:
Last login: Wed Jul 17 21:19:23 CST 2017 on pts/0
[root@localhost ~]# whoami
root
# 文件权限
-
d rwx r-x r-x (也可以用二进制表示 111 101 101 --> 755)
-
数字 4 、2 和 1表示读、写、执行权限
-
d:标识节点类型(d:文件夹 -:文件 l:链接)
-
r:可读 w:可写 x:可执行
-
| 文件 | 文件夹 | |
|---|---|---|
| r | 可读取内容 | 可以ls |
| w | 可修改文件的内容 | 可以在其中创建或者删除子节点 |
| x | 能否运行这个文件 | 能否cd进入这个目录 |
-
u第一组rwx:表示这个文件的拥有者对它的权限:可读可写可执行
-
g第二组r-x: 表示这个文件的所属组用户对它的权限:可读,不可写,可执行
-
o第三组r-x: 表示这个文件的其他用户(相对于上面两类用户)对它的权限:可读,不可写,可执行
# 文件夹的执行权限
- 如果对文件夹有rw的权限:ls的时候,仅仅能知道目录下有文件,看不到详细信息
- 没有x权限:不能进入文件夹
- 有rwx权限的文件夹可以删除目录下的所有文件(没有对文件的权限也可以)
# 修改文件的权限
chmod g-rw haha.dat ## 表示将haha.dat对所属组的rw权限取消
chmod o-rw haha.dat ## 表示将haha.dat对其他人的rw权限取消
chmod u+x haha.dat ## 表示将haha.dat对所属用户的权限增加x
chmod a-x haha.dat ## 表示将haha.dat对所用户取消x权限
| 命令 | 组类型 | 操作符 | 权限 | 组对应的用户 |
|---|---|---|---|---|
| u | +(加入) | r/w/x | 文件的拥有者 | |
| chmod | g | -(除去) | r/w/x | 所属组用户 |
| o | =(设定) | r/w/x | 其他用户 | |
| a | 所用户 |
# 修改文件所有权
chown angela mydata ## 改变所属用户
chown :angela mydata ## 改变所属组
chown angela:angela mydata/ ## 同时修改所属用户和所属组
# 压缩和打包
z:gzip,通过gzip格式压缩或者解压缩
c:create,创建压缩文件
x:extract,解压缩文件,或者叫还原文件
v:verbose,显示过程
f:file,指定文件
t:list,列出文件
j:支持bzip2压缩和解压缩
# gzip
# gzip压缩 test.txt---> test.txt.gz,不会多出文件
gzip test.txt
# gzip解压缩
gzip -d test.txt.gz
# bzip2
# bzip2压缩: 压缩test.txt --> test.txt.bz2,不会多出文件
bzip2 test.txt
# bzip2解压缩
bzip2 -d test.txt.bz2
bunzip2 test.txt.bz2`
# tar
# 将test.txt 打包为test.txt.tar ,会多出一个test.txt.tar文件
tar -cvf test.txt.tar test.txt
# 追加打包: 表示将test2.txt文件追加到 test.txt.tar当中
tar -rvf test.txt.tar test2.txt`
# 打包并压缩
tar -zcvf ma.tar.gz /root/test
# 解包
tar -xvf test.txt.tar
# 解包并解压缩
tar -zxvf ma.tar.gz
# 解包解压缩到指定的路径
tar -zxvf ma.tar.gz -C /test
# 查看压缩包的内容
tar -ztvf ma.tar.gz
# 打包并压缩为bz2
tar -jcvf test.tar.bz2
# 解压tar.bz2:
tar -jxvf test.bar.bz2
# unzip
-
把文件解压到当前目录下
unzip test.zip -
如果要把文件解压到指定的目录下,需要用到-d参数。
unzip -d /temp test.zip -
解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数
unzip -n test.zip unzip -n -d /temp test.zip -
只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -l test.zip -
查看显示的文件列表还包含压缩比率
unzip -v test.zip -
检查zip文件是否损坏
unzip -t test.zip -
将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
unzip -o test.zip -d /tmp/
# 进程
-
进程是程序的执行过程,相对于程序,进程是动态的,在linux系统中,它与用户权限相关,程序与进程并没有一一对应,一个程序可能对应多个进程。
-
子进程与父进程:一个进程产生另外一个进程,产生的进程称为子进程,生成另外一个进程的进程称为父进程
# 进程状态
- 总体来看主要包括三种,分别是就绪状态、运行状态、等待状态
- 就绪状态指的是进程除了CPU资源,其他运行资源都已获得,当就就绪状态的进程得到CPU资源时,则进入进程进入运行状态,
- 运行状态的进程在时间片用完后会重新转换成就绪状态,
- 如果在运行时进程遇到IO等阻塞操作,则进程会进入等待状态,等待状态的进程当阻塞操作完成后,进程将进入就绪状态。
# 进程管理
-
ps命令:用于报告当前系统的进程状态。
ps 命令常用选项包括: 1、a显示所有用户的进程 2、u显示用户名和启动时间 3、x显示所有进程,包括没有控制终端的进程 4、e显示所有进程,包括没有控制终端的进程,较x选项,信息更为简略 5、l显示进程详细信息,按长格式显示 ps -au 显示所有用户进程,并给出用户名和启动时间等详细信息 ps -aux 显示所有用户进程,包括没有控制终端的进程,并给出用户和和启动埋单等详细信息 ps -el 按长格式显示进程详细信息 USER: 进程所有者 PID: 进程号 PPID: 进程的父进程ID %CPU: CPU占用率 C: 进程的CPU占用率 %MEM: 内存占用率 VSZ: 表示如果一个程序完全驻留在内存的话需要占用多少内存空间; RSS: 指明了当前实际占用了多少内存; TTY: 终端的次要装置号码 (minor device number of tty) F:进程的标志 S:进程的状态 STAT: 该进程程的状态,有以下值 D: 不可中断的静止 R: 正在执行中 S: 静止状态 T: 暂停执行 Z: 不存在但暂时无法消除 W: 没有足够的记忆体分页可分配 <: 高优先序的进程 N: 低优先序的进程 L: 有记忆体分页分配并锁在记忆体内 PRI:进程的优先权 NI:进程的Nice值 ADDR:进程的地址空间 SZ:进程占用内存的大小 WCHAN:进程当前是否在运行 TTY:进程所属终端 START: 进程开始时间 TIME: 执行的运行时间 COMMAND:所执行的指令 CMD:进程的命令 -
PID
-
%CPU: CPU占用率
-
C: 进程的CPU占用率
-
COMMAND:所执行的指令
# kill/pidof/pkill命令
1、kill pid 直接杀死进程,但不能保证一定能杀死
2、kill -9 pid 强制杀死进程
3、pidof命令用于查看某个进程的进程号(例如:pidof mysqld)
4、pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉
pkill -kill -t tty1 (踢出tty1用户)
# 进程切换
-
前台进程指的是进程在执行时会将命令行阻塞,直到进程执行完毕;
-
后台进程指的是进程在执行时不会阻塞当前命令行,而是在系统后台执行
1、ctrl + c 终止进程
2、ctrl + z 挂起进程
3、fg命令将进程转换到前台执行
4、bg命令将进程转换到后台执行
5、jobs命令查看任务
# top命令
-
Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,
-
它显示出 CPU 的使用、内存的使用、交换内存、缓存大小、缓冲区大小、过程控制、用户和更多命令。
-
它也会显示内存和 CPU 使用率过高的正在运行的进程。
-
按q键退出查看
# pstree命令
-
将进程间的关系以树结构的形式展示,能清楚看各进程之间的父子关系
pstree:以树状形式显示进程 -
pstree -p: 以树状形式显示进程,并且显示进程号
# JPS命令
-
JPS命令是JDK提供的一个检查系统是否启动了JVM进程的一个进程。
不是linux系统自带的。主要任务就是用来检查java进程的。
# 最后
Linux命令参考:https://www.ityww.cn/linux/linux-command