Linux常用命令(每日两更,新增用户和权限管理)

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值