Linux命令详解(3)

Linux命令详解(3)

在linux命令详解(1)
linux命令详解(2)
基础上添加一些新的指令,后续可以查阅Linux命令详解(4)
备注:快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解,后续的会比前面的更详细以及对之前的内容修改和更新补充[以后续更新的为最新](如有不正确的地方欢迎各位小伙伴在评论区提意见,小编会及时修改)

基本指令操作

# 查看远端Linux的ip地址
	ip a  或者  ip addr
# 清屏
	clear
# 查看当前系统时间
	date
#关机
	poweroff  或者  init 0
#重启
	reboot  或者  init 6
#修改主机名
	hostnamectl set-hostname 新名字
#列出指定文件夹下的内容
	ls
语法:
	ls [参数] 路径
注意:参数可选
参数介绍:
	-a 列出指定路径下的内容,包含隐藏文件
	-l 列出指定路径下内容的详细信息[例如:权限,时间,所属组,所属用户]
	-h 以人类可阅读的方式列出文件夹大小[一般与 -l 参数连用]
	--full-time 以完整的时间格式输出 [不能与其他参数连用]
	-t 根据最后一次修改的时间排序 展示内容[由新到旧]
	-F 在不同的文件结尾 输出不同的特殊符号
		以 / 结尾的就是文件夹
		以 * 结尾的就是可执行文件
		以 @ 结尾的就是软连接(快捷方式)
		普通文件,结尾什么都没有
		以. 开头的是隐藏文件
	-d 显示文件夹本身信息(不输出文件夹内部信息)
	-r 逆转排序
	-S 针对文件大小进行排序 (默认是从大到小)
	-Sr 从小到大排序
	-i 显示出文件的 inode信息[文件的元数据(文件大小,位置,权限,文件的唯一标识)]
常见的用法
	-- 查看指定目录下的信息
		ls -l 路径 或者 ll 路径
	-- 查看指定目录下的所有信息(包含隐藏文件)
		ls -la 路径
	案例1:列出根目录下所有内容的详细信息
		ls -a -l /
		参数可以合并:ls -la /
	案例2:列出 /opt下所有内容的详细信息
		ls -la /opt
-- 查看当前用户
	whoami
-- 查看当前主机名
	hostname
-- 查看当前命令行所在工作目录的绝对路径(print work directory)
	pwd
-- 用户切换
	su - 用户名
-- 创建用户
	sudo useradd -m 用户名  [创建普通用户]
	sudo passwd 用户名  [设置普通用户密码]
注意:
	root账户切换普通用户,直接切换即可
	普通用户切换 root 用户 需要输入密码
-- 退出当前用户 [切换到另外一个用户]
	logout
	或者
	exit

注意:

1.一般情况下,linux的命令参数都是可选的 不同的参数作用不一样

2.linux命令之间,必须有一个或多个空格

路径表述

# windows系统下路径表述
|-C盘
	|- 文件夹
		|-文件夹
			|-文件
			|-a.txt
		|-文件
	|-文件
	|-文件夹
|-D盘
|-F盘
# Linux系统下路径表述
---- 一切皆文件
/ 根目录
/
	|-文件夹
		|-文件夹
			|-文件
		|-文件
	|-文件
	|-文件夹
#linux系统中路径表述
1. 绝对路径(以 / 开头)
	/文件
	/文件夹/文件
2. 相对路径
	./ 		当前目录下
	../ 	上一层目录下
例如:
	/opt/a.txt 绝对路径
	./a.txt 当前目录下的 a.txt文件
	../a.txt 上一层目录下的a.txt文件
说明
	|-/opt/abc/a.txt
	|-/opt/a.txt
此时我们处于abc文件夹下 ../a.txt --------> /opt/a.txt

目录说明

/boot 存放的是内核与启动文件
/dev 存放的硬件(设备)相关信息的文件
/etc 存放系统的配置文件
	/etc/sysconfig/network-scripts/ifcfg-ens33:设置网络环境,例如动态、静态ip 设置是否支持远程连接......
	/etc/resolv.conf:设置DNS域名解析
	例如: 张三---手机号
			www.baidu.com-----275.168.220.8
			/etc/hostname : 设置主机名
			/etc/motd : 设置开机显示
				案例:
					vim /etc/motd
			/etc/os-release:查看发行版 版本号
/home 普通用户的主目录
/media 可卸载存储介质挂载点
/mnt mount文件系统临时挂载点
/opt 应用程序包
/proc: 系统内存的映射目录,提供内核与进程信息
	/proc/meminfo:系统内存信息
	/proc/cpuinfo:关于处理器的信息 例如 类型,厂家,型号,性能等
	/proc/loadavg:系统负载信息 uptime结果
	/proc/mounts:已加载的文件系统列表
/root 特权用户(管理员)目录
/run 存放的是组件运行时所需要的文件[文件夹]
/srv 存放服务相关的数据
/sys 虚拟文件系统,记录核心系统的硬件信息
/tmp 存放临时文件
/usr 存放用户应用程序
/var 存放运行时内容会发生变化的文件 例如 日志
	/var/log:记录系统及软件运行信息
	/var/log/messages:系统级别日志文件
	/var/log/secure:用户登录信息的日志文件
	/var/log/dmesg:记录硬件信息加载情况(日志文件)

date指令简介

# 查看日期 date '+参数'
# 查看服务器的时间
案例:
[root@bai /]# date
2023年 10月 23日 星期一 11:38:48 CST
# 日期说明
	一个日期包含: 年 月 日 星期 小时 分钟 秒 毫秒 纳秒 时区
# 日期查看参数说明
	%F 只显示当前年月日(2023-10-23)
	%X 只显示当前时间的时分秒(17时50分20秒)
	%c 直接显示日期与时间(年月日 星期 时分秒)
	%x 直接显示日期(年月日)
	%T 显示时分秒 HH:MM:SS [24小时进制]
	%r 显示时分秒 [12小时进制]
# 提取日期属性
	%Y 完整的年份(四位的年份)(2023 2020)
	%y 年份的末两位(2023--->23 2020 ---> 20)
	%m 月份
	%d 日(月份中的日)
	%H 小时(24进制的小时)
	%M 分钟(00 ~ 59)
	%S: 秒
	%p: 显示本地 AM PM
# 其他日期属性
	%Z 显示时区
	%w 一周中的第几天(0 ~ 6) 注意 星期日 0
	%a 星期几(简写,比如 星期一显示一)
	%A 星期几(全称)
	%b 月份(简写)
	%B 月份(全称)
	%s 从1970年1月1日0时0分0秒 到现在 过了多少秒
案例:
# 展示当前系统时间 格式 YYYY-mm-dd HH:MM:SS
[root@bai /]# date '+%Y-%m-%d %H:%M:%S'
2023-10-23 11:54:53

文件管理

文件类型(了解)
# 查看指定路径下(目录)文件类型
	ls -l -d 目录
	或者
	ll -d 目录
# 文件类型
	- 普通文件(文本文件,二进制文件,压缩文件,音频,视频.....)
	l 即符号链接文件 又称为软连接(快捷方式)[浅蓝色]
	d 目录文件[浅蓝色]
	b 设备文件【类似于硬盘 U盘】
	c 设备文件[字符设备文件 比如我们的 打印机]
	s 即套字文件 用于实现两个进程之间进行通信
	p 管道文件
	. 隐藏文件
案例1:
-- 查看下列文件类型,能找出几种?
	[root@bai /]# ll -d /etc/hosts
	-rw-r--r--. 1 root root 158 6月 7 2013 /etc/hosts # - 开头 属于普通文件
	[root@bai /]# ll -d /bin/ls
	-rwxr-xr-x. 1 root root 117672 4月 11 2018 /bin/ls # -开头 属于普通文件
补充:
一次性查看好多文件(文件夹)
	ls -l -d 目录1 目录2 ....

目录切换

cd 指令 ------ 目录切换
	例如 cd / 切换到根目录下
		cd /etc 切换到etc目录下
# 切换到当前目录(原地踏步)
	cd .
# 切换到当前目录的上一层目录
	cd ..
# 直接回到家目录
	cd 或者 cd ~
# 回到上一次的目录
	cd -
例如:
	cd / # 回到根目录下
	cd /etc # 切换到 /etc 目录下
	cd - # 回到根目录[回到上一次的目录]
# 去到指定目录
	cd 目录 #目录可以是相对路径 也可以是绝对路径
		[root@bai /]# cd / # 切换到根目录
		[root@bai /]# cd /etc # 切换到 etc 目录下
		[root@bai etc]# pwd # 查看当前目录
		/etc
		[root@bai etc]# cd dhcp # 切换到当前目录下的 dhcp文件夹
		[root@bai dhcp]# cd .. # 回到上一层目录
		[root@bai etc]# cd ./dhcp # 切换到当前目录下的 dhcp文件夹
		[root@bai dhcp]# cd # 直接切换到当前用户的家目录
		[root@bai ~]# cd / # 切换回根目录 ~ 也是 家目录的标识
		[root@bai /]# cd ~ # 直接切换到当前用户的家目录[root账户在 /root 目录下,其他用户在 /home目录下]
		[root@bai ~]# cd - # 切换到上一次的工作目录

文件夹/文件的创建

文件夹的创建
# 创建一个文件夹
mkdir 可选参数 文件夹名字[包含路径]
例如:
[root@bai /]# mkdir /abc
等价于
[root@bai /]# mkdir abc
注意:
1.若未添加路径描述,默认在当前目录下
2. mkdir 文件夹 语法特点是:只能在已经存在的目录下创建文件夹,并且只能创建一层文件夹

mkdir -p 文件夹1/文件夹2 # 可以创建多级文件夹 
参数:
-p 递归创建多级文件夹
# 案例
[root@bai /]# mkdir -p /peiqi/xiaopeiqi1
mkdir -v 文件夹 # 显示创建时的详细信息
批量创建文件夹
# 批量创建文件夹
mkdir {文件夹1,文件夹2,文件夹3}
# 案例1 在 根目录下创建 test1 test2 test3 三个文件夹
	[root@bai /]# mkdir {test1,test2,test3}
# 案例2 在 /peiqi 下 创建 xiaopeiqi2 xiaopeiqi3 xiaopeiqi4
	[root@bai /]# mkdir /peiqi/{xiaopeiqi2,xiaopeiqi3,xiaopeiqi4}
# 案例3 在 /abc 文件夹下创建 100个文件夹 file1 file2 file3 ...... file100
	[root@bai /]# mkdir /abc/file{1..100}

		[root@bai /]# mkdir -v /def/peiqi #-v 会显示文件夹的创建过程
		mkdir: 已创建目录 "/def/peiqi"
		[root@bai /]# mkdir -p -v /a/b # 递归创建文件夹并显示具体过程
		mkdir: 已创建目录 "/a"
		mkdir: 已创建目录 "/a/b"
文件的创建
用法: touch [可选参数] 文件
作用:
1. 创建普通文件
	在linux系统中,文件的后缀格式仅仅只是一个名字而已,通过 touch命令创建的都是普通文件
2. 修改文件的时间
# 创建一个文件
# 在 /a/b文件夹下创建 xiaopeiqi1.txt 文件
[root@bai /]# touch /a/b/xiaopeiqi.txt
[root@bai /]# ll /a/b
总用量 0
-rw-r--r--. 1 root root 0 10月 23 15:41 xiaopeiqi.txt
# 创建多个文件·
touch 文件1 文件2 文件3;
# 案例
1. 在当前目录下创建三个文件 a.txt b.txt c.txt
	[root@bai d]# touch a.txt b.txt c.txt
2./c 目录下创建三个文件 a.txt b.txt c.txt
	[root@bai d]# touch /c/a.txt /c/b.txt /c/c.txt
3. 批量创建多个文件
--/abc 文件夹下创建 baizhi1.txt baizhi2.txt baizhi3.txt ..... baizhi100.txt
	[root@bai /]# touch /abc/baizhi{1..100}.txt
	[root@bai /]# ls -la /ab
注意: {1..100} {a..z} 前提是可排序(可比较大小)
4. 创建隐藏文件
	touch /目录/.demo.txt
# 修改文件的创建时间
touch -t # 修改文件的创建时间
案例1:
-- 将 xiaopeiqi.txt 文件创建时间修改为 10月24号9点30分 [默认是系统年份]
[root@bai b]# touch -t 10240930 xiaopeiqi.txt
-- 将 xiaopeiqi.txt 文件创建时间修改为 2030-10-23 09:30
	[root@bai b]# touch -t 203010230930 xiaopeiqi.txt
注意: 日期修改范围 年月日时分
# 将a.txt文件的创建时间 充当 文件b 的创建时间
touch -r 文件a 文件b
或者
touch --reference=文件a 文件b
案例2:
-- 创建 yangdd.txt 文件 且创建时间和 xiaopeiqi.txt 的时间一致
	[root@bai b]# touch -r xiaopeiqi.txt yangdd.txt
	[root@bai b]# ll --full-time ./
	总用量 0
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 xiaopeiqi.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 yangdd.txt
	[root@bai b]# touch --reference=xiaopeiqi.txt cpx.txt
	[root@bai b]# ll --full-time ./
	总用量 0
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 cpx.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 xiaopeiqi.txt
	-rw-r--r--. 1 root root 0 2030-10-23 09:30:00.000000000 +0800 yangdd.txt
文件创建(2)
# 输出语句 ----> 指令运行以后,在操作界面打印内容
	echo 内容 # 将内容在界面中打印展示
[root@bai ~]# echo HelloWorld
HelloWorld
# 借助 echo 完成文件创建,并传输文件内容
语法:
	echo 内容 > 文件
注意:
	1. 若文件不存在,则新建并传输内容
	2. 若文件存在,则新内容覆盖原始文件内容
语法:
	echo 内容 >> 文件
注意:
	1. 若文件不存在,则新建并传输内容
	2. 若文件存在,则新内容追加在原始内容之后
文件拷贝(复制)
用法: cp [可选参数] 源文件 目标文件
参数
	-r 递归式复制目录 即复制目录下所有的子目录和文件
	-d 复制的时候保持软链接(快捷方式)
	-p 等价于 --preserve=模式,所有权,时间戳,复制文件时保持源文件的权限,时间属性[完美复刻]
	-a 等价于 -pdr
	-i --interactive 覆盖前询问提示(生成的文件和当前目录下已经存在的文件冲突)
# 1. 复制普通文件
	cp 文件1 文件2 # 复制一份文件1,生成文件2
# 2. 复制整个文件夹
	cp -r 文件夹1 文件夹2 #将文件夹1所有内容复制 生成 文件夹2
# 3. 复制文件并修改生成文件的路径
	cp 目录1/文件1 目录2/文件2 # 将文件1复制到目录2下 若文件2名字缺失 新文件名字与文件1 保持一致
# 4. 覆盖前提示
	cp 文件1 文件2 # 当前目录下已经存在文件2 询问是否覆盖
	等价于
	cp -i 文件1 文件2
# 5. 批量复制多个文件
	cp 文件1 文件2 文件3 文件夹 # 将文件1 文件2 文件3 拷贝到 指定文件夹下

系统指令别名
alias
	系统指令别名
		cp ----- 简写(别名)
		等价
		cp -i ---- 指令完整写法
# 查看指定别名对应的指令
	type -a 别名
		[root@bai b]# type -a ll
		ll 是 `ls -l --color=auto' 的别名
# 设置别名
1. 查看 指定文件夹的 详细信息,隐藏文件,时间戳
	ls -la --full-time 目录
设置别名
	alias 别名='命令'
例如: alias nb='ls -la --full-time'
			[root@bai b]# alias nb='ls -la --full-time'
			[root@bai b]# alias
			alias cp='cp -i'
			alias egrep='egrep --color=auto'
			alias fgrep='fgrep --color=auto'
			alias grep='grep --color=auto'
			alias l.='ls -d .* --color=auto'
			alias ll='ls -l --color=auto'
			alias ls='ls --color=auto'
			alias mv='mv -i'
			alias nb='ls -la --full-time'
			alias rm='rm -i'
			alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
			[root@bai b]# type -a nb
			nb 是 `ls -la --full-time' 的别名
	[root@bai b]# nb /a
	总用量 4
	drwxr-xr-x. 4 root root 61 2023-10-23 16:40:49.133677006 +0800 .
	dr-xr-xr-x. 25 root root 4096 2023-10-23 15:33:58.688504641 +0800 ..
	drwxr-xr-x. 2 root root 148 2023-10-23 16:50:38.988993905 +0800 b
	-rw-r--r--. 1 root root 0 2023-10-23 16:40:09.485522155 +0800 chenpx.txt
	-rw-r--r--. 1 root root 0 2023-10-23 16:40:49.133677006 +0800 cpx.txt
	drwxr-xr-x. 2 root root 130 2023-10-23 17:04:36.027418341 +0800 peiqi
# 取消别名
unalias 别名;
mv指令
mv 命令 就是 move的缩写,作用用于移动文件 或者 重命名文件。
语法
	mv [可选参数] 源文件 目标文件。
参数:
	-i 覆盖前询问[目标目录下已经存在指定文件]
	-f 覆盖前不询问
# 将 /a/cpx.txt 移动到 /def/peiqi 文件夹下 ------> 文件移动
	[root@bai b]# mv /a/cpx.txt /def/peiqi/
# 将 /a/chenpx.txt 移动到 /def/peiqi 文件夹下 并重命名为 demo.txt
	[root@bai peiqi]# mv /a/chenpx.txt /def/peiqi/demo.txt
# 批量移动文件[移动的文件,名字有规律]
	mv /a/b/cpx* /def/peiqi/
# 将 /a/peiqi/ 下的 所有 cpx开头的文件 移动到 /def/peiqi 下 直接覆盖不再询问
	[root@bai peiqi]# mv -f /a/peiqi/cpx* /def/peiqi/
# 将 /a/cpx5.txt到cpx10.txt移动到/a/a1 下
	[root@centos-128 test]# mv -f /a/cpx{5..10}.txt /a/a1
# 移动文件夹
	mv 源文件夹 目标目录
# 将/a 文件夹 移动到 /c文件夹中
	[root@bai peiqi]# mv /a /c/
文件/文件夹删除
rm 命令 就是 remove的含义 删除一个或者多个文件[删除文件夹]
rm [可选参数] 目标文件[]
参数:
	-f 强制删除,不提示确认
	-i 在删除前进行提示确认
	-r 在删除文件夹时使用
	-d 删除空目录
	-I 在删除超过三个文件或者递归删除前要求确认
	-v 详细显示进行的步骤
案例:
[root@bai /]# rm /c/a.txt
rm:是否删除普通空文件 "/c/a.txt"?y
[root@bai /]# rm -f /c/b.txt
[root@bai /]#
[root@bai /]# rm /abc/file100
rm: 无法删除"/abc/file100": 是一个目录
[root@bai /]# rm -r /abc/file100
rm:是否删除目录 "/abc/file100"?y
[root@bai /]# rm -rf /c/a
[root@bai /]#
[root@bai /]# rm -rf /c/d/* ---> 删除d目录下所有内容,但是保留 d文件夹
[root@bai /]# rm -rf /c/d ----> 连同d目录一并删除
[root@bai /]# rm -d /abc/file11 ----> file11 file12 必须是空目录
rm:是否删除目录 "/abc/file11"?y
[root@bai /]# rm -df /abc/file12
[root@bai /]# rm -r -v -f /c
已删除"/c/.你看不见我.txt"
已删除目录:"/c/d"
已删除目录:"/c"
注意:
	rm -rf /* -- 删库跑路 禁用
帮助指令
# man帮助指令
语法: man 指令
	进入man指令以后 按下
	q ---- 退出
	空格(上下方向键) ---- 上下移动

​​

语法: 指令 --help
语法: help 指令 ------> 只能展示内置的指令 指令位于 bin目录 sbin目录
语法: info 指令
从互联网上获取Linux中文文档网站
Linux开关机指令
# 重启
语法: shutdown -r 参数
举例:
	shutdown -r 10 # 10分钟后重启
	shutdown -r 0 # 立刻重启
	shutdown -r now # 立刻重启 ------ 企业级用法
# 关机
语法: shutdown -h 参数
举例:
	shutdown -h 10 #10分钟后关机
	shutdown -h 0 # 立刻关机
	shutdown -h now # 立刻关机 ---- 企业级用法
# 其他指令
	reboot 重启
	poweroff 关机 立刻关闭系统,同时切断电源
	halt 关机 立刻关闭系统,需要手动切断电源
	init 6 切换运行级别为6 此级别代表重启
	init 0 切换运行级别为0 此级别代表关机
	logout 注销退出当前用户
	exit 注销退出当前用户
	ctrl+d 注销退出当前用户

文件查看

cat指令
查看普通文件内容,查看一个文件的全部内容 # 注意文件内容大小
语法:
	cat [参数] 文件
参数:
	-n 显示行号
	-A 包括控制字符(换行符/制表符)   $ ---->换行符
head指令
查看文件内容的前几行 ----> 可以查看大体量文件
语法:
	head 文件 # 默认查看前10行
	head -数字 文件 # 指定查看文件前几行
	或者
	head -n 数字 文件 
tail指令
tail 查看文件内容的尾部
语法:
	tail [可选参数] 文件
	tail -n 文件 # 查看文件后n行信息
参数:
	-f # 一般用于查看动态变化的文件 例如: 日志
	动态查看文件的尾部
	tail -f 文件 # 实时查看文件的后10行信息
	tail -f -n 5 文件 # 实时查看文件的后5行信息
	或者
	tail -5f 文件 
grep指令
grep过滤关键字 ---- 针对文件内容进行过滤(筛选)
[root@bai /]# grep 'root' /etc/passwd # 过滤文件中带有root的行 [精确查找]
注意: 
	'' 可以省略 一般用于区分指令关键字
# 筛选所有以root开头的 行 ^---->以....开头
	[root@bai /]# grep '^root' /etc/passwd
# 筛选所有以 nologin 结尾的行 $ -----> 以......结尾
	[root@bai /]# grep 'nologin$' /etc/passwd
less指令
分页展示
语法:
	less 文件
分页展示以后,指令:
	空格 ----> 翻页
	回车键 ----> 下一行
	方向键 ↑ 方向键 ↓ ------> 上下滚动
	/关键字 ------> 在文件中查找指定的关键字,并高亮展示
	n -----> 搜索时,往下翻
	N -----> 搜索时,往上翻
more指令
分页显示文件内容 ---- 底部会展示文件内容查看进度百分比 看完直接退出
语法:
	more 文件名
分页展示以后,指令:
	空格 -----> 翻页
	回车 -----> 下一行
cut指令
cut --- 在文件中每一行 提取 片段
语法:
	cut [可选参数] [片段区间] 文件
参数
	-c 以字符为单位进行提取
	-d 自定义分隔符 默认以tab为分隔符
	-f 与-d 连用 指定显示的区域
案例:
# 1.提取文件中每一行的第 4 个字符
	[root@bai /]# cut -c 4 /etc/passwd
# 2.提取文件中每一行的 第 4 ~ 7 个字符
	[root@bai /]# cut -c 4-7 /etc/passwd
# 3.提取文件中每一行的前7个字符
	[root@bai /]# cut -c 1-7 /etc/passwd
	或者
	[root@bai /]# cut -c -7 /etc/passwd
# 4.从第10个字符开始,一直到最后 截取文件内容中的每一行
	[root@bai /]# cut -c 10- /etc/passwd
# 5.获取每一行的 第4个字符 第6个字符
	[root@bai /]# cut -c 4,6 /etc/passwd
# 6.以 : 为分隔符切割每行内容 并获取 第一个片段
	[root@bai /]# cut -d : -f 1 /etc/passwd
# 7.以 : 为分隔符切割每行内容 并获取 第 1 ~ 3个片段
	[root@bai /]# cut -d : -f 1-3 /etc/passwd
# 8.以 : 为分隔符切割每行内容 并获取 第5个及以后所有的片段
	[root@bai /]# cut -d : -f 5- /etc/passwd
# 9.以 : 为分隔符切割每行内容 并获取 前5个片段
	[root@bai /]# cut -d : -f -5 /etc/passwd
文件编辑
指令:
	vi / vim
语法:
	vim 文件 / vi 文件 # 打开文件
注意:
	vim 默认机器是不安装的,需要手动安装这个工具命令
# 安装指令
	yum install vim -y
说明:
	1.通过 yum 软件管理工具 安装命令 vim 且默认是 yes 这个命令要保证机器可以上网
	2.当 vim/vi 打开不存在的文件时 默认会新建文件
文件模式:
1. 工作模式
2. 命令模式
3. 编辑模式
4. 尾行模式
5. 可视模式
1. vim 文件 # 进入命令模式 只能查看无法修改文件内容
2. 进入编辑模式
	i #在光标处进入编辑模式
	a #在当前光标后面进入编辑模式
	A #在行尾进入编辑模式
	o(小写字母) #在光标的下一行进入编辑模式
	O(大写字母) #在光标的上一行进入编辑模式
命令模式
光标定位键盘:
	hjkl # h[左] j[下] k[上] l[右]
	0 $ # 0[光标所在行 行首] $[光标所在行 行尾]
	gg # 页首 --- 文本顶端
	G 或者 shift+g # 页尾 ---- 文本底部
	3G # 进入第3行 4G[进入第4行]
	/关键词 #查找字符 n[下一个] N[上一个]
命令模式下的文本编辑
	yy #复制当前行
	p #粘贴 ----- 粘贴到本行的下一行
	3yy 5yy #从光标处开始复制3行 或者 复制 5行
	ygg # 从当前光标复制到页首
	yG # 从当前光标复制到页尾
	dd # 删除一行[删除光标所在行]
	3dd #从光标开始删除3行
	dgg #从光标处删除到页首
	dG #从光标处删除到页尾
	d^ #删除当前光标所在行之前的内容
	P[大写字母] # 粘贴到本行的上一行
	x #删除光标所在处的字符
	D #从光标处删除到行尾
	u #撤销
	r #可以用于修改光标处的字符
尾行模式(底线模式)
	shift+: 或者 : # 由命令模式进入尾行模式
	:3 # 进入第3行
	:w # 保存
	:q # 退出
	:wq #保存并退出
	:q! #强制退出不保存
	:wq! #强制保存并退出
	:set nu # 设置行号
	:set nonu # 取消行号
	:set list #显示控制字符[可以筛选行内容末尾有空格的 行数据]
进入其他模式
#批量操作文件内容时
	ctrl+v #进入可视块模式
	shift+v #进入可视行模式
查找替换
语法:
	:s /原内容/新内容/ # 将光标处 的原内容替换为新内容
	:3 s/原内容/新内容/ # 替换指定行[替换第3行的内容]
	:1,3 s/原内容/新内容/ # 替换第 1 ~ 3行的内容
	:% s/原内容/新内容/ # 替换所有行[只会替换每一行中第一个原内容]
	:% s/原内容/新内容/g # 替换行内所有的关键字
文件基本信息
语法: 
	stat 文件
详细的展示文件时间:
	访问时间
	修改时间 ----- 修改内容
	改变时间 ----- 修改文件属性,例如 权限 名字

Linux用户管理

root的权限:
	安装Centos时,需要设置root账户的管理员密码, root就相当于是超级用户,拥有最高的系统所有权,能够管理系统的各项功能 
	比如:
	添加普通用户/删除普通用户 启动/关闭进程 开启/禁用硬件设备....
	root权限必须很好的去把握 否则一个错误的指令可能会摧毁系统
root
	UID 好比身份证号 root用户的UID是 0
	GID 好比家庭编号(户口本编号) root 用户的GID 是 0
普通用户
	UID 从 1000 开始 由 超级管理员创建 -----> 任何一个用户在创建时,都会在系统中创建一个同名的组[主属组]
	GID
虚拟用户(系统用户)
	UID 1 ~ 999
/etc/passwd
用户组group
为了方便管理同一组的用户。 ---- GID 是组与组之间的区别
	|-假设一个公司有多个部门,每个部门有很多员工。
	|- 可以对技术部门设置部门内的权限---- 可以访问公司的数据库
	|- 员工可以独立赋予权限
用户和组的关系
	1. 一对一 一个用户可以存在一个组里,组里就一个成员
	2. 一对多 一个用户可以加入多个组
	3. 多对一 多个用户可以在一个组中,这些用户和组有相同的权限
	4. 多对多 多个用户存在多个组中

Linux的一大特性

多用户,多任务
所谓多用户多任务是指同一时间,有多个用户登录同一个系统执行不同的任务 ---- 互不影响
为了保证多用户,多任务正常执行,不出问题 ----- 设置不同的权限 Linux就是通过权限划分来管理实现多用户 多任务。

用户管理

用户相关的信息 ------ /etc/passwd
组相关的信息 ------ /etc/group
用户组
# 创建组
	groupadd [可选参数] 组名 # 未指定gid时 默认从1000开始 依次递增 [从当前最大值开始进行递增]
# 创建组并制定gid
	groupadd 组名 -g 组id
# 修改组
	groupmod [参数] 组名
参数:
	-g : 修改组id ---------> id值从 1000 开始
	-n : 修改组名
# 删除组
	groupdel 组名

案例:
# 创建 test 组
	[root@bai abc]# groupadd test
# 创建 demo组 并设定 gid
	[root@bai abc]# groupadd demo -g 1005
# 将 test 的gid 修改为 1003
	[root@bai abc]# groupmod -g 1003 test
语法:
	groupmod -g 新的gid 组名
# 将test的名字修改为 demo
	[root@bai abc]# groupmod -n demo test
语法:
	groupmod -n 新组名 原组名
# 删除 hr 组
	[root@bai abc]# groupdel hr
语法:
	groupdel 组名

删除组的注意事项:
	1.用户的主属组不能删除 ------ 创建用户时,会自动分配主属组[且主属组与用户同名]
	2.若组内存在用户,该组不可删除
/etc/group
# 展示系统中所有组名
	cut -d ":" -f 1 /etc/group
# 展示系统中所有组名 + gid
	cut -d ":" -f 1,3 /etc/group
用户管理
	/etc/passwd
		shell的解释器版本
		/bin/sh -- 默认
		/bin/bash --- 默认
		/sbin/nologin -- 虚拟用户[系统用户]
		/dash 	ubuntu
		/csh 	unix
		/tsh 	unix
1. 系统上的每个进程(每个运行的程序) 都是作为 系统用户 运行的
2. 每个文件是由一个特定用户拥有
3. 访问文件和文件夹 受到用户限制

用户创建

语法:
	useradd 用户名; # 创建用户
特点:
	1.新建用户的同时,会自动构建一个所属组 --- 组名和用户名一致 gid 自动增长
	2. /home 目录下 ----> 用户的家目录 每创建一个用户 都会在 /home下创建对应的家目录
查看用户密码
	/etc/shadow
# 创建用户 带参数
# 创建用户 user03 并制定id 为 1010
语法:
	useradd user03 -u 1010
语法:
# 创建用户并指定shell
语法:
	useradd 用户名 -s /sbin/nologin
# 创建用户并指定 附属组
语法:
	useradd 用户名 -G 组名 # 附属组必须事先存在
案例:
	[root@bai /]# useradd user06 -G user05
	[root@bai /]# id user06
	uid=1013(user06) gid=1013(user06) 组=1013(user06),1012(user05)
# 创建用户 并指定 主属组
语法:
	useradd 用户名 -g 主属组的id
#1. 判断用户是否已存在
语法:
	id 用户名
举例:
	[root@bai abc]# id user01
	uid=1001(user01) gid=1005(user01) 组=1005(user01)
		用户标识 		所属组标识 		所属组
	[root@bai abc]# id user02
	id: user02: no such user
#2. 查看当前正在使用的用户
语法:
	whoami
#3.删除用户
语法:
	userdel -r 用户名 # 删除用户的同时,删除对应的家目录
用户密码
# root账户可以给其他用户设置密码 普通用户设置密码以后才可以进行登录
语法:
	passwd 用户名
案例:
	[root@bai abc]# passwd user02
	更改用户 user02 的密码 。
	新的 密码:
	无效的密码: 密码少于 8 个字符
	重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# root账户重置自己的密码
语法:
	passwd
案例:
	[root@bai abc]# passwd
	更改用户 root 的密码 。
	新的 密码:
	无效的密码: 密码少于 8 个字符
	重新输入新的 密码:
	passwd:所有的身份验证令牌已经成功更新。
注意:
#普通用户修改自己的密码
	1. 需要提供原密码
	2. 新密码必须遵守规范(包含大小写字母 不能出现单词 必须包含特殊符号 @ # $ % 数字 长度不低于8)
	3. 限定修改次数
# 切换用户
	su - 用户名
注意:
	root 切换其他普通用户 直接切换
	普通用户 切换回 root 需要管理员密码
用户操作
# 修改用户名 -----> 只修改用户名,其他(uid gid 所属组)不变
语法:
	usermod -l 新名字 原名
案例:
	[root@bai ~]# usermod -l user666 user02
	[root@bai ~]# id user02
	id: user02: no such user
	[root@bai ~]# id user666
	uid=1002(user666) gid=1006(user02) 组=1006(user02)
# 修改 gid
语法:
	usermod 用户名 -g 新的gid # 新的gid必须事先存在 更换主属组
# 修改uid
语法:
	usermod -u 新的uid 用户
案例:
	[root@bai ~]# usermod -u 1003 user03
# 修改用户登录的shell
语法:
	usermod -s 登录方式 用户名
案例:
	[root@bai ~]# usermod -s /sbin/nologin user03

组成员管理

注意:
	只针对已存在的用户

# 给组添加账户
语法:
	gpasswd -a 用户 组名
案例:
	[root@bai ~]# gpasswd -a user04 yangdd
	正在将用户“user04”加入到“yangdd”组中
用户 有 自己的 所属组 ----> 主组 gid
用户 后续可以加入其他组 ----> 附属组
# 给组添加多个用户
	gpasswd -M 用户1,用户2,用户3 组名;
案例:
	[root@bai ~]# gpasswd -M gaosc,user03,user666 yangdd
	[root@bai ~]# id gaosc
	uid=1000(gaosc) gid=1000(gaosc) 组=1000(gaosc),1003(yangdd)
	[root@bai ~]# id user03
	uid=1003(user03) gid=1010(user03) 组=1010(user03),1003(yangdd)
							主属组id       主属组 		附属组
# 从组中删除用户
	gpasswd -d 用户名 组名
案例:
	[root@bai ~]# gpasswd -d gaosc yangdd # 无法从主属组 中移除 当前用户
	正在将用户“gaosc”从“yangdd”组中删除
	[root@bai ~]# id gaosc
	uid=1000(gaosc) gid=1000(gaosc) 组=1000(gaosc)

##文件内容来自授课老师百知昌哥(笔记需要pdf版本的可以私聊小编)

你可能感兴趣的:(Linux,linux)