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前,使用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指令会创建一个新的空白文件
档案与目录的显示
参数:
-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指令会在环境变量$PATH设置的目录里查找符合条件的文件。
例如我要查找bash文件在哪
which bash /bin/bash
whereis命令用于查找文件。
该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
-b: 只查找二进制文件。 -B: 只在设置的目录下查找二进制文件。 -f: 不显示文件名前的路径名称。 -m: 只查找说明文件。 -M: 只在设置的目录下查找说明文件。 -s: 只查找原始代码文件。 -S: 只在设置的目录下查找原始代码文件。 -u: 查找不包含指定类型的文件。
rm命令用于删除一个文件或者目录。
-i: 删除前会向操作者进行询问是否确认删除 ---建议使用 -r: 表示递归删除,用于删除一个目录即目录下的所有子目录和文件 -f: 强制删除,无需确认 rm -rf在使用前需谨慎
用于控制用户对文件的权限
什么是文件的权限?
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命令用于变更文件或目录的所属群组。
什么是群组?
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 来修改文件所属的群组 注意新的群组名必须是已经存在的群组
该命令用于设置文件所有者和文件关联组的命令。
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 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
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
移动文件或更改文件名
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。 -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。 -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。 -n: 不要覆盖任何已存在的文件或目录。 -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
mv 旧文件名 新文件名 表示将一个文件改为新名字 mv learn.txt newLearn.txt
mv filename 目录 表示移动文件到新目录下
mv 目录1 目录2 如果目录2存在,则将目录1移动到目录2下 如果目录2不存在,则将目录1改名为目录2
拷贝文件
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f:覆盖已经存在的目标文件而不给出提示。 -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。 -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。(默认复制时文件的权限会被赋予默认值,可能会和源文件的权限有出入,时间则是会被设置成复制文件生成时的时间,使用这个参数,则可以保证权限和时间和源文件保持一致) -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 -l:不复制文件,只是生成链接文件。
复制目录时,必须使用参数 -r 或者 -R cp –r test/ newtest
head 命令可用于查看文件的结尾部分的内容
-f 循环读取 -n 控制行树
如果使用来 -f 参数,则会循环读取文件内容,如果文件内容改变了,则输出内容也会随之改变,Ctrl+c结束
tail -n 20 file //输出文件最后20行 tail -n +20 file // 从文件第20行开始,一直输出到文件末尾
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
head -n 20 file 输出文件前20行的内容
cd命令用于切换当前工作目录。
cd /usr/bin 进入usr/bin目录 cd ../ 切换到上一层目录 cd ~ 切换到自己的home目录
显示日期的指令
date 输出: 2021年 4月 8日 星期四 11时43分15秒 CST date +%Y/%m/%d 输出: 2021/04/08 date +%H:%M 输出: 11:50
显示日历
cal 2021 显示2021年12个月分的日历 cal 4 2021 显示2021年4月份的日历
将内存中尚未被更新的数据写入硬盘中,建议在关机前多使用几次
关机命令
参数
-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关机并重启 如果参数后面的时间是今天已经过去的时间,则系统会在第二天对应的时间执行指令。
切换执行等级
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 命令用于查找文件里符合条件的字符串。
在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的运行中的进程名
用于显示当前进程的状态,类似于 windows 的任务管理器。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了.
ps命令非常之多,用法也很多,这里不一一列举,常见用法就是上面列出的
ps -ef | grep "进程名"
用于显示当前的工作目录
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的
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也只能压缩文件,不能压缩目录,后缀名为.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 learn.zip learn.txt
加上-r参数可以压缩目录 zip -r test.zip test // test是一个目录
unzip可以解压.zip文件
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打开一个文件就自动进入了普通模式,普通模式下我们敲击键盘是无法对文件进行内容的修改操作的,任何的敲击命令都会被识别成一个命令而不是字符的输入。
普通模式下使用 "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 取消行号