Linux文件目录类命令
文章目录
一、Linux 文件目录类命令介绍
补充:
-
ln -s 原文件 新文件
该命令相当于创建了一个原文件的快捷方式。在Linux 中的专业术语叫做“软链接”。 -
scp /root/a.txt root@192.168.1.123:/root/
这个命令相当于是将本地 /root 目录下的a.txt 拷贝到了远端 192.168.1.123 这个主机的 root 用户下的 /root 文件夹中。
-
rm -rf /yyds
强制删除 /yyds 目录下的所有的目录和文件。 -
more 的时候可以进行搜索。
使用/在此输入要查找的内容
进行字符串查找。
按下 n 就是切换到下一个匹配的结果,按 N 是切换到上一个匹配的结果。
知识点一:
-
把当前目录下的 a.txt 进行压缩操作,在当前目录中生成一个 abc.tar.gz 的压缩文件。
tar -zcvf abc.tar.gz ./a.txt
-
把 abc.tar.gz 中的文件解压到当前目录下
tar -zxvf abc.tar.gz -C ./
重点:zxvf 可以解压 .tar.gz 类型的文件
xvf 可以解压 .tar 类型的文件
zcvf 可以把文件打包成 .tar.gz 类型的文件
cvf 可以把文件打包成 .tar 类型的文件 (只是打包,不压缩)
详解 tar 命令中的 -z 参数 :
tar 命令只是打包或者解压,而 加上参数 -z 之后会再用 gzip 指令进行压缩操作。
知识点二:
zip 格式的压缩文件在 Linux 和 Windows 上都可以用。
把当前目录下的 a.txt 压缩成存放在当前目录的 abc.zip
zip abc.zip a.txt
把 abc.zip 进行解压
unzip abc.zip
二、文件目录类命令
2.1 ls 命令的使用
如果在 ls 的时候出现了中文乱码,可以尝试用以下命令来解决乱码:
export LANG=en_US
- ls -l 命令的使用
输入命令:ls -l
可以看到 total 总数为 120 个文件。
第一列代表设备类型和权限
第二列代表链接的文件数量。(该数量会随着软链接数量的增加而增加)
第三列代表用户和所在的组。
第四列代表大小,单位是字节。
第五列是月和日。
第六列,显示的年或者时间。(如果是当前年的,那么就会在年这一列显示具体时间)
最后一列为文件名或者目录名。
-
ls -lt 命令
该命令可以倒序显示出各个文件或者目录的创建的时间。 -
ls -A 命令
该命令和 ls -a 很相似,不过 ls -A 不列出当前目录.
和 父目录..
-
ls -F 命令
列出所有的目录,并在目录后加上一个斜杠/
如果列出的内容中含有可执行文件,那么该文件呈现绿色,并且在后方会自带一个星号*
-
ls -R 命令
如果使用 ls -R /root 这个命令,那么会递归的列出该目录下所有的文件和目录 -
ls -ls 命令
其中 -l 参数代表列出文件的详细参数,-s 参数代表以块为单位列出每个文件的大小。
2.2 pwd 命令
- pwd
可以列出当前所在目录的绝对路径。
2.3 cd 命令
-
cd /root 命令
进入 /root 目录,/root 目录就是 ~ 目录 -
cd ../..
命令
.
一个点代表当前目录
..
两个点代表上级目录
如果使用 pwd 发现自己所处的目录是:/root/yyds
那么要想进入到根目录,我们需要使用代码:cd ../..
2.4 mkdir 和 rmdir 命令
-
mkdir /root/yyds
建立一个名叫 yyds 的目录在/root 目录下 -
mkdir -p 1/2/3
该命令的作用是:递归的建立多个文件夹。
建立一个文件夹1,文件夹1中还建立了文件夹2,文件夹2中还建立了文件夹3。 -
mkdir -m 777 /root/abc
该命令中,-m 参数相当于执行了 chmod 命令,而 chmod 命令是用来改变权限(读r,写w,执行x)的命令。
而777 代表赋予用户,用户所属用户组,用户组外的所有用户 所有的权限(读、写、执行)
该命令的作用:在 /root 文件夹下建立 abc 文件夹的同时,赋予该文件夹 777 的权限。
- rmdir 命令
比如我用 rmdir /root/yyds 命令,尝试删除 /root 目录下的 /yyds 目录。
如果 /root/yyds 目录下有文件或者文件夹,系统还不允许直接删除。
假如 yyds 目录下还有一个名为 yydsplus的目录。
如果要删除 yyds 目录下的 yydsplus 目录,需要执行命令:rmdir -p /root/yyds/yydsplus
2.5 ln命令
Windows 中新建一个快捷方式,在 Linux 中的专业术语是建立一个软链接。
- 创建一个硬链接
比如现在我要在当前目录下给 1.txt 这个文件创建一个硬链接,那么使用命令:
ln 1.txt 11.txt
前面的 1.txt 是原文件,后面的 11.txt 是硬链接产生的文件。11.txt 这个文件的大小和属性和原文件 1.txt 一模一样。
可以看到,11.txt 和 1.txt 看不出任何分别。
但是,删除原文件 1.txt之后,硬链接文件11.txt 不会被随之删除。
- 创建一个软链接
比如:现在要将文件 11.txt 建立一个软链接,软链接指向当前目录下的新建文件 11change.txt
执行命令:ln -s 11.txt 11change.txt
可以看到,11.change.txt 这个文件是一个用软链接生成的浅蓝色文件,这个文件指向了原文件 11.txt
执行命令 rm -f 11.txt 把 11.txt 删除之后,再来查看:
可以看到,这个名叫 11change.txt 的软链接文件变红了,并且指向的原文件被覆盖上了红色背景。
拿 file 命令去测试这个软链接文件,发现该文件与原文件之间的链接已被损坏。
同样的,软链接也可以用来链接文件夹。
- ln -sf 命令
如果原来已经执行过命令 ln -s a.txt a_change.txt,那么使用 ln -sf a.txt a_change.txt的时候,它就会将原先的 a_change.txt 先删掉。
比如 ln -sf aaa bbb
如果原先在当前文件夹下,已经有一个 bbb文件夹 指向 aaa文件夹,那么执行命令后,就会将 bbb 给删除掉,然后再生成一个新的 bbb 文件夹。
-f 参数的加入,可以在进行链接删除那些同名的软链接
- ln -sb 命令
ln -sb aaa bbb
-b 参数代表,如果 aaa 目录中的东西进行过删除,那么被使用软链接生成的 bbb 目录中就会相应的做出一些备份。
注意!!!
如果你有需求需要删除 Linux 软链接的时候,请慎重使用 -rf 参数。
删除 Linux 软链接的正确和错误示范:
例如:当前有一个文件夹b,另有一个文件夹a是文件夹b的软链接
如果你打算删除软链接文件夹 a
正确的删除方法:rm -rf ./a
错误的删除方法:rm -rf ./a/
如果在要删除的软链接后加了一个斜杠
/,那么执行删除命令之后将会把软链接指向的原文件下的所有内容一并删除,非常危险。
参考:https://blog.csdn.net/chenghuikai/article/details/50961622
2.6 touch 命令
本命令用于创建一个空的文件。
-
在当前目录下创建一个名叫 a 的 txt 文件
touch a.txt ./ -
修改文件创建时间
touch -c -t 07161450 a.txt
时间的格式为:月日时分
上面的代码中,07是月份,16是日期,14是时刻,50是分钟。
注意:
如果修改文件的时间大于或小于当前年份的话,使用 ls -l 查看结果中时间的那一栏就会变成年份。 -
touch -r 命令
touch -r abcd abc 这个命令可以把文件 abc 的创建时间修改成和 abcd 这个文件的创建时间一模一样。 -
touch -d 命令
touch -d “6:30pm 05/11/1998” abc
这个命令可以把 abc 文件改到 1998 年的5月11日下午6点半。
2.7 cp 拷贝命令
-
cp 1 1.bak
拷贝名为 1 的文件,生成一个它的备份文件 1.bak -
cp -r a a.bak
拷贝名为 a 的文件夹,生成一个它的备份文件夹 a.bak
注意:拷贝文件夹的时候需要加上参数 -r,该参数表示递归。 -
cp a.txt /tmp
拷贝 a.txt 文件到 /tmp 目录下。
2.8 scp 拷贝命令
(1)把本地的文件或目录复制到远程机器
-
scp 6 192.168.1.51:/tmp/1/
通过网络来进行远程拷贝,把 6 这个文件拷贝到 远端地址为 192.168.1.51 的 /tmp/1/ 目录下。 -
scp -r yyds 192.168.1.51:/root/
把 yyds 文件夹复制到 192.168.1.51 这个远端机器的 /root 目录下。 -
scp -r yyds root@192.168.1.51:/root/
把 yyds 文件夹复制到 192.168.1.51 这个远端机器的 root 用户的 /root 目录下。
(2)把远程机器中的文件复制到本地来
-
scp 192.168.1.51:/tmp/6 ./
把 IP 地址为 192.168.1.51 的远程机器中的 /tmp/6 这个文件复制到本地的 当前文件夹下。 -
scp root@192.168.1.51:/tmp/6 ./
把 IP 地址为 192.168.1.51 的远程机器中 root 用户的 /tmp/6 这个文件复制到本地的 当前文件夹下。
2.9 rm 删除命令
-
rm ./1.txt
删除当前文件夹下的 1.txt 这个文件。执行后会被询问是否要删除。
如果要删除,输入 y 即可。 -
rm -f ./1.txt
强制删除当前文件夹下的 1.txt 文件,而不进行询问。 -
rm -r ./a
删除当前文件夹下的 a 这个文件夹,采用的方式是递归删除。
系统会询问是否删除。 -
rm -rf ./a
删除当前文件夹下的 a 这个文件,采用递归删除的方式。
-r 代表递归删除,-f 代表强制删除不询问。 -
rm -f ./*.txt
删除当前文件夹下所有以 .txt 结尾的文件。
星号*
可以匹配 .txt 前任意数量的字符。 -
rm -rf *
删除当前目录 所有的文件。
注意!!!不要在根目录执行这个命令,执行完系统中所有的文件就被删除了,系统马上崩溃。
2.10 mv 命令
-
mv 1 1.bak
把文件名为 1 的文件改名为 1.bak -
mv /root/a /root/yyds
把 /root 目录下的 a 这个文件夹,移动到 /root/yyds 目录中。 -
mv -b 命令
mv 3 4
这条命令是把当前文件夹下的 3 这个文件改名为 4。
如果当前文件夹中存在文件4 的话,系统会询问你是否进行覆盖操作。
而如果你使用的命令是 mv -b 3 4
那么如果在执行 mv 操作前,当前文件夹中还是存在一个 名为 4 的文件。
那么覆盖成功后,还会生成一个名叫 4~ 的备份文件。
因此,-b 参数就起到了同名文件被覆盖之前会自动备份的效果。 -
mv -f 命令
-f 命令可以起到强制覆盖的效果而不再询问。
如图所示,4 这个文件被改名为 1-bak 之后,把原先文件夹里的 1-bak 覆盖了。
切记:在移动重要文件夹前请先做备份操作。
2.11 cat 命令
- 简单查看文件内容
现在生成一个名叫 1.log 的文件,并向文件中写入文本 “i love linux”
echo “i love linux” > 1.log
echo “i love linux2” >> 1.log
echo “i love linux3” >> 1.log
现在,使用 cat 1.log 这个命令就可以查看到 1.log 中的内容。
-
使用 cat -n 1.log
-n 参数可以在显示文本的同时打印行号。
-
把一个文件的内容写到另一个文件里
下面的命令是把 1.log 中的文本写到了 2.log 文件中。
大于符号可以生成一个文件,而双大于符号 >> 代表添加文本到一个已存在的文件中。
cat 1.log > 2.log -
把两个文件合并为一个文件
下面的命令可以把 1.log 和 2.log 合并到 3.log 中:
cat 1.log 2.log > 3.log
2.12 more 命令
-
可以使用
more 文件名
的方式查看一个大文件。
查看的时候按 空格是往下翻页,按 b 是往上翻页。 -
more -5 3.log
显示 3.log 文件的前 5 行。 -
more -5 +30 3.log
从3.log 这个文件的第30行开始显示,每5行显示一次。
2.13 less 命令
该命令用来分屏显示文本。
使用方式同 more 命令。
如果要显示行号的话,可以使用 -N 参数。
比如:less -N 2.log
2.14 tail 命令(常用)
tail 命令用来显示文本文件 的最后几行。
-
显示最后的 20 行
tail -n 20 2.log -
实时显示最后的 100 行(常用)
如果 2.log 文件中有内容不断写入,那么该命令可以监听到写入的内容并展示在屏幕上。
tail -100f 2.log
三、压缩解压类命令
3.1 gzip 和 gunzip 命令
gzip 有几个特点:
(1)可以把文本文件压缩到原大小的 60%~70%,这样可以大量的减少文件的大小。
(2)只可以压缩文件,不可压缩目录。但是可以使用参数 -r 递归压缩目录下的所有文件。
(3)一旦对原文件进行压缩操作,原文件将会消失,并生成新的压缩文件
(4)不能对 ln 命令生成的链接文件进行压缩
-
使用 gzip 压缩文件
gzip abc
-
使用 gzip 或者 gunzip 解压文件
gunzip abc.gz
和gzip -d abc.gz
是一样的效果。
-
把目录下的每个文件进行压缩,每个文件都单独压缩成一个文件
如图所示,使用命令gzip 目录/*
的方式对目录下每个文件进行压缩。
-
把目录下的每个压缩文件都解压出来
使用命令gzip -dv 某目录/*
其中 -v 参数让解压过程可视化。 -
在不解压的情况下,查看当前目录下所有压缩文件的信息
gzip -l *
其中 -l 参数可以显示未解压文件中包含的文件的信息。
3.2 tar 命令
tar 命令可以进行压缩操作。
-
压缩操作
把当前目录下的 aaa 这个文件夹压缩为 tar.gz 格式的压缩文件
tar -zcvf aaa.tar.gz aaa
其中:-z 参数代表打包的同时压缩,-c 参数打包,-v 参数可视化,-f 参数指定压缩后文件名。 -
解压操作之解压 tar.gz 文件
把 aaa.tar.gz 文件进行解压。
tar -zxvf aaa.tar.gz
其中,-x 参数代表解压。 -
打包操作
把 itpux 这个文件夹进行打包,但是不压缩
tar -cvf itpux.tar ./itpux
扩展:AIX 系统中在使用 tar -cvf 时不能加 -z参数,只能进行打包操作。 -
解压操作之解压 tar 文件
tar -xvf itpux.tar -
先解压,再解包
比如现在有一个文件 aaa.tar.gz
我可以使用 命令gunzip aaa.tar.gz
把该文件解压为 aaa.tar 文件
再使用tar -xvf
把 aaa.tar 文件解压为 aaa 这个文件夹。 -
先打包,再压缩
同样的,为了生成文件 aaa.tar.gz
我可以先使用命令tar -cvf aaa
把aaa文件夹打包成 aaa.tar
然后使用gzip aaa.tar
把文件打包成 aaa.tar.gz
3.3 zip 和 unzip 命令
zip 命令压缩的包在 Windows 和 Linux 中都可以使用。
-
压缩操作
把 aaa 这个文件夹进行压缩,压缩成 test.zip
zip test.zip ./aaa -
解压操作(解压到自定义文件夹)
方法一:unzip test.zip ——该命令可以把 test.zip 中的 aaa 文件夹解压出来
方法二:unzip -d new_direc test.zip —— 该命令可以把 test.zip 中的 aaa 文件夹解压到 new_direc 这个目录中,且 new_direc 目录不存在的话会自动创建。
3.4 bzip2 和 bunzip2 命令
这两个命令是 gzip 和 gunzip 命令的升级版,升级版的命令压缩比例特别的高。
和 gzip 命令一样,bzip2 命令不能压缩目录。
对文件实行压缩操作后,原文件会消失。
-
压缩操作
比如现在有一个 tar 包叫做 itpux.tar,现在对该包进行压缩操作
bzip2 itpux.tar
会生成一个 itpux.tar.bz2 的压缩文件。 -
解压操作
bunzip2 itpux.tar.bz2
解压成 itpux.tar 文件。 -
压缩时保留原文件
使用参数 -k
bzip2 -k itpux.tar
这样一来,生成新文件 itpux.tar.bz2 的同时保留了原文件 itpux.tar -
解压时保留原文件
使用参数 -k
bunzip2 -k itpux.tar.bz2
这样一来,解压出 itpux.tar 文件的同时保留了原文件 itpux.tar.bz2
四、帮助命令与搜索命令
4.1 man 帮助命令
-
查看某命令的帮助文档
看 ls 命令的帮助文档man ls
使用 h 查看 man 命令的帮助说明。
使用 q 退出。 -
查看配置文件的帮助
比如现在我要查看 /etc/passwd 文件的帮助。
使用命令:
man 1 passwd
其中1 是查看用户命令,任何人都可以启动。
如果要查看该配置文件的参数描述,可以使用命令 man 5 passwd。
4.2 info 命令
info 命令和 man 命令都是显示帮助文档,只不过二者的展示方式不同。
4.3 whatis 命令
该命令可以获取文件的某些信息。
下图中展示了 ls、find、iptables 三个命令的相关用途。
whatis services
4.4 help 帮助命令
比如敲入命令:help cd
就可以看到 cd 这个命令的使用帮助。
4.5 which 搜索命令
该命令用于显示系统命令所在的目录。
比如:现在我不知道 iptables 命令在 Linux 目录中的哪个位置,那么,我可以使用 which iptables 来查看:
4.6 locate 搜索命令
该命令用于查找某个命令相关的所有的文档路径。
比如现在我需要知道命令 useradd 的所有的文档(资料库)在什么位置。
4.7 find 搜索命令(特别重要,很常用)
该命令用于查找文件。
-
find 时间
该命令以时间为单位进行查询。
那么时间有如下几个参数:其中 time 代表某个时间,比如 -mmin -120 代表 2 小时内被修改的文件,其中-m参数代表被修改。
ctime —— 创建时间
atime —— 访问时间
mtime —— 修改时间 -
文件类型参数:-type
文件有以下几类:
a 特殊的块文件
c 字符文件
d 目录
f 普通文件
l 符号连接 -
参数 a
-a 参数就是某文件和某文件,相当于 and。 -
参数o
-o 参数标识就是某文件或者某文件,相当于 or。 -
固定格式代码
-exec command {} \;
该代码表示查找到文件以后要做 XX 操作。
其中:
-exec 代表执行命令
command 是我们写的命令
{} 代表我们要查的结果。比如find / -name yyds -exec rm -rf {} \;
这之中的 {} 就代表管道符之前查到的结果。
\ 转义。
以;结束。 -
参数 -ok
代表是否执行。
4.7.1 查找 /etc 目录下所属用户为 root 的相关文件
find /etc/ -user root | more
4.7.2 查找 /etc 目录下权限为 600 的文件
find /etc/ -perm 600 | more
4.7.3 查找文件
(1)精确查询文件名为 init 的文件
find /etc/ -name init | more
(2)模糊查询,查找文件名字以 .config 结尾的所有文件
find /etc/ -name *.config | more
其中 * 是通配符,星号可以匹配任意数量的任意字符。
4.7.4 查找没有用户组的文件
find /etc/ -nogroup -nouser | more
4.7.5 按照文件大小来查询
查找文件大小在 1MB 以上的文件。
find /etc/ -size +1M | more
4.7.6 按照时间来查询
(1)查询两个小时之内被修改的文件。
find /etc -mmin -120 | more
(2)查询两天内被修改过的文件
find /etc -mtime -2 | more
4.7.7 按照文件类型来查找文件
文件类型有以下几种:
a 特殊的块文件
c 字符文件
d 目录
f 普通文件
l 符号连接
(1)查找 /etc 目录下的所有目录
find /etc/ -type d | more
(2)查找 /etc 下名字为 sysconfig 的目录
4.7.8 按照文件时间来查找文件
mtime参数的理解应该如下:
-mtime n 按照文件的更改时间来找文件,n为整数。
n 表示文件更改时间距离为n天
-n 表示文件更改时间距离在n天以内
+n 表示文件更改时间距离在n天以外
例:
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天以外,2天以内(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)以外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)以内的文件
特别说明:-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢? 因为n值只能是大于1的整数,即比1大的最近的整数是2,所以-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)。
(1)查找该目录下10天之前被修改过的文件
find /etc/ -mtime +10 -type f | more
(2)查找 /home/test 目录下 5天内被修改过的所有的和 .bak 有关的目录或文件,并把它们删除
find /home/test/ -mtime -5 -name '*.bak' -exec rm -rf {} \;
如果出现下面的提示:No such file or directory 的话,代表删除成功。
(3)查找 /yyds 目录下7天前大于 1MB 的大文件,并将其删除
find /yyds -mtime +7 -size +1M -exec rm -rf {} \;
- 额外说明:-ok 参数和 -exec 参数都是同一个效果
代码find /yyds -mtime +7 -size +1M -exec rm -rf {} \;
和 代码find /yyds -mtime +7 -size +1M -ok rm -rf {} \;
的执行效果一样。
4.8 grep 搜索命令(常用)
grep 命令常用来在文本文件中搜索内容。
4.8.1 在 passwd 文件中搜索内容
拷贝 passwd 文件到当前目录:cp /etc/passwd .
现在,我们要搜索该文件中包含 root 这个文本的所有行。
grep 'root' passwd
- i 参数:可以将查询结果中的大小写忽略。
例如:grep -i “error” #忽略大小写区分
4.8.2 精确查找日志中某个单词所在行的信息
在日志/var/log/dmesg 中查看关于 “cpu” 的所有信息
grep -w “cpu” /var/log/dmesg
其中:-w 选项默认匹配一个单词,属于精确匹配。
例如我想匹配 “like”, 不加 -w 就会匹配到 “liker”, 加 -w 就不会匹配到
4.8.3 查看日志信息中某个单词出现的次数
grep -w -c ‘cpu’ /var/log/dmesg
可以看到,cpu 这个单词出现了三次。
-c 参数用于显示次数。
4.8.4 列出包含某个单词的文件名
命令格式:grep -l '单词' 文件目录/文件名
该命令只显示包含关键字的文件名。
比如:去 /var/log 目录下的所有以 .log 目录结尾的目录中搜索,显示文件内容包含 .log 的文件名。
grep -l ‘cpu’ /var/log/*.log
如果使用 grep -rl ‘cpu’ /var/ 则是递归查出 /var 目录下所有的包含 log 这个字符串的文件。
4.8.5 显示关键字所在行数
命令格式:grep -n '关键字' 目录
grep -n ‘cpu’ /var/log/dmesg
4.8.6 对查找出的内容高亮显示
命令格式:grep --color 'root' /etc/passwd
4.8.7 查找某个进程,并将其杀死
找到 使用 top 命令的进程,使用 grep -v 过滤掉关于 grep 的进程,使用 cut -c 对字符串进行切割,取 12-15位,然后使用 xargs kill -9 杀死该进程。
ps -ef | grep top | grep -v grep | cut -c 12-15 | xargs kill -9
4.8.8 egrep 命令
egrep 命令 = grep -E
利用这个命令,可以使用正则表达式对文本进行搜索。
4.8.9 fgrep 命令
fgrep 命令 = grep -F
利用该命令,可以使用固定的字符串对文本进行搜索(不支持正则表达式)。