Linux
一、计算机基础
1、显示操作系统多少位
#操作系统的位数决定了内存的上限 ;如果是32位的操作系统那么内存上限为:2^32=4G内存
-
getconf LONG_BIT
root@10-120-11-246:~# getconf LONG_BIT
64
-
arch
root@10-120-11-246:~# getconf LONG_BIT
64
2、显示当前的终端号以及登录的用户有哪些
-
tty 显示当前的终端
[root@192 ~]# tty
/dev/pts/0
-
who 显示所有用户的终端信息
[root@192 ~]# who
zy tty1 2024-07-26 11:25
root pts/0 2024-07-26 09:53 (192.168.106.1)
-
whoami 显示当前用户的用户名
[root@192 ~]# whoami
root
-
w 显示所有用户的信息以及当前执行的操作
[root@192 ~]# w
11:27:41 up 1:34, 2 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
zy tty1 11:25 1:46 0.00s 0.00s -bash
root pts/0 09:53 1.00s 0.03s 0.00s w
3、shell概念
shell命令解释器也是一种高级语言
命令解释器:将用户的输入命令行拆解为"命令"与"参数",根据命令名找到对应要执行的程序,然后提交给内核执行
高级语言:提供了变量、函数、条件判断、循环等开发语言的功能
-
查看当前的SHELL类型
[root@192 ~]# echo $SHELL
/bin/bash
4、修改主机名
主机名支持数字、字母、横线、点(ygnahz-work1)
-
hostname临时修改主机名
[root@Rocky9 ~]# hostname aaaa
[root@Rocky9 ~]# exit
注销
[root@aaaa ~]# cat /etc/hostname
Rocky9
-
hostnamectl set-hostname 永久修改主机名 (重启或者退出当前终端生效)
[root@Rocky9 ~]# hostname aaaa
[root@Rocky9 ~]# exit
注销
[root@aaaa ~]# cat /etc/hostname
Rocky9
5、修改提示符格式
-
PS1变量
[root@Rocky9 ~]# hostname aaaa
[root@Rocky9 ~]# exit
注销
[root@aaaa ~]# cat /etc/hostname
Rocky9
6、内部命令和外部命令以及别名
-
内部命令:由shell自带,用户登录时自动加载到内存中
[root@Rocky9 ~]$ type history
history 是 shell 内建
-
外部命令:在磁盘中由对应的的可执行文件,当执行命令时才从磁盘加载到内存中,执行完毕后从内存中删除
[root@Rocky9 ~]$ type history
history 是 shell 内建
#对于常用的外部命令Linux会将其路径保存到hash中,达到快速寻找的效果
[root@Rocky9 ~]$ hash
命中 命令
1 /usr/bin/who
1 /usr/bin/vi
1 /usr/bin/ls
6 /usr/bin/clear
1 /usr/bin/cat
[root@Rocky9 ~]$ hash -r #清空hash的数据
[root@Rocky9 ~]$ hash
hash:哈希表为空
-
alias别名
[root@Rocky9 ~]$ type ll
ll 是“ls -l --color=auto”的别名
#设置别名
[root@Rocky9 ~]$ alias cdn="cd /etc/sysconfig/network-scripts"
[root@Rocky9 ~]$ alias cdn
alias cdn='cd /etc/sysconfig/network-scripts'
[root@Rocky9 ~]$ cdn
[root@Rocky9 network-scripts]$ pwd
/etc/sysconfig/network-scripts
#取消别名
[root@Rocky9 network-scripts]$ unalias cdn
[root@Rocky9 network-scripts]$ cdn
-bash: cdn:未找到命令
-
命令的执行顺序
相对路径/绝对路径 > 别名 > 内部命令 > hash缓存表 > 外部命令
7、查看帮助
-
whatis 显示外部命令的简略帮助信息
#如果第一次使用,那么需要mandb更新索引数据库
[root@Rocky9 ~]$ type history useradd
history 是 shell 内建
useradd 是 /usr/sbin/useradd
[root@Rocky9 ~]$ whatis history useradd
useradd (8) - 创建一个新用户或更新默认新用户信息
history (1) - bash built-in commands, see bash(1)
-
help 显示内部和外部命令命令的帮助
[root@Rocky9 ~]$ help history #内部命令
[root@Rocky9 ~]$ useradd --help #外部命令
-
man 显示详细的命令帮助信息
echo: echo [-neE] [参数 ...]
将参数写到标准输出。
在标准输出上,显示用空格分割的 ARG 参数后跟一个换行。默认追加换行
选项:
-n 不要追加换行
-e 对反斜杠转义的解释
-E 不对反斜杠转义的解释
echo' 对下列反斜杠字符进行转义:
\a 警告(响铃)
\c 抑制更多的输出,即后面不再添加任何字符(包括特殊字符 如换行符)
\n 换行
\r 回车
\t 横向制表符
\\ 反斜杠
#案例
[root@Rocky9 ~]$ echo "a\tb\tc"
a\tb\tc
[root@Rocky9 ~]$ echo -e "a\tb\tc"
a b c
8、echo的用法
echo: echo [-neE] [参数 ...]
将参数写到标准输出。
在标准输出上,显示用空格分割的 ARG 参数后跟一个换行。默认追加换行
选项:
-n 不要追加换行
-e 对反斜杠转义的解释
-E 不对反斜杠转义的解释
echo' 对下列反斜杠字符进行转义:
\a 警告(响铃)
\c 抑制更多的输出,即后面不再添加任何字符(包括特殊字符 如换行符)
\n 换行
\r 回车
\t 横向制表符
\\ 反斜杠
#案例
[root@Rocky9 ~]$ echo "a\tb\tc"
a\tb\tc
[root@Rocky9 ~]$ echo -e "a\tb\tc"
a b c
10、history的用法
显示操作历史列表
选项:
-c 删除所有条目从而清空历史列表。
-a 将当前会话的历史行追加到历史文件中
-r 读取历史文件并将内容追加到历史列表中
-w 将当前历史写入到历史文件中
设定自定义格式的历史
[root@Rocky9 ~]$ echo HISTTIMEFORMAT="%F %T " >> .bashrc
[root@Rocky9 ~]$ history
164 2024-07-26 15:10:40 vi .bashrc
165 2024-07-26 15:11:02 source .bashrc
166 2024-07-26 15:11:06 history
#每个用户的history保存在 .bash_history文件中
11、修改时区
-
date查看当前系统时间
[zy@ubuntu ~]$ date
Thu Sep 26 07:25:46 AM UTC 2024
-
timedatectl set-timezone 修改时区
#查看一共有多少核
[zy@ubuntu ~]$ lscpu | grep -Ei 'cpu\(s\)'
CPU(s): 2
On-line CPU(s) list: 0,1
NUMA node0 CPU(s): 0,1
[zy@ubuntu ~]$ grep -Ec "process" /proc/cpuinfo
2
13、查看cpu信息
-
lscpu 查看cpu信息
-
cat /proc/cpuinfo 查看cpu信息
#查看一共有多少核
[zy@ubuntu ~]$ lscpu | grep -Ei 'cpu\(s\)'
CPU(s): 2
On-line CPU(s) list: 0,1
NUMA node0 CPU(s): 0,1
[zy@ubuntu ~]$ grep -Ec "process" /proc/cpuinfo
2
14、查看内存和swap空间
-
free
[zy@ubuntu ~]$ free -h
total used free shared buff/cache available
Mem: 3.8Gi 476Mi 3.2Gi 1.5Mi 319Mi 3.3Gi
Swap: 3.8Gi 0B 3.8Gi
15、查看硬盘空间
-
cat /proc/partitions
[zy@ubuntu ~]$ cat /proc/partitions
major minor #blocks name
259 0 104857600 nvme0n1
259 1 1024 nvme0n1p1
259 2 2097152 nvme0n1p2
259 3 102757376 nvme0n1p3
11 0 2690412 sr0
252 0 51376128 dm-0
-
lsblk
[zy@ubuntu ~]$ lsblk -f | tr -s " "
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sr0 iso9660 Joliet Extension Ubuntu-Server 24.04 LTS amd64 2024-04-23-12-46-09-00
nvme0n1
├─nvme0n1p1
├─nvme0n1p2 ext4 1.0 55d3c438-235c-4dba-9933-4a1789e04310 1.7G 5% /boot
└─nvme0n1p3 LVM2_member LVM2 001 g4XfUJ-V7A5-ZsMK-i27B-2De2-ZHfG-xmAkYr
└─ubuntu--vg-ubuntu--lv ext4 1.0 6e7e89fc-4c5f-4149-aa6a-f3981f94e712 39.4G 13% /
16、uname的常见用法
[zy@ubuntu ~]$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
17、查看当前系统的发行版本
-
lsb_release -a 查看当前操作系统的发行版本
[zy@ubuntu ~]$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
-
/etc/os-release 查看当前操作系统的发行版本
[zy@ubuntu ~]$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
18、date显示时间
%y 年份最后两位数位 (00-99)
%m 月份(01..12)
%d 按月计的日期(例如:01)
%H 小时(00-23)
%M 分钟(00..59)
%S 秒(00-60)
%s 1970-01-01 00:00:00 UTC 以来的秒数
%T %y-%m-%d
%F %H-%M-%S
[root@Rocky9 ~]$ date +"%y-%m-%d %H-%M-%S"
24-09-26 21-22-37
20、关机重启
关机:shutdown -h now 、 init 0
重启:reboot 、 shutdown -r now 、 power off 、 init6
21、screen会话管理
ubuntu 直接安装 redhat 来自epel源
即使关闭窗口,也可以在保持窗口中的程序继续运行
Use: screen [-opts] [cmd [args]]
-S 新建一个会话,并命名
-r 连接会话
-ls 查看所有的会话列表
[root@Rocky9 ~]$ screen -S ping
[root@Rocky9 ~]$ screen -ls
There is a screen on:
13451.ping (Attached)
1 Socket in /run/screen/S-root.
22、hexdump以其它进制显示文件内容
用法:hexdump [选项] <文件>...
以十六进制、十进制、八进制、二进制或 ascii 显示文件内容。
选项:
-C 以十六进制显示字符
-s 跳过开头的指定字节偏移
-n 只解释规定字节长度的输入
#其中空格也算一个字节,注意win中换行为先回车后换行与Linux直接换行不同
[root@Rocky9 ~]$ cat a.txt
a b c d
[root@Rocky9 ~]$ hexdump -C -s 1 -n 2 a.txt
00000001 20 62 | b|
00000003
23、{} 特殊符号
[zy@ubuntu ~]$ echo {1..3}
1 2 3
[zy@ubuntu ~]$ echo {3..1}
3 2 1
[zy@ubuntu ~]$ echo {1..5..2}
1 3 5
[zy@ubuntu ~]$ echo /etc/{a,b}.txt
/etc/a.txt /etc/b.txt
二、文件管理
1、查找命令所在的位置
注意:内部命令集成在shell中,只有外部命令才有独立的磁盘文件
-
whereis
[root@zy ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
-
which
[root@zy ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
注意:有些命令即是内部命令也是外部命令 (为了防止由于shell不同而导致的cmd not found的问题)
[root@zy ~]$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
2、Linux下七种文件类型
- 普通文件
b 块设备文件
c 字符设备文件
d 目录
l 链接文件
p 管道文件
s 套接字文件
3、pwd的常见用法
pwd: pwd [-LP]
打印当前工作目录的名字。
选项:
-L 打印 $PWD 变量的值,如果它包含了当前的工作目录
-P 打印当前的物理路径,不带有任何的符号链接
[root@Rocky9 ~]$ ll -d /bin ; cd /bin
lrwxrwxrwx. 1 root root 7 5月 16 2022 /bin -> usr/bin
[root@Rocky9 bin]$ pwd -L #显示为软链接所在的路径
/bin
[root@Rocky9 bin]$ pwd -P #显示为软链接指定的路径
/usr/bin
#绝对路径和相对路径
绝对路径:以/开头的路径
相对路径:相对于当前目录的路径 如 cd ./data 适用于项目内部的文件相互访问
4、cd的常见用法
cd: cd [-L|[-P [-e]] [-@]] [目录] 改变当前目录至DIR目录。默认的DIR目录HOME。
#cd默认移动到家目录
[root@Rocky9 bin]$ cd
[root@Rocky9 ~]$
#cd .. 移动到父目录
[root@Rocky9 ~]$ cd ..
[root@Rocky9 /]$
#cd - 移动到上次所在的目录
[root@Rocky9 ~]$ cd -
/
[root@Rocky9 /]$
#cd ~ 移动到别人的家目录
[root@Rocky9 /]$ cd ~zy
[root@Rocky9 zy]$
5、dirname和basename
基名 basename
[root@zy ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens1
ifcfg-ens1
目录名 dirname
[root@zy ~]# dirname /etc/sysconfig/network-scripts/ifcfg-ens1
/etc/sysconfig/network-scripts
6、ls的常见用法
-i, --inode 显示每个文件的索引编号(inode 号)
-h, --human-readable 与 -l 和 -s 一起,以易于阅读的格式输出文件
-a, --all 不隐藏任何以 . 开始的项目
-A, --almost-all 列出除 . 及 .. 以外的任何项目
-r, --reverse 逆序排列
-R, --recursive 递归显示子目录
-S sort by file size, largest first
--time=WORD change the default of using modification times;
access time (-u): atime, access, use;
change time (-c): ctime, status;
birth time: birth, creation;
-t 按时间排序,最新的最前;参见 --time
-d, --directory 当遇到目录时列出目录本身而非目录内的文件
#按照大小排序列出etc目录下的文件
[root@Rocky9 etc]$ ls -S -lh
总用量 1.1M
-rw-r--r--. 1 root root 677K 6月 23 2020 services
-rw-r--r--. 1 root root 14K 9月 26 23:50 ld.so.cache
-rw-r--r--. 1 root root 8.8K 9月 25 21:21 kdump.conf
7、stat的常见用法
#显示文件状态
[root@Rocky9 ~]$ stat a.txt
文件:a.txt
大小:8 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:100664517 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-09-26 23:43:07.265938501 +0800 #atime
最近更改:2024-09-26 23:43:04.025922320 +0800 #mtime
最近改动:2024-09-26 23:43:04.025922320 +0800 #ctime
创建时间:2024-09-26 23:43:04.025922320 +0800
一般情况下atime只有距离上次atime时间超过一天才会修改,或者mtime比atime要新的时候才修改
8、rm的常见用法
用法:rm [选项]... [文件]... (谨慎使用)
删除指定<文件>。
-f, --force 强制删除。忽略不存在的文件,不提示确认
-i 每次删除前提示确认
-r, -R, --recursive 递归删除目录及其内容
[root@Rocky9 ~]$ ls -ld a
drwxr-xr-x. 2 root root 6 9月 27 17:12 a
[root@Rocky9 ~]$ rm a
rm: 无法删除 'a': 是一个目录
[root@Rocky9 ~]$ rm -r a
rm:是否删除目录 'a'?y
9、mkdir的常见用法
用法:mkdir [选项]... 目录...
若指定<目录>不存在则创建目录。
-p, --parents 递归创建目录
-m, --mode=模式 设置权限模式(类似chmod)
#创建多级目录需要使用-p
[root@Rocky9 ~]$ mkdir dir1/dir2/dir3
mkdir: 无法创建目录 “dir1/dir2/dir3”: 没有那个文件或目录
[root@Rocky9 ~]$ mkdir -p dir1/dir2/dir3
[root@Rocky9 ~]$ ls -ld dir1/dir2/dir3
drwxr-xr-x. 2 root root 6 9月 29 10:19 dir1/dir2/dir3
10、inode的概念
可以参考博文:https://blog.csdn.net/m0_61705102/article/details/123760663
文件的节点编号和分区大小有关,每个分区有独立的节点编号,可以使用df -i查看空闲的节点编号
经典面试题: 为什么df显示还有额外空间,但是仍然显示空间不足
[root@Rocky9 ~]$ df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 4096 0 4096 0% /dev
tmpfs 1857344 0 1857344 0% /dev/shm
tmpfs 742940 9196 733744 2% /run
/dev/mapper/rl_192-root 66924544 2121588 64802956 4% /
/dev/mapper/rl_192-home 32641024 260644 32380380 1% /home
/dev/nvme0n1p1 983040 228692 754348 24% /boot
tmpfs 371468 0 371468 0% /run/user/0
[root@Rocky9 run]$ touch a.txt
touch: 无法创建 'a.txt': 设备上没有空间
#由于节点编号使用完毕导致即使有磁盘空间也无法创建新文件
[root@Rocky9 run]$ df -i
文件系统 Inodes 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 459313 409 458904 1% /dev
tmpfs 464336 1 464335 1% /dev/shm
tmpfs 819200 819200 0 100% /run
/dev/mapper/rl_192-root 33495040 33639 33461401 1% /
/dev/mapper/rl_192-home 16353280 8 16353272 1% /home
/dev/nvme0n1p1 524288 358 523930 1% /boot
tmpfs 92867 15 92852 1% /run/user/0
11、标准IO重定向
将标准输入和标准输出指向其它文件,默认输入输出都显示在当前终端
-
cmd > or >> filename 标准输出
# cmd < filename 将文件中的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ echo 1+1 > num.txt
[root@Rocky9 ~]$ bc < num.txt
2
# cat <<EOF 以EOF为终止符结束标准输入,通常用于脚本中
[root@Rocky9 ~]$ bc <<EOF
> 1+1
> EOF
2
# cmd < <(cmd2) 将cmd2输出的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc < <(echo 1+1)
2
cmd <<< "string" 将string的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc <<< "1+1"
2
-
cmd 2> 标准错误
# cmd < filename 将文件中的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ echo 1+1 > num.txt
[root@Rocky9 ~]$ bc < num.txt
2
# cat <<EOF 以EOF为终止符结束标准输入,通常用于脚本中
[root@Rocky9 ~]$ bc <<EOF
> 1+1
> EOF
2
# cmd < <(cmd2) 将cmd2输出的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc < <(echo 1+1)
2
cmd <<< "string" 将string的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc <<< "1+1"
2
-
cmd < file 标准输入
# cmd < filename 将文件中的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ echo 1+1 > num.txt
[root@Rocky9 ~]$ bc < num.txt
2
# cat <<EOF 以EOF为终止符结束标准输入,通常用于脚本中
[root@Rocky9 ~]$ bc <<EOF
> 1+1
> EOF
2
# cmd < <(cmd2) 将cmd2输出的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc < <(echo 1+1)
2
cmd <<< "string" 将string的内容作为标准输入传递给cmd命令
[root@Rocky9 ~]$ bc <<< "1+1"
2
-
将标准输出和标准错误输入到同一个文件
#相当于对文件备份,指向同一个inode编号,创建硬链接后链接数加1,删除硬链接直到链接数为0 那么文件彻底被删除
注意:硬链接无法跨分区创建,无法对目录创建
[zy@ubuntu ~]$ ls -il b*
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b_link.txt
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b.txt
b_link.txt和b.txt的链接数都为2,删除b.txt后链接数减1
12、管道符
#相当于对文件备份,指向同一个inode编号,创建硬链接后链接数加1,删除硬链接直到链接数为0 那么文件彻底被删除
注意:硬链接无法跨分区创建,无法对目录创建
[zy@ubuntu ~]$ ls -il b*
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b_link.txt
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b.txt
b_link.txt和b.txt的链接数都为2,删除b.txt后链接数减1
13、硬链接和软链接
-
ln硬链接
#相当于对文件备份,指向同一个inode编号,创建硬链接后链接数加1,删除硬链接直到链接数为0 那么文件彻底被删除
注意:硬链接无法跨分区创建,无法对目录创建
[zy@ubuntu ~]$ ls -il b*
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b_link.txt
2621455 -rw-rw-r-- 2 zy zy 51 Sep 29 12:46 b.txt
b_link.txt和b.txt的链接数都为2,删除b.txt后链接数减1
-
软链接
#相当于Win中的快捷方式,有独立的indoe编号,文件大小等于文件名字大小,可以跨分区创建,可以对目录创建软链接
!!!注意1:使用rm删除软链接目录的时候,使用rm filename即可 切勿使用rm -rf filename/ 否则会删除原文件
!!!注意2:使用软链接时,链接文件能够通过绝对路径或者相对路径找到原文件
#使用rm删除软链接
[zy@ubuntu ~]$ cat ./dir1/a.txt
abc
[zy@ubuntu ~]$ ln -s ./dir1 dir2
[zy@ubuntu ~]$ rm dir2
[zy@ubuntu ~]$ cat ./dir1/a.txt
abc
#使用rm -rf filename/删除软链接,会丢失原文件!!!!!
[zy@ubuntu ~]$ ln -s ./dir1 dir2
[zy@ubuntu ~]$ rm -rf dir2/
[zy@ubuntu ~]$ cat ./dir1/a.txt
cat: ./dir1/a.txt: No such file or directory
14、tr的常见用法
用法:tr [选项]... SET1 [SET2]
-c 除了set1中的内容保留,其余的内容用st2替换
-d 删除set1中的内容
-s 压缩字符
-t 用set2替换set1中的内容
#只保留b其余内容用a代替
[root@Rocky9 ~]$ echo "abcdaaaabaaaa" | tr -c "b" "a"
abaaaaaabaaaaa[root@Rocky9 ~]$
#删除字符a中的内容
[root@Rocky9 ~]$ echo "abcda" | tr -d 'a'
bcd
#压缩字符
[root@Rocky9 ~]$ echo "abcdaaaabaaaa" | tr -s 'a'
abcdaba
#替换字符a和字符b 为字符x和字符y
[root@Rocky9 ~]$ echo "abcda" | tr -t 'ab' 'xy'
xycdx
三、用户和权限管理
1、用户和用户组
用户和用户组是通过ID来唯一标识的,root的默认ID为0
#可以使用id命令查看用户的id信息
[root@zy ~]# id zy
uid=1000(zy) gid=1000(zy) groups=1000(zy)
-
用户
超级管理员:0
系统账号ID范围:1~999 当一个程序在运行的时候,需要指定用户身份以便对资源进行分配
普通用户账号ID范围:1000+
-
组
Linux可以将一个或者多个用户加入用户组中,用户组通过GID来唯一标识
管理员组:0
系统组:1~999
普通组:100+
2、useradd的常见用法
用法:useradd [选项] 登录名
useradd -D
-d, --home-dir HOME_DIR 设置用户的家目录地址,默认为/home/username
-m, --create-home 创建用户的家目录
-M, --no-create-home 不创建用户的家目录
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-r, --system 创建一个系统账户
-u, --uid UID 新账户的用户 ID
-s, --shell SHELL 新账户的登录 shell
-c, --comment COMMENT 新账户的 GECOS 字段
#常见格式
[root@Rocky9 home]$ id ygnahz
id: “ygnahz”:无此用户
[root@Rocky9 home]$ useradd -u 1002 -c "ygnahz is test user" -m -d /home/y1 ygnahz
[root@Rocky9 home]$ id ygnahz
用户id=1002(ygnahz) 组id=1002(ygnahz) 组=1002(ygnahz)
#使用getent passwd 可以查看用户的配置信息
[root@Rocky9 home]$ getent passwd ygnahz
ygnahz:x:1002:1002:ygnahz is test user:/home/y1:/bin/bash
#由于Ubuntu中/etc/default/useradd 中默认的shell类型为sh类型,所以可以使用-s 修改类型为bash
[zy@ubuntu ~]$ cat /etc/default/useradd | grep -i "^shell"
SHELL=/bin/sh
root@ubuntu:~# useradd -r -u 666 -s /bin/bash ygnahz
root@ubuntu:~# id ygnahz
uid=666(ygnahz) gid=666(ygnahz) groups=666(ygnahz)
root@ubuntu:~# getent passwd ygnahz
ygnahz:x:666:666::/home/ygnahz:/bin/bash
#创建用户的时候,由于/etc/skel的存在默认会在家目录创建很多隐藏文件
[root@Rocky9 y1]$ ls -a
. .. .bash_logout .bash_profile .bashrc
[root@Rocky9 y1]$ ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc
如果我们修改/etc/skel文件中的内容,那么新创建的用户家目录中的默认文件也会修改
3、usermod的常见用法
用法:usermod [选项] 登录名
-d, --home-dir HOME_DIR 设置用户的家目录地址,默认为/home/username
-m, --create-home 创建用户的家目录
-M, --no-create-home 不创建用户的家目录
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表 注意使用-G修改附加组的时候,可以配合-a达到追加的效果
-r, --system 创建一个系统账户
-u, --uid UID 新账户的用户 ID
-s, --shell SHELL 新账户的登录 shell
-c, --comment COMMENT 新账户的 GECOS 字段
-l, --login NEW_LOGIN 修改用户的名字
4、userdel的常见用法
用法:userdel [选项] 登录名
选项:
-r, --remove 删除主目录和信件池
#默认删除不会删除掉用户的家目录,如果下个用户与被删除的用户有相同的uid,那么原文件被继承,可以使用-r删除其家目录
[root@Rocky9 home]$ ll
总用量 0
drwx------. 2 ygnahz ygnahz 62 10月 1 16:09 y1
drwx------. 2 zy zy 83 9月 27 00:53 zy
[root@Rocky9 home]$ userdel ygnahz
[root@Rocky9 home]$ ll
总用量 0
drwx------. 2 1002 1002 62 10月 1 16:09 y1
drwx------. 2 zy zy 83 9月 27 00:53 zy
[root@Rocky9 home]$ useradd -u 1002 y2
[root@Rocky9 home]$ ll
总用量 0
drwx------. 2 y2 y2 62 10月 1 16:09 y1
drwx------. 2 y2 y2 62 10月 1 16:21 y2
drwx------. 2 zy zy 83 9月 27 00:53 zy
5、groupadd的常见用法
用法:groupadd [选项] 组
-g, --gid GID 为新组使用 GID
6、groupdel的常见用法
用法:groupdel [选项] 组
选项:
-f, --force 即便是用户的主组也继续删除
7、passwd的常见用法
用法: passwd [选项...] <帐号名称>
--stdin 从标准输入读取密码 注:Ubuntu无此功能
-x, --maximum=DAYS 密码的最长有效时限(只有 root 用户才能进行此操作)
-n, --minimum=DAYS 密码的最短有效时限(只有 root 用户才能进行此操作)
-w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有 root 用户才能进行此操作)
-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有 root 用户才能进行此操作)
#案例
[root@Rocky9 home]$ echo "123456" | passwd --stdin zy
更改用户 zy 的密码 。
passwd:所有的身份验证令牌已经成功更新。
#结合之前的tr实现生成随机密码
[root@Rocky9 home]$ cat /dev/urandom | tr -dc "[:alnum:]" | head -c 10
2S0g87YK3O
[root@Rocky9 home]$ echo $(ccat /dev/urandom | tr -dc "[:alnum:]" | head -c 10) | passwd --stdin
8、文件和目录权限
-
文件
r: 可使用文件查看类工具,比如:cat,可以获取其内容
w: 可修改其内容,文件是否被删除和文件的权限无关
x: 可以执行(运行)此文件(此文件的内容必须是可执行)
-
目录
r:可以查看到目录中的列表,但是无法看见元数据信息也不能查看文件的内容
w:可以在目录中创建和删除内容
x:可以cd进入此目录,也可以查看到执行文件的元数据信息,属于目录可访问的最小权限
X:分配给目录的时候具有x权限,分配给文件则无x权限
10、chown的常见用法
用法:chown [选项]... [所有者][:[组]] 文件...
或:chown [选项]... --reference=参考文件 文件...
修改每个<文件>的所有者和/或所属组为给定的<所有者>和/或<组>
-R 递归修改
[root@Rocky9 y1]$ chown zy:zy a.txt
[root@Rocky9 y1]$ ll
总用量 0
-rw-r--r--. 1 zy zy 0 10月 1 16:49 a.txt
#递归修改用户权限
[root@Rocky9 y1]$ ll -d a a/b a/b/c
drwxr-xr-x. 3 root root 15 10月 1 16:51 a
drwxr-xr-x. 3 root root 15 10月 1 16:51 a/b
drwxr-xr-x. 3 root root 15 10月 1 16:51 a/b/c
[root@Rocky9 y1]$ chown -R zy:root a
[root@Rocky9 y1]$ ll -d a a/b a/b/c
drwxr-xr-x. 3 zy root 15 10月 1 16:51 a
drwxr-xr-x. 3 zy root 15 10月 1 16:51 a/b
drwxr-xr-x. 3 zy root 15 10月 1 16:51 a/b/c
11、chmod的常见用法
用法:chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式 文件...
或:chmod [选项]... --reference=参考文件 文件...
将每个文件的权限模式变更至指定模式。
-R, --recursive 递归修改文件和目录
每个模式字符串都应该匹配如下格式:"[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+"。
#模式法 a g o 分别代表用户、组、其它
[root@Rocky9 y1]$ chmod a=rwx a.txt
[root@Rocky9 y1]$ ll a.txt
-rwxrwxrwx. 1 zy zy 0 10月 1 16:49 a.txt
#数字发 r w x 分别用4 2 1表示
[root@Rocky9 y1]$ ll a.txt
-rwxrwxrwx. 1 zy zy 0 10月 1 16:49 a.txt
[root@Rocky9 y1]$ chmod 444 a.txt
[root@Rocky9 y1]$ ll a.txt
-r--r--r--. 1 zy zy 0 10月 1 16:49 a.txt