liudehaos

还历史以真诚,还生命以过程。 ——余秋雨
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Linux 基础命令& Shell

Posted on 2022-08-24 09:47  liudehaos  阅读(135)  评论(0)    收藏  举报

一、Linux 基础命令

linux基础命令:


1、ll 和 ls 查看当前目录下所有的文件和文件夹
2、cd 切换目录
3、pwd 查看当前目录的一个完整路径
4、ls -a 列出当前目录下的所有文件(包括隐藏文件)
5、stat 文件名 查看文件信息
6、ls --help 查看ls用法(--help查看命令使用手册)
7、mkdir 文件夹的名称
8、mkdir-p .... 创建多级文件夹
9、touch 文件名 创建文件
10、mv 移动一个文件,可以在移动的同时修改文件名
11、cp 复制文件
12、. 当前目录 .. 上一级目录
13、rm 文件的名称 删除一个文件,会进行提示,输入y则表示删除,输入n表示不删除
14、rm -f 文件的名称 不进行提示强制删除一个文件
15、rm -r 删除一个文件或文件夹,会进行提示,输入y则表示删除,输入n表示不删除
16、rm -rf 强制删除文件或文件夹,不进行提示 使用时一定要注意路径!!!
17、cat 文件名 不打开文件查看文件内容
18、tac 文件名 不打开文件倒序查看内容
19、cat file1 file2 > file3 文件合并 ,注意的是file3目标文件可以不存在,会自动创建,如果存在则会覆盖原本内容
20、cat -b 显示行号输出
21、分屏显示 more 用一次显示一屏,没有显示完时最后一行显示进度。回车显示下一行,按b显示上一页,空格显示下一页,q退出。

文件操作


1、如何创建文件
a、touch 文件
b、vi 文件名

vi 打开文件
按下i进入编辑模式
按下esc 退出编辑模式
英文输入状态下 输入:
输入wq表示保存并退出
输入q!表示不保存退出
删除一行
进入编辑模式后退格一个一个字符删除
不进入编辑模式 连续两次 d表示删除一行

另外一种编辑模式 vim
centOS7并不自带这种编辑命令,需要额外下载安装
通过yum进行下载并安装 (类比python中的pip)
yum install vim
yum -y install vim 使用这个命令在安装过程中不需要手动输入y进行继续,默认都是y

 

linux安装jdk1.8


1、上传jdk压缩包到/usr/local/soft/目录下
2、使用解压命令进行解压 tar -zxvf jdk-8u171-linux-x64.tar.gz
3、配置环境变量
在linux中环境的变量的文件是/etc/profile
4、打开并编辑环境变量文件
vim /etc/profile
5、按下i进入编辑模式(注意:不要修改文件原本的内容,我们增加环境变量只需要额外增加即可,不要动原本的内容!!!!!!)
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
export PATH=.:$PATH:$JAVA_HOME/bin
6、保存退出
7、在linux中环境变量修改完后需要使用命令让其生效
source /etc/profile


卡住不能操作的原因是因为,下意识的ctrl+s
可能会出现的错误:
1、发现交换文件 "/etc/.profile.swp"
所有者: root 日期: Sat Apr 23 15:35:57 2022
文件名: /etc/profile
修改过: 是
用户名: root 主机名: master
进程 ID: 61454
正在打开文件 "/etc/profile"
日期: Sat Apr 23 15:2
这是由于上一次打开的文件没有正确关闭导致的,需要删除交换文件: rm -rf /etc/.profile.swp

 

修改主机名(centOS7)
vim /etc/hostname
修改后需要重启虚拟机
使用命令重启:reboot


centOS7关闭防火墙


systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
查看防火墙状态
firewall-cmd --state
systemctl status firewalld.service
启动防火墙
systemctl start firewalld.service

关闭networkmanage服务(centOS7内置一个网络服务)
systemctl status NetworkManager #查看NetworkManager状态
systemctl stop NetworkManager #停止NetworkManager
systemctl disable NetworkManager#禁止NetworkManager开机启动

二、 虚拟机克隆

1、克隆之前不要开启被克隆的虚拟机
2、注意:克隆过程中需要选择完整克隆!!!
3、克隆完后不要立即启动,因为mac地址和被克隆的虚拟机一模一样,需要修改克隆后虚拟机的mac地址
4、需要修改克隆后虚拟机的主机名和ip地址,先不要启动被克隆的虚拟机
5、修改主机名:
cd /etc
vim hostname
修改后重启生效
6、修改ip地址
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33
7、重启 reboot

基础命令进阶:
1、远程复制命令:
远程复制文件:scp test.txt 192.168.40.130:/usr/local/soft/
远程复制文件夹:scp -r aaaa 192.168.40.120:/usr/local/soft/

2、配置ip映射
2.1、vim /etc/hosts

添加如下内容:
# 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.40.110 master
192.168.40.120 node1
192.168.40.130 node2

2.2、远程复制到其他节点上,覆盖原来的hosts文件,每台虚拟机都要进行覆盖
scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts

2.3、覆盖完后,尝试ping其他虚拟机


3、配置免密操作(每个虚拟机都要进行操作)
在任意目录都可以执行
3.1 ssh-keygen -t rsa 然后三次回车
3.2 ssh-copy-id -i 主机名
注意:生成密钥的虚拟机复制密钥的时候,自己也要复制一份
举例:ssh-copy-id -i master
ssh-copy-id -i node1
ssh-copy-id -i node2

 

三、Linux中用户管理,用户权限控制

## 1、用户组管理



```undefined
    用户组的管理包括用户组的添加、删除和修改。

    为什么要建立用户组

    人事部有20名员工,我们要建立一个组,叫 hr,这样就不用分别给20个员工设置权限了。
```

### ① 用户组添加

命令:groupadd

作用:添加组

语法:# groupadd  [参数选项  选项值]  用户组名

选项:-g:设置用户组ID 数字,如果不指定,则默认从1000 之后递增(1-999系统组)



```bash
用法一:groupadd 组名
示例代码:
#groupadd shujia
含义:新建一个组叫做shujia
```

![image-20220424210357255](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424210357255.png)

提示:linux下我们执行完命令,有时候会没有任何提示,直接回到#提示符,这种状态表明,命令执行成功,没有报错。==“没有消息就是最好的消息”==

存储用户组信息的文件:/etc/group
 使用cat命令,查看/etc/group文件

/etc/group文件结构:

特别说明:

1) 密码位`x`代表`占位符`,用户组可以设置密码,但是大部分情况下不需要设置

2)组内用户名:表示附加组是该组的用户名称。

![image-20220424210518953](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424210518953.png)



### ② 用户组修改

命令:groupmod

语法:# groupmod   [选项   选项值]   用户组名

选项:-g  :gid缩写,设置一个自定义的用户组ID 数字



```undefined
   -n  :name缩写,设置新的用户组的名称
```

示例代码:修改shujia用户组,将组ID改成1100,将名称改为wyhshujia

```bash
用法一:groupmod -g 新的组ID -n 新的组ID 原有组ID
示例代码:
#groupmod -g 1100 -n wyhshujia shujia
含义:将shujia组的组ID改成1100,组名改成wyhshujia
```

![image-20220424210843566](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424210843566.png)

### ③ 用户组删除

命令:groupdel

语法:# groupdel  用户组名

案例:删除wyhshujia组



```bash
用法一:groupdel 组名
示例代码:
#groupdel wyhshujia
含义:将wyhshujia组删除
```

![image-20220424210949209](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424210949209.png)

## 2、用户管理

用户的管理涉及用户的添加、删除和修改。

与用户相关的文件:/etc/passwd

### ①useradd添加用户

命令:useradd

作用:添加用户

语法:# useradd   [选项  选项的值]   …   用户名

选项:-g:表示指定用户的用户主(主要)组,选项值可以是用户组ID,也可以是组名



```objectivec
   -G:表示指定用户的用户附加(额外)组,选项值可以是用户组ID,也可以是组名

   -u :uid,用户的id(用户的标识符),系统默认会从500 /或1000之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】

   -c:comment,添加注释(选择是否添加)

   -s:指定用户登入后所使用的shell 解释器,默认/bin/bash【专门的接待员】,如果不想让其登录,则可以设置为/sbin/nologin   (重要)

   -d:指定用户登入时的启始目录(家目录位置)

       -n:取消建立以用户名称为名的群组(了解)

    当我新建一个账户叫user01, 同时,系统会自动建立一个组也叫user01
```



```bash
用法一:useradd 用户名
示例代码:
#useradd wyh
含义:创建用户wyh,不带任何选项。
```

注意:不用任何参数,创建用户,系统会默认执行以下操作:

1)在 /etc/passwd 文件中创建一行关于wyh用户的数据

![image-20220424211217136](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424211217136.png)

 2)在 /etc/shadow 文件中新增了一行关于wyh密码的数据

![image-20220424211405777](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424211405777.png)

 3)在 /etc/group 文件中创建一行与用户名相同的组,例如wyh

![image-20220424211434828](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424211434828.png)

 4)在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息,例如wyh

![image-20220424211502965](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424211502965.png)

 5)自动创建用户的家目录,默认在/home下,与用户名同名

![image-20220424211631490](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424211631490.png)

验证是否成功:

1)使用tail文件查看/etc/passwd文件

2)使用tail文件查看/etc/group文件

3)验证是否存在家目录(在Centos 下创建好用户之后随之产生一个同名家目录)

### ②etc/passwd存储用户信息的文件

使用vim命令打开/etc/passwd文件

```jsx
root : x : 0 : 0 : root : /root : /bin/bash
用户名 : 密码 : 用户ID : 用户组ID : 注释 : 家目录 : 解释器shell
```

**用户名**:登录linux时使用的用户名
 **密码**:此密码位置一般情况都是"x",表示密码的占位,真实密码存储在/etc/shadow
 **用户ID**:用户的识别符,每个用户都有唯一的UID【-u】
 **用户组ID**:该用户所属的主组ID;【-g】

**注释**:解释该用户是做什么用的;【-c】
 **家目录**:用户登录进入系统之后默认的位置;【-d】
 **解释器shell**:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,转换成机器语言,传递给内核处理;如果解释器是==/bin/bash 表示用户可以登录到系统==,==/sbin/nologin表示该用户不能登录到系统==【-s】

下面我们来看一下对于useradd参数的使用

**企业场景1:**

```bash
     公司新员工lisi,属于shujia部门,用户ID1200,不允许登录系统
思路:
    创建用户lisi,默认lisi属于自己同名的主组,让lisi 属于附加组wyhshujia,用户ID 1200,注释为"数加工程师lisi",解释器为/sbin/nologin
```

```powershell
用法二:useradd -G 附加组名 -u 用户ID -s /sbin/nologin -c "shuser lisi" 用户名
示例代码:
[root@master xiaohu]# useradd -G wyhshujia -u 1200 -s /sbin/nologin -c "数加工程师lisi" lisi
useradd:“wyhshujia”组不存在
[root@master xiaohu]# groupadd wyhshujia
[root@master xiaohu]# useradd -G wyhshujia -u 1200 -s /sbin/nologin -c "数加工程师lisi" lisi

含义:创建用户lisi,不带任何选项。
```



```objectivec
wyhshujia行的含义:在wyhshujia的组里(组id 是1002)有一个组内用户lisi(lisi 的附加组就是1002,附加组的名字是wyhshujia)。
如果需要为一个用户指定多个附加组,只需要将多个附加组的id 通过英文逗号“,”分割即可。
例如-G 500,501,502

① 主组只能有1 个(类似于亲生父母只有一对),附加组可以多个,也可以没有附加组(类似于认干爹干妈,可以有也可以没有,也可以有多个)
② 主组必须有
③ 后期将权限管理的时候,关于文档的属组指的是主组(了解)
```

### ③id查看用户信息

命令:id

作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。

语法1:# id  `默认显示当前执行该命令的用户的基本信息`

![image-20220424213014619](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424213014619.png)


 语法2:# id `用户名`, 显示指定用户的基本信息


 如何验证以上信息是否正确?

==答:验证用户信息:通过文件/etc/passwd,验证用户组信息:通过文件/etc/group==

### ④usermod修改用户

命令:usermod(user modify)

语法:# usermod   [选项  选项的值]   …  用户名

作用:修改用户的各种属性

选项:-g:表示指定用户的用户主组,选项的值可以是用户组的ID,也可以是组名

```xml
   -G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也可以是组名

   -u:uid,用户的id(用户的标识符),系统默认会从500 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】

    -L:锁定用户,锁定后用户无法登陆系统lock

        -U:解锁用户unlock

    -c<备注>:修改用户帐号的备注文字

    -d<登入目录>:修改用户登入时的目录

    -s<shell>:修改用户登入后所使用的shell
```

**企业场景2:**

```undefined
    公司员工wangwu,属于bigdata部门,现在要休产假,产假期间,暂时停止她登陆电脑的权限,同时原来属于wyhshujia部门的员工lisi,负责wangwu的工作,所以,需要把lisi加入到bigdata的组,同时,修改lisi的账户注释为“wyhshujia bigdata user”

    对于wangwu用户,我们要执行锁定和解锁操作

    对于lisi用户,我们要将lisi加入到bigdata的附加组,同时修改lisi账户的注释
```

```bash
[root@master xiaohu]# usermod -L wangwu
usermod:用户“wangwu”不存在
[root@master xiaohu]# useradd -G bigdata -u 1300 -c "大数据开发" wangwuuseradd:“bigdata”组不存在
[root@master xiaohu]# groupadd bigdata
[root@master xiaohu]# useradd -G bigdata -u 1300 -c "大数据开发" wangwu
[root@master xiaohu]# usermod -L wangwu

用法一:usermod -L 王五账户名
示例代码:
#usermod -L wangwu
含义:将王五账户暂时锁定

用法二:usermod -U 王五账户名
示例代码:
#usermod -U wangwu
含义:将王五账户解锁
```

```swift
用法三:usermod -G 组名 -c “注释内容” 李四用户账号
示例代码:
#usermod -G bigdata -c "bigdata user" lisi
含义:将李四的账户加入bigdata组,并修改注释内容为shhr user
```

![image-20220424214124391](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424214124391.png)

### ⑤passwd修改用户密码

```undefined
    Linux ==不允许没有密码的用户登录到系统==,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
```

命令:passwd

语法:# passwd  用户名 【如果不指定用户名则修改自己的密码】

作用:修改用户密码
 **企业场景3:**

```undefined
    王五产假休完回到公司上班,需要将王五的账户解锁,在使用usermod -U解锁时,我们看到一个错误信息如下:
```

usermod: unlocking the user's password would result in a passwordless account.

解锁这个账户,将导致一个没有密码的账户,因为之前王五的账户没有密码。这时候,我们就需要使用passwd命令,给王五的账户设置一个密码

```bash
用法一:passwd 账户名
示例代码:
#passwd wangwu
含义:为wangwu账户设置密码
注意:
    当密码过于简单时,系统会提示这是一个不好的密码,因为它太简单了,但是我们仍然可以坚持使用这个密码。
    在我们输入密码时,屏幕不会有任何显示。
    密码需要输入两次,请确保两次输入的密码是一样的。
```

### ⑥认识/etc/shadow文件

```undefined
由于 /etc/passwd文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了shadow文件中。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。  
```

与用户密码相关的文件:/etc/shadow

为用户设置密码之后,会自动在/etc/shadow文件中进行体现,使用vim编辑器打开

第一列为用户名,例如zhangsan

后面是加密后的密码,就是$开头的字符串

如果显示为!!,则表示这个用户==没有==设置密码。

![image-20220424214813245](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424214813245.png)

由以上截图所知,wyh,lisi是没有设置密码的。wangwu我们刚刚设置了密码,所以显示为一个加密的字符创

任务:新建一个账户叫shujiaxiaoli

```undefined
    新建第二个账户叫shujiaxiaoli

    给shujiaxiaoli账户设置一个密码

    进入shadow文件,观察两个账户的区别
```

### ⑦su切换用户

```undefined
    在设置用户密码之后就可以使用此账号进行登录系统了,如果系统处于已登录状态,则可以使用su命令进行切换用户。

    为了系统安全,企业中通常不会允许root用户直接登录计算机,但是工作需要,我们又需要使用root权限,这时候,我们就可以先使用一个普通用户登录计算机,再通过su命令切换到root权限。
```

命令:su

语法:# su  [-]   账号

作用:切换用户

```css
用法一:su 用户名
示例代码:
#su root
含义:切换到root权限

注意:
a. 从root 往普通用户切换不需要密码,但是反之则需要root 密码;
b. 切换用户之后前后的工作路径是不变的,添加了选项[-]会自动切换到用户的家;
c. 普通用户没有办法访问root 用户家目录,但是反之则可以;
```

启用wheel组设置(了解)

步骤1:使用vim编辑器 打开/etc/pam.d/su文件

![image-20220424215209304](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424215209304.png)

步骤2:编辑文件,去掉auth required pam_wheel.so use_uid这一行前面的#,使这一行配置生效

![image-20220424215135010](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424215135010.png)


 步骤3:下面是去掉#后的状态

![image-20220424215154596](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424215154596.png)

步骤4:保存退出 :wq
 这时,只有在wheel组内的用户才可以su到root
 ⑧userdel删除用户
 命令:userdel

语法:# userdel   选项   用户名

作用:删除账户及其对应家目录

选项:-r:表示删除用户的同时,删除其家目录/home下的对应文件夹

![image-20220424215621756](C:\Users\xiaohu\AppData\Roaming\Typora\typora-user-images\image-20220424215621756.png)



权限:
	通过ll查看详细信息时:-rw-r--r--. 1 root root     11 4月  24 21:22 xiao.txt
	-:表示类型
	rw-:当前用户权限
	r--:当前用户组权限
	r--:其他用户权限

	r:读     4
	w:写     2
	x:执行   1
	
	u:当前用户
	g:当前组
	o:其他
	a:所有

权限分配
	chmod:修改权限
		格式1:(使用相加减表达权限)
			chmod [选项] [权限修改] [文件]
		格式2:(使用数字表达权限)
			chmod [选项] [权限修改] [文件]	
			4:读
			2:写
			1:执行
			7:全部
		注意:如果只给一个数字表示修改o,两个表示修改go
		选项:
			-R:迭代修改

	chgrp:修改用户组
		格式:
			chgrp [选项] [组名] [文件或目录]
		选项:
			-R:表达迭代修改
		注意:文件或目录的所有用户或所有组,都是以编号来查询所有用户或所有组
			如果不存在就显示编号,存在显示名称
	
	chown:修改所属用户
		格式:
			chown [选项] [组名] [文件或目录]
		选项:
			-R:表达迭代修改
	
	sudo:越权执行
		格式:
			sudo 命令
		注意:sudo实际上去借root权限执行命令(root对普通用户分配了权限)
	
	sudo -l:查看当前权限
	
	visudo:修改配置文件进行权限分配(文件所在位置/etc/sudoers)
		例如:普通用户拥有root所有权限
			用户名 ALL=(ALL) ALL
			用户名 ALL=(root) ALL
		例如:普通用户只能执行一个命令
			用户名 ALL=(root)/bin/rm
	
	可以同过vim /etc/sudoers修改权限分配

查找
	find
		格式:
			find 开始查找路径 [选项] [条件]
		选项:
			-name
				*表示匹配所有
				?表示匹配一个
				例如:从/开始查找后缀为.txt
					find / -name "*.txt"
			-type	
				d:表示目录
				f:表示文件
				例如:从/开始查找文件
					find / -type f
			-size
				ll --block-size=单位 
					例如:大小以k为单位进行显示
						ll --block-size=k
				注意:条件需要给上单位
					+表示大于
					-表示小于
					不给就是等于
				例如:从/开始查找文件大小大于2k
					find / -size +2k
			-user
			-group
Linux常见符号
	|:管道,把前面一部分的内容交给后面去处理
	例如:
		cat /etc/profile | more

	grep:筛选
		格式:
			grep 筛选条件
	>>:追加,把命令1的结果写入到命令2
		格式:
			命令1 >> 命令2 
		例如:cat profile >> test.txt
	>:覆盖
		格式:
			命令1 > 命令2 
		例如:cat profile > test.txt

  

四、Linux&Shell

1. Linux常⽤⾼级命令

yum  -- 命令行中下载插件

df -h  -- 查看硬盘使用情况

top -- 查看内存使用

netstat -tunlp | grep   -- 查看端⼝号

ps -aux -- 查看进程

iotop -- 查看磁盘IO读写(yum install iotop安装)

iotop -o -- 直接查看⽐较⾼的磁盘读写程序

uptime -- 查看报告系统运⾏时⻓及平均负载

  

 

 

 -- End

centos7安装可能存在的问题

安装的前提:要保证安装的包要是完整的
1、由于之前装过vmware,再次安装的时候,就装不上了
解决办法:网上下载一个ccleaner的软件,清一下注册表,再安装就可以了

2、卸载都是从控制面板卸载

3、安装成功后,不要随意更改内容目录

前提:检查镜像文件是否是完整的
安装虚拟机时需要注意的问题:
1、内存和硬盘空间大小问题
8g勉勉强强是够的,但是最好准备16g内存
硬盘大小,如果不够的就默认20个G

2、网络配置问题
ip地址
子网掩码
网关
DNS
安装后检查网络是否配置成功:ping www.baidu.com

虚拟机安装好后,打不开
1、镜像不完整

2、没有打开虚拟化设置 --- 解决办法,重启电脑,打开BOIS界面,把虚拟化打开

3、在设置中需要关闭一个选项