Linux实操
vi/vim操作
来个操作吓吓你
提问:这是个啥,这个键盘是干啥的
是vi/vim的快捷键
vi是用来操作和编辑文件的,又因为linux是万事万物皆文件,所以可见这个操作重要性
vim是vi的加强版,也同样重要
想要操作一个文件首先要打开它,在linux系统中打开终端,输入如下代码
vim 文件名.扩展名
这句话的意思就是如果没有这个文件就先创建再打开,如果有直接打开
-
vim 打开文件后有三种模式
-
普通(正常)模式
- 用vim打开后的默认模式
- 在这个模式我们可以使用快捷键进行[粘贴/复制],[删除整行/删除字符]来处理文档内容
-
编辑模式
- 按下i,I,o,O,a,A,r,R等任何一个字母就会进入编辑模式,一般我们使用到的都是i
-
命令行模式
- 在这个模式中,可以提供你相关指令,完成读取,存盘,替换,离开,vim,显示行号等都是在这个模式中完成的
-
三种模式的切换方法
- vi/vim常用快捷键(未作标注的都是在普通模式下的按键)
- 1)拷贝当前行yy, 拷贝当前行向下的5行5yy, 并粘贴。
- 2)删除当前行dd,删除当前行向下的5行5dd
- 3)在文件中查找某个单词[命令行下/关键字,回车查找,输入n就是查找下一个]
- 4)设置文件的行号,取消文件的行号.[命令行下:set nu和:set nonu]
- 5)编辑/etc/profile文件,使用快捷键到底文档的最末行[G]和最首行[gg]
- 6)在一个文件中输入"hello" ,然后又撤销这个动作u
- 7)编辑/etc/profile 文件,并将光标移动到20行shift+g
关机注销和重启
- shutdown
- shutdown -h now :表示立刻关机
- shutdown -h 1:表示1分钟后关机
- shutdown -r now: 表示立即重启
- halt
- 作用同上
- reboot
- 现在重启计算机
- 在root用户下重启一般要写成sudo reboot
- sync
- 把内存的数据同步到磁盘上面
- 细节注意
- 不管是重启系统还是关闭系统,首先要运行sync命令,把未保存的内容保存到磁盘
用户注销和注销
- 使用细节:
- 一般不使用root用户来操作系统,如果要使用权限使用 su -用户名来切换成管理员运行
- 在终端输入logout即可注销用户
- 注意
- logout在图形化界面无效,在运行级别3下有效
- 运行级别后续会讲
用户管理
-
创建用户
-
useradd 用户名
-
useradd -d 指定路径 用户名
-
第一种方式创建就是在home路径下创建一个用户名同名的文件夹就代表这个用户
-
第二种方式创建就是在指定路径下创建一个用户名同名文件夹代表这个用户
-
扩展
useradd -g 组名 用户名
-
创建用户并把它放在指定的组下
-
useradd -u 用户ID 用户名
-
指定用户的id号
-
-
设置密码
-
passwd 用户名
-
-
删除用户
-
userdel 用户名 ##删除指定用户保留用户目录
-
userdel -r 用户名 ##删除指定用户不保留用户名
-
userdel -f 用户名 ##强制删除用户,即使当该用户已经登录
-
在公司中一般保留用户目录,万一里面有公司业务
-
-
查询用户
-
id 用户名 #当用户不存在时就会返回信息用户不存在
-
-
切换用户
- su 切换的用户名
- 权限高的用户切换到权限低的用户不需要输入密码,反之需要
- 如果需要返回原来的用户直接输入exit
- 注意
- su - 用户名切换用户并且会携带目标用户的环境变量,但是su就不会
-
修改用户
-
usermod用于修改用户的基本信息
-
语法:
- usermod [选项] 用户名
-
选项
-
-g 修改用初识登陆组,并且这个组必须存在
-
usermod -g 组名 用户名
-
-
-c 修改用户的注释信息
-
usermod -c "注释新消息" 用户名
-
-
-d 修改用户的宿主目录
-
usermod -d 用户寄宿新目录 用户名
-
-
-
-
sudo
-
功能介绍:sudo设置普通用户具有root权限
-
语法: sudo [指令]
-
注意需要修改配置文件
-
[root@hadoop101 ~]#vi /etc/sudoers 修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示: ## Allow root to run any commands anywhere root ALL=(ALL) ALL jinghang ALL=(ALL) ALL 或者配置成采用sudo命令时,不需要输入密码 ## Allow root to run any commands anywhere root ALL=(ALL) ALL jinghang ALL=(ALL) NOPASSWD:ALL 修改完毕,现在可以用jinghang帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
-
-
-
查看当前用户
- whoami/who am I
- whoami只输出用户名
- who am i 会显示登陆时间等一系列信息
-
用户组管理
- 添加用户组
- groupadd 组名
- groupadd -g [组id] [组名]
- 修改用户的组
- usermod -g 用户组 用户名
- 添加用户组
-
用户组删除
- groupdel [组名]
- 经验技巧: groupdel 指令无法删除用户的主要组(Primary Group), 即无法删除创建用户时自动为用户所创建的组(如果此用户还存在)。
-
更改用户组
- 语法:groupmod [选项] [组名]
- 选项:
- -n<新组名>
- -g<新租ID>
- 注意:组名和id名必须得是唯一的
-
用户和组的配置文件
- /etc/passwd
- 用户(user) 的配置文件,记录用户的各种信息
- 每行的含义,用户名:口令(加密密码):用户标识号:组标识号:注释性描述:主目录:登录Shell
- /etc/shadow
- 存放用户口令(加密密码)
- /etc/group
- 包含用户组信息
- 每行含义:组名:口令:组标识号:组内用户列表
- /etc/passwd
使用指令
-
运行级别
-
常用的运行级别就是3/5
-
运行级别系统配置文件在 /etc/inittab,可以通过修改运行级别来切换级别状态
-
在配置文件中的为 id:5:initdefault
-
切换运行级别还可以直接 init 运行级别
帮助指令
-
man 获取帮助信息
-
语法
-
man [命令或者配置文件]
-
-
help
-
语法
-
help 命令 (功能描述: 获取shell内置命令的帮助信息)取 help -s 命令 剪短的形式出现命令的书写格式
-
-
百度查找最直接
-
man与help的差别:
- 首先要区分内键命令和外部命令,首先我们知道centos7是基于linux内核外加shell程序的一个应用程序,内键指令实际上是shell程序的一部分,存放一些简单的linux系统命令,在linux系统加载的时候就会被加载入内存,执行时不需要开启子线程,所以运行速度就会非常的块,比如cd,history,exit
- 外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
- 我们可以使用type 或者是which命令来区分命令是内建的还是外部的。例如这两个得出的结果是不同的
- 包含shell的字眼的就是内建命令
- 如果包含linux文件系统中的目录就是外部命令
- man既可以看内建命令也可以看内部命令,但是help却只能识别内建命令
文件目录类
1 pwd指令
- 基本语法
- pwd (功能描述, 显示当前工作目录的绝对路径)
2 Is指令
-
基本语法
-
Is [选项] [目录或是文件]
-
常用选项
- -l :以列表的方式显示信息
- -a :显示当前目录所有的文件和目录,包括隐藏的
- -h:显示文件大小(一般与l连用)
- -R:递归显示该目录下所有的文件或者目录
- -s:以块(1块=1024字节)为单位显示文件的大小
- -C: 多列显示输出结果,默认
- -P:跳转到实际物理路径,而非软连接路径
- 先创建软连接然后跳转
3 cd 指令
- 基本语法
- cd [参数] (功能描述,切换到指定目录)
- 常用参数
- 绝对路径和相对路径
- cd~或者cd : 回到自己的家目录
- cd …回到目前目录的上一级目录
- cd -P 跳到实际路径,而非快捷方式
4 mkdir 指令
mkdir指令用于创建目录
-
基本语法
- mkdir [选项] 要创建的目录
- 从外向内创建
- mkdir [选项] 要创建的目录
-
常用选项
- -p 创建多及目录
-
-v 显示创建目录的过程
rmdir指令用于删除空目录
-
基本语法
- rmdir [选项] 要删除的空目录
- 由内而外删除
- rmdir [选项] 要删除的空目录
-
注意
- rmdir只能删除空目录
- 如果目录下有内容,就需要 rm -rf 要删除的目录
5 touch指令
touch指令创建文件(空文件)
- 基本语法
- touch 文件名
- 练习在/root/文档目录下创建touch1txt,touch2.txt
6加 rename
- 语法:rename 【原字符串】 【目标字符串】 【文件名】
- 练习:将刚刚创建的两个文件改名为form开头
6 cp指令[重要]
cp 指令拷贝文件到指定目录
-
基本语法
- cp[选项] source(源文件在哪) dest(复制到哪)
-
常用选项
- -r 递归复制整个文件夹
- -a 保持源文件的原有结构和属性,与选项“-dpR"的功能相同
- 在cp前加 \ 就是强制覆盖(用于处理已经存在的文件复制)
- -v 显示指令执行细节
-
注意
- 经验技巧:cp指令可以一次复制多个源文件,但是要求最后一个参数必须为目录。
-
练习将/root/文档中的两个文件移到公共中
-- 注意: 如果想要只赋值内容的话就需要加*号
7 rm指令
rm指令移除文件或目录
- 基本语法
- rm [选项]要删除的文件或目录
- 常用选项
- -r:递归删除整个文件夹(一般不单独使用)
- -f :强制删除乐提示
- -v:显示过程细节
- 练习:删除/root/公共的/下的所有内容(不要删除公共的文件夹)
8 mv指令
mv 移动文件与目录或重命名
-
基本语法
- mv oldNameFile newNameFile (功能描述:重命名)
- 如果在同一 目录下利用mv指令移动文件,可以实现文件改名操作。为防 止误操作而覆盖已经存在的文件,在使用mv指令时,最好加上“-i”选项
- mv /temp/movefile /targetFolder (功能描述:移动文件)
- 当第一个参数有文件名,第二个没有的时候就会发生文件移动
- mv oldNameFile newNameFile (功能描述:重命名)
-
练习:将class26.txt移动到/root/文档/下
-
练习2:将/root/文档 下的foom.txt改为fffm.txt
9 cat指令
cat查看文件内容
- 基本语法
- cat: [选项]要查看的文件
- 常用语法
- -n:显示行号包括空行
- -b:在非空行前显示行号
- -s :压缩空行,多个空行连续出现时仅显示一个空行
- 使用细节
- cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令 | more
- cat只适合浏览小型的文本文件,性能不是很出色
- 练习不同参数下的cat语法去访问/root/文档/class26.txt文件
-
-n 所有都会显示(包括空行)
-
-b在非空行前显示行号
-
先压缩在显示行号
-
-
10 more指令
more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more指令中内置了若干快捷键,详见操作说明
- 基本语法
- more 要查看的文件
- 说明
- 由于more是基于vi编辑器的文本过滤器性能上会好一点,但是他由于是将全篇文本加载进入内存后展示,只适合小型和适中大小的文本
- 注意
- 能够执行上面操作的前提是文本大小要大于一页才可以
11 less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令 在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
- 基本语法
- less 要查看的文件
- 说明
- 这个是比较优秀的文本过滤器,需要多少就加载进内存多少,不会一下子就加载完成,既可以满足小文本读取,也可以快速读取大文本的一部分,可以说相当优秀
12 >指令和>>指令
">"输出重定向 >> 追加
- 基本语法
- ls -l > 文件 (把操作 ls - l 的结果覆盖放入文件中,如果文件不存在就创建)
- ls -al >> 文件 (把操作 ls -al 的结果追加到文件中,如果文件不存在就创建)
- cat 文件1 > 文件2 (把操作 cat 文件1 的结果或者说是文件1中的内容覆盖到文件2中,没有就创建)[同样也可以追加]
- echo “内容” >> 文件 (把"内容"追加写入文件中) [同样也可以覆盖]
- 追加内容
- cal可以直接显示当前日历
- 将日历分别覆盖与添加到/root/文档/中的fffm.txt和form2.txt中
13 echo指令
echo输出内容到控制台
- 基本语法
- echo [选项] [输出内容]
- 参数列表
- -e 支持反斜线控制的字符转换
- 在-e的基础上
- 两个\ 输出\本身
- \n 换行符
- \t 制表符,也就是Tab键
- 应用
- 一般使用echo指令输出环境变量,输出当前的环境路径
- echo $PATH 输出环境变量
- 练习换行输出
14 head指令
head指令用于显示文件开头的部分内容,默认情况下head指令显示文件的前10行内容
- 基本语法
- head 文件 (查看开头10行的内容)
- head -n 5 文件 (查看开头5行的内容)
- 参数
- -v 总是显示文件名的头信息
- -n <行数> 指定显示头部内容的行数
15 tail指令
tail指令用于显示文件结尾的部分内容,默认情况下tail指令显示文件最后10行内容
- 基本语法
- tail 文件 (查看结尾10行的内容)
- tail -n 5 文件 (查看文件后5行的内容)
- tail -f 文件 (实时追踪文档更新)
16 ln指令
软链接也叫符号链接,类似于window中的快捷方式,主要存放了链接其他文件的路径
软连接和硬链接的区别:
软连接的类似于windows的快捷方式,指向真实地址
硬链接与真实文件的大小和日期一模一样,就好像是同步更新
硬链接与复制的区别:
复制到的文件与原文件的日期不相同,但是硬链接的是相同的
-
基本语法
- ln 直接创建硬链接
- ln -s [原文件或者目录] [软连接名] (功能描述: 给原文件创建一个链接)
- cd -P 软连接路径 可以进入真实路径
- cd $(readlink -f 软连接路径)
-
细节说明
- 当我们使用pwd查看目录时,仍然看到的是软连接所在的目录
- 删除的时候最后不要带/,并且要使用-rf加成才能删除
- 只能为普通文件创建硬链接, 不能为目录创建硬链接。而符号链接(软连接)则没有任何限制
-
练习为/root/文档/fffm.txt文件在/root中创建一个软连接rili
-
进入软连接的真实路径的方法
- cd $(readlink -f 软连接路径)
- echo $(readlink -f 软连接路径)
- cd -P 软连接
17 history指令
查看已经执行过的指令,并且可以执行历史指令
- 基本语法
- history 查看已经执行过得指令
- history 5 查看最近使用的5个命令
- !5 执行编号为5的指令(一般是先查看历史指令,然后执行)
18 时间日期类
date 用来显示当前日期
-
date (显示当前时间)
-
date “+%Y” (显示当前的年份)
-
date “+%m” (显示当前的月份)
-
date “+%d” (显示当前的日期)
-
date “+%Y-%m-%d %H:%M:%S” (显示年月日时分秒)
-
应用实例
-
date修改时间
- 前提一定要在root用户下
- date -s “字符串时间”
-
data查看非当前时间
- 语法:
- date -d “1 days ago”(显示前一天的时间)
- date -d “-1 days age”(显示明天的时间)
- 语法:
-
date使用细节
- 查看时间的时候一定要在字符串里加一个"+"号
cal指令用来显示日历
- 基本语法
- cal [选项]
- 应用实例
-
显示当前日历
-
显示2020年的日历
-
19 搜索查找类
19.1 find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
- 基本语法
- find [搜索范围] [选项]
- 选项说明
-
-empty 查找文件大小为0的目录或者文件
-
-type<文件类型> 按照指定的文件类型查找文件,支持的文件类型如下:
- b块设备文件(block device)
- c字符设备文件( characterdevice)
- d目录(directory)
- p命名管道(FIFO)
- f普通文件
- l符号链接文件(symbolic links)
- s网络套接字文件( socket)
- 案例
-
找到/home下的Hello.java
-
查找/opt下的用户名为root的文件
-
查找/home文件大小大于10K的文件
-
查找/home下所有txt文件
-
查找/root大于1M小于3M的文件
-
注意事项:
- 使用size选项查找的时候需要注意单位M大写,k小写
- +代表大于,-代表小于,什么都没有代表等于
-
19.2 locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
- 基础语法
- locate 要定位的文件
- 特别说明
- 由于locate指令基于数据库进行查询,所以第一次运行前, 必须使用updatedb指令创建locate数据
- 应用实例
-
利用locate指令快速定位hello.java文件
-
19.3 grep指令和管道符
grep过滤查找,管道符 “|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
- 基本语法
- grep [选项] 查找内容 源文件
- 常用选项
- -n :显示匹配行和行号
- -i :忽略字母的大小
- -v:搜索不含指定字符串的行
- 应用实例
-
需求: 在Hello.java中寻找String所在的行
-
需求:在/root/文档/fffm.txt中寻找日所在的行
-
19.4 which
功能介绍:which指令用于查找并显示给定指令的绝对路径
- 语法
- which [指令名]
- 练习找到ll指令的绝对路径
19.5 whereis
功能介绍:whereis显示指令及相关文件的路径
- 语法:whereis 【选项】【参数】
- 选项: -b 仅查找二进制程序或者命令
- 练习找到rm的路径
20 压缩和解压缩
20.1 gzip和gunzip指令
gzip用于压缩文件,gunzip用于解压缩文件
- 基本语法
- gzip 文件 将文件压缩成文件.gz
- gunzip 文件.gz 将.gz文件解压缩
- 说明
- 文件一旦压缩过后原文件就会消失,取而代之的是.gz文件
- 只能压缩文件
- 案例
20.2 zip/unzip指令
zip用于压缩文件,unzip用于解压的,这个在项目打包发布中很有用的
- 基本语法
- zip [选项] XXX.zip 将要压缩的文件名
- unzip[选项] XXX.zip
- 常用选项
- -r: 递归压缩,即压缩目录
- unzip的常用选项
- -d<目录> :指定解压后文件的存放目录
- 应用案例
- 案例1:将home下的所有文件进行压缩成mypackage .zip
20.3 打包指令
tar指令
-
tar指令是打包指令,将文件打包过后生成**.tar.gz**的文件
-
基本语法
- tar [选项] XXX.gz 需要打包的内容
-
选项说明
-
应用案例
-
案例1:压缩多个文件,将a1.txt和a2.txt压缩成a.targz
-
案例2:将/home 的文件夹压缩成backage.targz
-
案例3:将a.tar.gz解压到当前目录
-
-
特别说明
- 想要解压到某个目录下需要在目录前加**-C**
- tar -zxvf XXX.tar.gz -C 文件目录
- 经验技巧:tar指令的3个主选项“c”,“x”只能使用一个,不能同时使用没否则将导致命令报错
- 想要解压到某个目录下需要在目录前加**-C**