Linux常用命令

一、基本的目录结构

在这里插入图片描述

  • bin (binaries)存放二进制可执行文件
  • sbin (super user binaries)存放二进制可执行文件,只有root才能访问
  • etc (etcetera)存放系统配置文件
  • usr (unix shared resources)用于存放共享的系统资源
  • home 存放用户文件的根目录
  • root 超级用户目录
  • dev (devices)用于存放设备文件
  • lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
  • mnt (mount)系统管理员安装临时文件系统的安装点
  • boot 存放用于系统引导时使用的各种文件
  • tmp (temporary)用于存放各种临时文件
  • var (variable)用于存放运行时需要改变数据的文件

1.vagrant默认的挂载目录

Vagrantfile所在目录,默认挂载到虚拟机/vagrant
在这里插入图片描述
自定义挂载
在这里插入图片描述

二、常用命令

2.1 打印命令

echo hello linux
echo hello java > a.txt #覆盖
echo hello Java >> a.txt #追加

2.2 ls命令

ls -la #详细查看,所有文件和目录
  • -l (long)详细列表
  • -a (all) 显示隐藏文件、特殊目录.和…
  • ll = ls -l

2.3 man命令

man ls
  • ctrl+f:下一页
  • ctrl+b:上一页
  • :q退出

三、系统命令

3.1 du

显示指定的文件(目录)已使用的磁盘空间

  • -h 显示单位
  • -s 显示总的大小
cd ~
du -s -h

3.2 free

显示当前内存和交换空间的使用情况

free

3.3 netstat

显示网络状态信息,查看端口占用情况

  • -a 显示所有连接和监听端口
  • -t (tcp)仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -n 拒绝显示别名,能显示数字的全部转化成数字。
  • -p 显示建立相关链接的程序名
sudo yum install net-tools -y #sudo:得的管理员权限执行命令
netstat -tunpl

3.4 ifconfig

网卡网络配置详解
add<地址> 设置网络设备IPv6的IP地址。
del<地址> 删除网络设备IPv6的IP地址。
down 关闭指定的网络设备。
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
io_addr<I/O地址> 设置网络设备的I/O地址。
irq<IRQ地址> 设置网络设备的IRQ。
media<网络媒介类型> 设置网络设备的媒介类型。
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
mtu<字节> 设置网络设备的MTU。
netmask<子网掩码> 设置网络设备的子网掩码。
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
up 启动指定的网络设备。
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
-promisc 关闭或启动指定网络设备的promiscuous模式。
[IP地址] 指定网络设备的IP地址。
[网络设备] 指定网络设备的名称。

ifconfig

3.5 ping

测试网络的连通性
-d 使用Socket的SO_DEBUG功能。
-c <完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络接口送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
-w 在 deadline 秒后退出。
-W 在等待 timeout 秒后开始执行。

ping 主机名称或是IP地址

3.6 top

显示当前系统中耗费资源最多的进程 (实时)

3.7 ps

显示瞬间的进程状态(快照)

  • -e /-A 显示所有进程,环境变量
  • -f 全格式
  • -a 显示所有用户的所有进程(包括其它用户)
  • -u 按用户名和启动时间的顺序来显示进程
  • -x 显示无控制终端的进程
ps -aux

#管道 命令1 | 命令2 把命令1的结果给命令2作为参数
 cat Hello.java | grep class
 
 ps -aux | grep tail

3.8 kill

根据进程ID(pid)杀死进程

kill -9 进程ID

四、文件或目录常用命令

4.1 cd

进入目录

[vagrant@v1 ~]$ cd /vagrant
[vagrant@v1 vagrant]$ ls
bootstrap.sh  centos_v1.box  centos_v2.box  centos_v3.box  Vagrantfile

#进入用户的宿主目录
cd ~ 

cd .. #进入上级目录

#./ 不写,都是代表当前目录

cd - 进入上一个历史目录

[vagrant@v1 ~]$ cd
[vagrant@v1 ~]$ pwd
/home/vagrant
[vagrant@v1 ~]$ cd -
/home/vagrant
[vagrant@v1 ~]$ pwd
/home/vagrant
[vagrant@v1 ~]$ #

4.2 pwd

显示当前工作目录

[vagrant@v1 ~]$ cd /vagrant
[vagrant@v1 vagrant]$ ls
bootstrap.sh  centos_v1.box  centos_v2.box  centos_v3.box  Vagrantfile
[vagrant@v1 vagrant]$ pwd
/vagrant

4.3 使用vagrant登录

使用vagrant安装的虚拟机默认2个用户

  • 用户名:vagrant ,密码vagrant
  • 用户名:root,密码vagrant
    在这里插入图片描述
[vagrant@s1 ~]$ pwd
/home/vagrant

4.4 su

su vagrant
[vagrant@s1 /]$ cd /root/
-bash: cd: /root/: Permission denied #使用vagrant不能访问/root

[vagrant@s1 /]$ su root
Password:
[root@s1 /]# cd /root/

4.5 mkdir

  • 创建目录(make directoriy)
    • -p 父目录不存在情况下先生成父目录 (parents)
[vagrant@v1 ~]$ mkdir /home/vagrant/java_project/src
mkdir: cannot create directory ‘/home/vagrant/java_project/src’: No such file or directory
[vagrant@v1 ~]$ mkdir -p  /home/vagrant/java_project/src
[vagrant@v1 ~]$ ll
total 0
drwxrwxr-x 3 vagrant vagrant 16 Jul  9 08:24 java_project

[vagrant@v1 ~]$ cd java_project
[vagrant@v1 java_project]$ ll
total 0
drwxrwxr-x 2 vagrant vagrant 6 Jul  9 08:24 src
[vagrant@v1 ~]$
#创建目录写{}-{}, 结果是生成笛卡尔积
mkdir -p ~/{master1,master2,master3}-{logs,data}

4.6 tree

以树列表目录


sudo yum install tree -y

[vagrant@v1 ~]$ tree java_project
java_project
└── src

4.7 touch

创建空文件

#想创建好目录
[vagrant@v1 ~]$ mkdir -p /home/vagrant/java_project/src/main/java
[vagrant@v1 ~]$ mkdir -p /home/vagrant/java_project/src/main/resource
[vagrant@v1 ~]$ mkdir -p /home/vagrant/java_project/test
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
#创建文件
[vagrant@v1 ~]$ cd java_project/src/main/java/
[vagrant@v1 java]$ touch HelloWorld.java
[vagrant@v1 java]$ cd
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       │   └── HelloWorld.java
│       └── resource
└── test

4.8 cp

拷贝文件,目录

  • -r:递归拷贝
    在这里插入图片描述
[vagrant@v1 ~]$ cp java_project/src/main/java/ ./java_project/src/main/resource
cp: omitting directory ‘java_project/src/main/java/’
#当前目录下存在文件 只能递归拷贝 -r
[vagrant@v1 ~]$ cp -r java_project/src/main/java/ ./java_project/src/main/resource
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       │   └── HelloWorld.java
│       └── resource
│           └── java
│               └── HelloWorld.java
└── test

4.9 rm

删除文件或者目录

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。
#删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为:
rm  -rf  要删除的文件名或目录

#删除文件名 test.txt:
rm  -rf   test.txt

#删除目录 test,不管该目录下是否有子目录或文件,都直接删除:
rm  -rf   test/

[vagrant@v1 ~]$ rm java_project/src/main/resource/java/HelloWorld.java
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       │   └── HelloWorld.java
│       └── resource
│           └── java
└── test

4.10 mv

移动文件和目录


[vagrant@v1 ~]$ mv java_project/src/main/resource/java/ java_project/test/
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       │   └── HelloWorld.java
│       └── resource
└── test
    └── java

mv可以修改文件名


[vagrant@v1 ~]$ mv java_project/src/main/java/HelloWorld.java java_project/test/java/Hello.java
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java

4.11 cat

显示文本文件内容 (catenate)

cat HelloWorld.java

cat a.txt > b.txt #把a.txt内容覆盖到b.txt
cat a.txt >> b.txt #吧a.txt追加到b.txt

4.12 more、less

分页显示文本文件内容

more HelloWorld.java
less HelloWorld.java

4.13 head

  • -n:显示前几行内容
[vagrant@v1 vagrant]$ head -n 5 HelloWorld.java
public class HelloWorld {

    public static void main(String[] args) {
        //1. 独立编写HelloJava程序,并配上必要的注释。
        System.out.println("hello java");
[vagrant@v1 vagrant]$

4.5 tail

  • -n 显示后几行数据
  • -f b.log 循环读取(fellow,即时读取)
[vagrant@v1 vagrant]$ tail -n 5 HelloWorld.java
        System.out.println("\t\t\t*\t\t\t\t*");
        System.out.println("\t\t\t\t*\t\t*");
        System.out.println("\t\t\t\t\t*\t");
    }
}
[vagrant@v1 vagrant]$

场景1
启动两个session
在其中一个session追加内容

#session1
[vagrant@v1 vagrant]$ echo hello111 >> HelloWorld.java
[vagrant@v1 vagrant]$ echo hello222 >> HelloWorld.java
[vagrant@v1 vagrant]$ echo hello333 >> HelloWorld.java

#session2
[vagrant@v1 vagrant]$ tail -n 5 -f HelloWorld.java
        System.out.println("\t\t\t*\t\t\t\t*");
        System.out.println("\t\t\t\t*\t\t*");
        System.out.println("\t\t\t\t\t*\t");
    }
}
tail: unrecognized file system type 0x786f4256 for ‘HelloWorld.java’. please report this to bug-coreutils@gnu.org. reverting to polling
hello111
hello222
hello333

ctrl+c 退出

4.5 wc

统计文本的行数、字数、字符数(word count)

  • -m 统计文本字节数
  • w 统计文本字数
  • -l 统计文本行数
[vagrant@v1 vagrant]$ echo "hello java welcome to beijing" > a.txt
[vagrant@v1 vagrant]$ wc -w -l -m a.txt
 1  5 30 a.txt
[vagrant@v1 vagrant]$

4.5 find

查找文件

[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java

6 directories, 1 file
[vagrant@v1 ~]$ find -name Hello.*
./java_project/test/java/Hello.java

4.5 grep

查找文本
查找文本

  • -n显示行数
  • -i不区分大小写
grep class HelloWorld.java -n -i -o

[vagrant@v1 vagrant]$ grep class HelloWorld.java -n -i -o
1:class

4.5 ln

格式

ln -s 目标地址 文件名

创建软连接

[vagrant@v1 ~]$ tree java_project/
java_project/
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java

6 directories, 1 file
[vagrant@v1 ~]$ ln -s java_project/test/java/Hello.java hello
[vagrant@v1 ~]$ ll
total 0
lrwxrwxrwx 1 vagrant vagrant 33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant 27 Jul  9 08:38 java_project

echo "hello spring" >> hello #通过软连接添加内容
cat hello #通过软连接查看文件内容

五、压缩和打包命令

5.1 gzip

把文件和目录压缩成gz格式

#压缩
[vagrant@v1 ~]$ gzip java_project/test/java/Hello.java
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java.gz
#解压
[vagrant@v1 ~]$ gzip -d java_project/test/java/Hello.java.gz
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java

5.2 bzip2

#压缩
[vagrant@v1 ~]$ bzip2 java_project/test/java/Hello.java
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java.bz2
#解压
[vagrant@v1 ~]$ bzip2 -d  java_project/test/java/Hello.java.bz2
[vagrant@v1 ~]$ tree java_project
java_project
├── src
│   └── main
│       ├── java
│       └── resource
└── test
    └── java
        └── Hello.java

5.2 tar(推荐)

  • 打包目录成tar文件
  • 整合gzip和bzip2压缩
  • -c 建立一个压缩文件的参数指令(create)
  • -x 解开一个压缩文件的参数指令(extract)
  • -z 是否需要用 gzip 压缩
  • -j 是否需要用 bzip2 压缩
  • -v 压缩的过程中显示文件(verbose)
  • -f 使用档名,在 f 之后要立即接档名(file)

(1)打包

#压缩打包
[vagrant@v1 ~]$ tar -cvf java_project.tar ./java_project
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 12
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar

#解开压缩包
[vagrant@v1 ~]$ rm -rf java_project #先删除原文件
[vagrant@v1 ~]$ ll
total 12
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
[vagrant@v1 ~]$ tar -xvf java_project.tar #解开java_project.tar压缩文件
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 12
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar

(2)以gzip方式压缩

#gzip压缩
[vagrant@v1 ~]$ tar -cvzf java_project.tar.zip ./java_project
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 16
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip

#解开gzip压缩
[vagrant@v1 ~]$ rm -rf java_project #先删除原文件
[vagrant@v1 ~]$ ll
total 16
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip
[vagrant@v1 ~]$ tar -xvzf java_project.tar.zip #解开java_project.tar压缩文件
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 16
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip

(3)以biz2方式压缩和解压

#biz2压缩
[vagrant@v1 ~]$ tar -cvjf java_project.tar.bz2 ./java_project
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 20
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:59 java_project.tar.bz2
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip

#解开biz2压缩
[vagrant@v1 ~]$ rm -rf java_project #先删除原文件
[vagrant@v1 ~]$ ll
total 20
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:59 java_project.tar.bz2
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip
[vagrant@v1 ~]$ tar -xvjf java_project.tar.bz2 #解开biz2压缩文件
./java_project/
./java_project/src/
./java_project/src/main/
./java_project/src/main/java/
./java_project/src/main/resource/
./java_project/test/
./java_project/test/java/
./java_project/test/java/Hello.java
[vagrant@v1 ~]$ ll
total 20
lrwxrwxrwx 1 vagrant vagrant    33 Jul  9 09:23 hello -> java_project/test/java/Hello.java
drwxrwxr-x 4 vagrant vagrant    27 Jul  9 08:38 java_project
-rw-rw-r-- 1 vagrant vagrant 10240 Jul  9 09:46 java_project.tar
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:59 java_project.tar.bz2
-rw-rw-r-- 1 vagrant vagrant   277 Jul  9 09:52 java_project.tar.zip

六、vim命令

vi / vim是Unix / Linux上最常用的文本编辑器而且功能非常强大。

6.1 vim模式

在这里插入图片描述

6.2 底行命令

  • :wq保存退出
  • :q! 不保存退出
  • :q 退出,如果内容有改变不能退出
  • :set number 显示行号
  • :set nonumber 隐藏行号
  • :w filename 另存为文件
  • :e!撤销所有操作
  • :行号:调到指定的行

6.3 移动命令

  • w b 下一个,上一个单词
  • 0, $ 行首,行尾
  • gg 第一行
  • G 最后一行
  • xG到x行

6.4 替换命令

  • :1,$s/private/public/g 将第一行到追后一行的private替换为public
  • :1,$s/public/protected/c 将第一行到追后一行的public替换为protected(有提示)

6.5 编辑命令

  • x删除一个字符
  • dd 删除一行
  • yy复制一行
  • p粘贴
  • 输入v进入选择模式,选择内容,输入y复制,调到要黏贴的位置输入p粘贴
  • 输入u 撤销操作
  • 在一般模式中输入/8080查找8080,输入n查找下一个
  • 在一般模式输入r+替换的字符,执行替换

七、用户管理

linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰

7.1 用户管理的配置文件

  • 保存用户信息的文件:/etc/passwd
  • 保存密码的文件:/etc/shadow
  • 保存用户组的文件:/etc/group
  • 保存用户组密码的文件:/etc/gshadow
  • 用户配置文件:/etc/default/useradd

7.2 /etc/passwd格式

用户名用户登陆系统的用户名
密码密码位
UID用户标示号
GID默认组标示号
描述信息存放用户的描述信息
宿主目录用户登陆系统的默认目录,默认是在/home/下
命令解析器用户使用的Shell,默认是bash

在这里插入图片描述
用户的分类

  • 超级用户:(root,UID=0)
  • 普通用户:(UID在1000以上)
  • 伪用户:(UID在1到999)
    • 系统和服务相关的:bin、daemon、shutdown等
    • 进程相关的:mail、news、games等
    • 伪用户不能登陆系统,而且没有宿主目录

7.2 /etc/shadow格式

密码配置文件

用户名登陆系统的用户名
密码加密密码
最后一次修改时间用户最后一次修改密码距现在的天数,从1970-1-1起
最小时间间隔两次修改密码之间的最小天数
最大时间间隔密码有效天数
警告时间从系统警告到密码失效的天数
账号闲置时间账号闲置时间
失效时间密码失效的天数
标志标志

7.4 用户的组

  • 每个用户至少属于一个用户组
  • 如果创建用户,没有指定组,此用户指定跟用户名同名组
  • 每个用户组可以包含多个用户
  • 同一个用户组的用户享有该组共有的权限
    |||
    |–|–|
    组名| 用的所在的组
    组密码 |密码位,一般不使用
    GID |主标示号
    组内用户列表 |属于改组的用户列表

7.5 用户和组管理命令

7.5.1 用户管理命令

  • useradd:添加用户
    • -u 指定组ID(uid)
    • -g 指定所属的组名(gid)
    • -G 指定多个组,用逗号“,”分开(Groups)
    • -c 用户描述(comment)
    • -e 失效时间(expire date)
  • usermod:修改用户
    • -l 修改用户名 (login)usermod -l a b(b改为a)
    • -g 添加组 usermod -g sys tom -G添加多个组 usermod
    • -G sys,root tom–L 锁定用户账号密码(Lock)
    • –U 解锁用户账号(Unlock)
  • userdel:删除用户
    • -r 删除账号时同时删除目录(remove)

7.5.2 组管理的命令

  • 添加组:groupadd
    • -g 指定gid
  • 修改组:groupmod
    • -n 更改组名(new group)
  • 删除组:groupdel
  • groups 显示用户所属组

7.5.3 案例

添加一个gb用户,设置它属于users组,并添加注释信息

useradd gb
usermod -g users gb  #usermod -G users gb
usermod -c "hr jack" gb

#等于上面三个命令
useradd -g users -c "hr jack" jack

两个命令 usermod -g users gbusermod -G users gb 的区别如下:

  1. usermod -g users gb: 这个命令将用户 “jack” 的主要组(primary group)更改为 “users” 组。主要组是在用户创建时分配的默认组,它对用户的访问权限和文件所有权起着重要作用。

  2. usermod -G users gb: 这个命令将用户 “jack” 添加到 “users” 组中的附加组(secondary groups)。附加组是用户除了主要组以外所属的其他组,它可以给用户提供在多个组之间共享资源或访问特定权限。

简而言之,-g 选项用于更改用户的主要组,而 -G 选项用于管理用户的附加组。

设置密码

passwd gb

将gb添加到sys和root组中
将jack添加到sys和root组中

usermod -G sys,root gb
usermod -G sys,root jack

把jack从sys组中删除

  • gpasswd:这是一个管理组密码文件的命令。
    • -d:这是 gpasswd 命令的选项,表示删除用户从组中。
      这个命令的作用是将用户 jack 从组 sys 中删除。
  1. gpasswd -d:使用 gpasswd 命令以删除用户从组的方式。
  2. jack:指定要从组中删除的用户名。
  3. sys:指定要删除用户 jack 的组名。 执行这个命令后,用户 jack 将不再是组 sys 的成员。请注意,该命令需要以管理员或具有适当权限的用户身份运行
gpasswd -d jack sys

显示jack的组

[root@v1 etc] groups gb
gb : users root sys
[root@v1 etc] groups jack
jack : users root
[root@v1 etc] groups root
root : root

添加一个hr组

groupadd hr

修改hr组为sale组

groupmod -n sale hr

jack添加到sale组

usermod -G sale jack

[root@v1 etc] groups jack
jack : users sale

八、权限管理

8.1 权限表示符号

在这里插入图片描述
执行

[vagrant@v1 ~]$ ll
total 4
drwxrwxr-x 4 vagrant vagrant  27 Jul 10 14:16 java_project
-rwxrwxrwx 1 vagrant vagrant 729 Oct 31  2022 User.java
  • 第1位:文件类型(d 目录,- 普通文件,l 链接文件)
  • 第2-4位:所属用户权限,用u(user)
  • 表示第5-7位:所属组权限,用g(group)表示
  • 第8-10位:其他用户权限,用o(other)表示第
  • 2-10位:表示所有的权限,用a(all)表示

三种基本权限

  • r 读权限(read)4
  • w 写权限(write)2
  • x 执行权限 (execute)1

8.2 chmod命令

chmod修改文件权限命令(change mode)

  • 参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
  • 两种方式
    • 例如:chmod u+x a.txt,给a.txt增加当前用户的执行权限
    • 用数字来表示权限(r=4,w=2,x=1,-=0) 例如:chmod 750 b.txt :表示b.txt的权限当前用户是rwx,当前用户的组rx,其他用户没有权限

案例:

#设置~/vagrant目录让其他人可以进入
[gb@v1 ~]$ su vagrant
Password:
[vagrant@v1 gb]$ cd /vagrant
[vagrant@v1 vagrant]$ ll
total 786273
-rwxrwxrwx 1 root root       423 Jul  9 08:08 bootstrap.sh
-rwxrwxrwx 1 root root 805135478 Jul  4 17:11 centos_v1.box
-rwxrwxrwx 1 root root       905 Jul 10 10:26 Vagrantfile

#先自行创建一个用户 useradd gb 
#进入 ~/vagrant目录 发现并没有打开权限
[root@v1 ~]# su gb
[gb@v1 ~]$ cd /home/vagrant
bash: cd: /home/vagrant: Permission denied

#设置~/vagrant的目录的其他用户有读写执行权限
su vagrant/root
chmod o+rwx ~/vagrant

#修改User.java的权限,让所有人有读写执行
su root/vagrant
chmod 777 ~/User.java
#修改User.java的权限,当前用户

在这里插入图片描述

#设置#设置User.java文件
当前用户(u)
 - rwx
当前组(g)
 - rx
 其他用户(o)
 - 没有权限
 所有用户(a)
  xxx

#方式1
chomod u+rwx,g-w,o-rwx ~/User.java
#方式2
chmod 750 User.java

8.3 chown命令

改变文件所属用户,文件所属的组

  • -R:递归
[vagrant@v1 ~]$ ll
total 4
drwxrwxr-x 4 vagrant vagrant  27 Jul 10 14:16 java_project
-rwxrwxrwx 1 vagrant vagrant 729 Oct 31  2022 User.java

#sudo 提升到管理员权限
[vagrant@v1 ~]$ sudo  chown root:users User.java
[vagrant@v1 ~]$ ll
total 4
drwxrwxr-x 4 vagrant vagrant  27 Jul 10 14:16 java_project
-rwxrwxrwx 1 root    users   729 Oct 31  2022 User.java


#使用gb查看User文件,因为gb属于users,所以可以查看
cat User.java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值