Linux和vim编辑器常用指令(基础版)

Linux和vim编辑器常用指令(基础版)

Linux文件管理

cat

cat指令可以将文件内容打印到输出设备上

参数:

-n: 打印时每行显示行号

-b: 打印时每行显示行号,但和-n不同的是这个参数对于空白行不会进行编号

-s: 如果遇到连续两行以上的空白行,就合并成一行空白行

示例:

假设我要输出learn.txt的内容

cat learn.txt

如果当前所在的目录和文件所在的目录不一致,可以在文件名前加上它所在的路径

cat /Users/learn/learn.txt 

如果要打印行号

cat -n/-b learn.txt

也可以使用 ">"或 ">>"将输出的内容输入到另一个文件中,其中 ">"是覆盖原有内容, ">>"是追加内容

cat learn.txt > copy.txt
cat learn.txt >> copy.txt

touch

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

使用touch修改文件的时间属性

在使用touch前,使用ls -l 查看learn.txt的信息
ls -l learn.txt
-rw-r--r--  1 root  admin  0  3 31 10:11 learn.txt
可以看到时间是10:11
使用touch 之后
touch learn.txt
ls -l learn.txt
-rw-r--r--  1 root  admin  0  3 31 10:13 learn.txt
可以发现时间变为了当前的时间

如果当前文件不存在,则使用touch指令会创建一个新的空白文件

ls

档案与目录的显示

参数:

-a: 全部的档案,包括隐藏的档案 (以.开头的文件)
-A: 全部的档案,包括隐藏的档案 (以.开头的文件),但不包括.和..这两个目录
-d: 仅列出目录本身,目录下的文件信息不会输出
-l: 输出文件的详细信息,包括文件的权限、属性等
-t: 按照时间属性进行排序输出,(ls预设按照文件名进行排序输出)
-f: 直接列出结果,不会进行排序,且会出书隐藏的档案

在/Users/learn目录下

ls -l
total 0
drwxr-xr-x   4 zonst  admin  128  3 28 17:37 database
drwxr-xr-x   9 zonst  admin  288  3 24 14:35 datastructure
drwxr-xr-x  17 zonst  admin  544  1 12 19:59 goWeb
drwxr-xr-x   9 zonst  admin  288  2 20 16:53 java
-rw-r--r--   1 root   admin    0  3 31 10:13 learn.txt
drwxr-xr-x   5 root   admin  160 12  5 15:41 learngit
drwxr-xr-x   4 zonst  admin  128  3 29 16:46 python3
drwxr-xr-x  11 zonst  admin  352  2 28 10:27 vue
drwxr-xr-x   9 zonst  admin  288  3 31 10:26 笔记
drwxr-xr-x  17 zonst  admin  544  3 30 14:56 算法
drwxr-xr-x   4 zonst  admin  128 12 21 17:24 安装包

which

which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

例如我要查找bash文件在哪

which bash
/bin/bash

whereis

whereis命令用于查找文件。

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

-b: 只查找二进制文件。
-B: 只在设置的目录下查找二进制文件。
-f: 不显示文件名前的路径名称。
-m: 只查找说明文件。
-M: 只在设置的目录下查找说明文件。
-s: 只查找原始代码文件。
-S: 只在设置的目录下查找原始代码文件。
-u: 查找不包含指定类型的文件。

rm

rm命令用于删除一个文件或者目录。

-i: 删除前会向操作者进行询问是否确认删除 ---建议使用
-r: 表示递归删除,用于删除一个目录即目录下的所有子目录和文件
-f: 强制删除,无需确认

rm -rf在使用前需谨慎

chmod

用于控制用户对文件的权限

什么是文件的权限?

linux下一个文件的调用权限可以分为三级,文件拥有者(owner),和文件拥有者同组的用户(group),其他用户(other)

我们使用ls -l命令打印文件信息时会看到如下信息

-rw-r--r--   1 root   admin    0  3 31 10:13 learn.txt

最前面的 -rw-r–r-- 就表示了不同用户对这个文件所拥有的权限。
最前面的’-‘表示这是一个文件,如果它是’d’,则表示这是一个目录,常见的还有’l’,‘b’,‘c’
后面九个字符就表示了三种用户对应的权限,每三个字符表示一种用户。

完整的权限表达如下

-rwxrwxrwx
r表示读权限,w表示写权限,x表示执行权限
前三个字符表示文件拥有者,中间三个表示同组用户,后三个表示其他用户
-rwxrwxrwx 表示所有人都对这个文件拥有可读可写可执行的权限
而上面的-rw-r--r--  则表示文件拥有者拥有可读可写权限,其他人只有可读权限

如何修改文件权限

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更 

符号模式:

linux使用u表示user,g表示group,o表示other,a表示all,即所有人

使用"+","-","="来进行权限设置

chmod u=rwx,g=rw,o=r file
对file文件的拥有着赋予读写执行权限,同组者只有读写权限,其他人只有读权限
chmod u-x,o+w file
对file文件的拥有着删除执行权限,同组者权限不动,其他人则增加写权限 "-"表示删除某项权限,"+"表示增加某个权限
chmod a=rwx file
a表示所有人,这句话结果如何一目了然

数字模式

可读权限r=4,w=2,x=1

rwx=4+2+1=7

所以

chmod 777 file 和 chmod a=rwx file 效果是一样的
一个7就表示rwx,不同位置的7就表示不同用户的权限

chmod 764 file == chmod u=rwx,g=rw,o=r file
chmod 765 file == chmod u=rwx,g=rw,o=rx file
chmod 664 file == chmod u=rw,g=rw,0=r file

chmod 4755 file 可使此程序具有 root 的权限。

chgrp

chgrp命令用于变更文件或目录的所属群组。

什么是群组?

linux下每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

ls -l learn.txt
-rw-r--r--  1 root  admin  0  3 31 13:44 learn.txt

上面的root表示文件拥有者,admin表示文件所属的群组
可以使用
chgrp 新群组名 filename
来修改文件所属的群组

注意新的群组名必须是已经存在的群组

chown

该命令用于设置文件所有者和文件关联组的命令。

ls -l learn.txt
-rw-r--r--  1 root  admin  0  3 31 13:44 learn.txt

root就是文件所有者
可以使用
chown 新用户名 learn.txt
来修改文件的所有者

chown也可以用来修改文件所属的群组

chown :新群组名 learn.txt

如果要同时修改文件的所有者和群组

chown 新用户名:新群组名 learn.txt

find

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示

cut

cut命令用于显示每行从开头算起 num1 到 num2 的文字。

cut 常用于 管道命令的结果选取

cut -bn file
cut -c  file
cut -df file
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
cut -c 3-5 learn.txt
输出每行第3到5个字符

cut -b 3 learn.txt
剪切输出每行单个字符

cut -b 3,5 learn.txt
剪切输出每行第三,第五两个字符

cut -b 3- learn.txt
剪切输出每行第三个字符及其之后所有的字符

cut -b -5 learn.txt
剪切输出每一行第 1-5 个字符

如果剪切的对象是汉字,建议使用-c,或者-nb

mv

移动文件或更改文件名

-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
mv 旧文件名 新文件名 表示将一个文件改为新名字
mv learn.txt newLearn.txt
mv filename 目录 表示移动文件到新目录下
mv 目录1 目录2
如果目录2存在,则将目录1移动到目录2下
如果目录2不存在,则将目录1改名为目录2

cp

拷贝文件

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。(默认复制时文件的权限会被赋予默认值,可能会和源文件的权限有出入,时间则是会被设置成复制文件生成时的时间,使用这个参数,则可以保证权限和时间和源文件保持一致)
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
 复制目录时,必须使用参数 -r 或者 -R
 cp –r test/ newtest 

tail

head 命令可用于查看文件的结尾部分的内容

-f 循环读取
-n 控制行树
如果使用来 -f 参数,则会循环读取文件内容,如果文件内容改变了,则输出内容也会随之改变,Ctrl+c结束
tail -n 20 file //输出文件最后20行
tail -n +20 file // 从文件第20行开始,一直输出到文件末尾

head

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容

head -n 20 file
输出文件前20行的内容

Linux其他常用命令

cd

cd命令用于切换当前工作目录。

cd /usr/bin 进入usr/bin目录
cd ../ 切换到上一层目录
cd ~ 切换到自己的home目录 

date

显示日期的指令

date
输出: 2021年 4月 8日 星期四 11时43分15秒 CST
date +%Y/%m/%d
输出: 2021/04/08
date +%H:%M
输出: 11:50

cal

显示日历

cal 2021   显示2021年12个月分的日历
cal 4 2021 显示2021年4月份的日历

bc

sync

将内存中尚未被更新的数据写入硬盘中,建议在关机前多使用几次

shutdown

关机命令

参数

-t : -t 后面加秒数,表示几秒之后关机
-r : 表示将系统服务停掉之后重新启动
-h : 立刻关机
-k : 不会真正的关机,只是会给使用者发送一个警告信息
-n : 不经过init程序,直接以shutdown的功能来关机
-c : 取消已经在进行的shutdown指令
注意: 所有的参数都需要在之后加上时间信息
eg: shutdown -h 20:30 // 今天20:30立刻关机
    shutdown -h now   // 现在立刻关机
    shutdown -r l4:30 // 今天14:30关机并重启
如果参数后面的时间是今天已经过去的时间,则系统会在第二天对应的时间执行指令。

init

切换执行等级

Linux 一共有七个等级

0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
2:多用户状态,没有NFS支持。
3:完整的多用户模式,有NFS,登陆后进入控制台命令行模式。
4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5:X11控制台,登陆后进入图形GUI模式,XWindow系统。
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。运行init6机器就会重启。

标准的Linux运行级别为3或5
init 数字  切换到对应的等级
init 0 和 shutdown 拥有相同的功能

grep

grep 命令用于查找文件里符合条件的字符串。

在learn.txt里查找包含有learn的行
grep learn learn.txt

输出结果就是所有包含learn的行

grep的参数有很多,这里不一一列举,有需要网上查找

-r 递归查找,用于在一个目录中进行匹配查找时使用
-i 忽略查找字符的大小写区别
-a 不要忽略二进制的数据
-l 列出文件内容符合指定的样式的文件名称。

管道符

管道符是linux里非常重要的一个指令 它长这样 " | "

使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推。

管道符可以和grep搭配起到很好的组合效果

ls | grep learn
输出所有文件名中包含learn的文件
假设learn.txt里有一行文字是  "xxx???xxx???date:2021:::*((Y))time:10:30JJJBBB"
则下面这一行指令可以将上面那行字符串输出
cat learn.txt | grep "date:2021" | grep "time:10:30"

ps -ef | grep redis
查找系统中名字包含redis的运行中的进程名

ps

用于显示当前进程的状态,类似于 windows 的任务管理器。

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了.

ps命令非常之多,用法也很多,这里不一一列举,常见用法就是上面列出的

ps -ef | grep "进程名"  

pwd

用于显示当前的工作目录

sudo

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的

Linux备份压缩

gzip、 zcat

gzip只能压缩文件 , 不能压缩目录 ,后缀名为.gz ,而且不保留原文件,gzip对文件又60%~70%的压缩率

gzip learn.txt
使用该命令,源文件将被压缩成后缀名为.gz为压缩文件
可以使用gzip -d learn.txt.gz 来解压缩文件
也可以使用zcat learn.txt.gz 来查看压缩文件的内容

参数

-c 将压缩的数据输出到标准设备中,可以利用这种方式来达到压缩文件但保留原文件的目的
   gzip -c learn.txt > learn.txt.gz
   这样既能压缩文件也能保留原文件
-v 打印压缩信息
-# 压缩等级,-1最快,但压缩比最差,-9最慢,但压缩比最好,预设是-6

bzip2、bzcat

bzip2也只能压缩文件,不能压缩目录,后缀名为.bz2,可以保留原文件,bzip的压缩率会高于gzip,但速度会稍慢

bzip2 learn.txt
将learn.txt文件压缩为后缀名为.bz2的压缩文件
可以使用bzip2 -d learn.txt.gz 来解压缩文件
也可以使用bzcat learn.txt.gz 来查看压缩文件的内容

参数

-c 将压缩的数据输出到标准设备中
-k 压缩时保留原文件
-v 打印压缩信息
-# 压缩等级,-1最快,但压缩比最差,-9最慢,但压缩比最好,预设是-6

zip

压缩文件或目录,压缩文件后缀为.zip

命令: zip 压缩后的文件名 原始文件名
zip learn.zip learn.txt
加上-r参数可以压缩目录
zip -r test.zip test   // test是一个目录

unzip

unzip可以解压.zip文件

tar

tar用于文件或目录的打包,严格意义上gzip和bzip2是对文件的压缩,而tar是对压缩文件的打包

参数

-c 建立一个压缩文件
-x 解压一个压缩文件
-z 以gzip命令压缩/解压缩  
-j 以bzip2命令压缩/解压缩
-v 压缩的过程中显示文件(verbose)
-f file 指定文件名,必选项
tar -zxvf 压缩文件名 解压后的文件名  // 以gzip的方式解压一个文件
tar -zcvf 压缩文件名  原文件名。    // 以gzip的方式压缩一个文件
tar -zcvf learn.txt.gz learn.txt

vim基础指令

vim基本分三种模式,普通模式,输入模式,命令模式。

我们使用vim打开一个文件就自动进入了普通模式,普通模式下我们敲击键盘是无法对文件进行内容的修改操作的,任何的敲击命令都会被识别成一个命令而不是字符的输入。

普通模式下使用 "i"或"a"进入输入模式,使用"shift + :"进入命令模式

普通模式下的常见命令:

普通模式下我们可以进行光标移动,复制粘贴,搜索替换等功能

光标移动:

h 或 左箭头   光标左移一位
j 或 下箭头   光标下移一行
k 或 上箭头   光标上移一行
l 或 右箭头   光标右移一位
也可以使用数字加指令的模式移动多个字符或行数。比如20k 表示向上移动20行 40h 表示在改行左移40个字符
也可以使用n entry键来表示向下移动几行 n是行数
数字0键 表示移动到本行行首  
"$" 表示移动到本行行尾     
H  表示移动到文档首行的首个字符位置。注意H是大写
M  表示移动到文档最中间一行的首个字符位置
L  表示移动到文档最后一行的首个字符位置
G  移动到最后一行
gg 移动到第一行
nG n是一个数字,表示向下移动几行 20G表示向下移动20行
注意这里的nG 似乎和前面的nj 是一样的效果,都是向下移动指定行数,可事实上这二者还是有些许的区别的, nG移动的行数是包括自己这一行的,而nj则不包括自己这一行,比如说此时光标在首行,如果使用3G,则光标会移动到第三行,使用3j则光标会移动到第四行

复制粘贴:

dd  删除一行
ndd n是数字 表示从当前光标所在位置开始向下删除指定行数
d1G 表示删除光标所在行到第一行的所有数据
dG 表示删除光标所在行到最后一行的所有数据
d$ 表示删除光标所在处到改行的最后一个字符。比如说光标在某一行的中间,则使用这条指令会删除后半行
d0 作用同上,但删除的是光标前面的部分

yy 复制一行
将上述所有的删除指令的d换成y就变成里复制指令
nyy y1G yG y$ y0 作用是什么不同多说

p与P 粘贴,p 表示数据粘贴在光标所在行的下一行 P表示上一行 事实上dd 和 yy过的数据都可以被粘贴  
dd 之后在 p 可以理解为剪切

J 将光标所在行和下一行合并为同一行
x与X x表示删除光标前一个字符   X表示后一个字符
块选择模式
ctrl + v 进入块选择模式 进入该模式之后即可以利用光标选中你想要选中的一块文档,进行操作 可以复制 删除等
esc键退出该模式

搜索替换:

/xxx 表示搜索xxx   比如/word 表示在光标向下的文档中搜索word
?xxx 的作用和 /xxx 差不多,只不过他是在光标向上的文档中搜索

如果一个文档里有多个我们需要搜索的内容,可以使用n 或 N 进行跳转 他们可以从一个搜索到的目标跳到下一个你搜索出来的目标上


:n1,n2s/word1/word2/g
这条指令应该可以说是本文档最长的一条指令了
n1,n2是数字。这条指令表示在n1到n2行之间搜索所有的word1 并将其替换为word2

输入模式:

i 或 a 进入 输入模式,进入输入模式之后你对键盘的操作效果就和普通的文档输入一样了,按下esc表示退出输入模式,注意在输入模式下按
shift+:是无法进入命令模式的,必须先退出输入模式

命令模式:

:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出 不保存修改
ZZ 强制退出,但会保存修改
:set nu 显示行号
:set nonu 取消行号
上一篇:Learn Vim


下一篇:Docker-base-learn