前言:整理一些我平时用到的命令,并不会很详细,但是很实用。
目录
1. 查看文件夹结构
用途 | 命令 | 注释 |
---|---|---|
查看文件夹结构(不显示隐藏文件) | tree | 需要安装tree:sudo apt-get install tree |
查看文件夹结构(显示隐藏文件) | tree -a | |
查看文件夹结构(只显示文件夹) | tree -d | |
查看文件夹结构(显示指定文件夹) | tree 目标文件夹 | 例如:tree mydir |
查看一级目录文件结构 | tree -L 1 | 后面加“-a”表示显示所有文件(包括隐藏文件) |
2. 文件管理器命令
● 例:在终端中打开当前路径的文件夹
nautilus .
3. 查看文件夹大小
● 例1:显示当前文件夹大小(如果想列出当前目录下所有子目录,把深度设置为1)
du -h --max-depth=0
● 例2:显示指定路径文件夹或者文件大小
du -sh 指定路径文件夹/文件
● 例3:显示某个文件夹内所有一级目录的大小(不包含隐藏文件、文件夹)
● 例4:查看当前目录下所有隐藏文件及文件夹大小
du -sh .[!.]*
● 例5:du -sh配合sort排序
sun@sun-pc:~/project/AOSP$ du -sh ./* | sort -h
0 ./Android.bp
0 ./bootstrap.bash
0 ./vbmeta.img.info
4.0K ./disregard
4.0K ./Makefile
...
1.9G ./frameworks
26G ./prebuilts
72G ./out
说明:
如果sort不加-h,则会出现4.0k在1.9G下面的情况,因为sort命令在默认情况下是依据第一列字符的ascii码进行排序,显然对du -sh输出的内容无法排序。
sort -h :使用易读性数字(例如: 2K 1G),其实就是在排序的时候也会考虑单位的因素。
4. 文件与文件夹权限
1.权限说明
linux文件系统中,文件或者文件夹有三组rwx权限,下面举例说明:
sun@sun-pc:~$ ls -l
rw-r-xr-x 1 sun sun 0 5月 9 18:20 1.txt
从左往右数,三组权限分别代表:
(1) 该文件所属用户
对该文件的权限,包括可读,可写,不可执行(rw-)
(2) 该文件所属用户组
对该文件的权限,包括可读,不可写,可执行(r-x)
(3) 其他用户
对该文件的权限,包括可读,不可写,可执行(r-x)
2.更改权限
使用命令chmod可以更改文件或文件夹权限,还是以上面的1.txt举例说明:
#为所属用户添加可执行权限
chmod u+x 1.txt
#为所属用户组添加可写权限
chmod g+w 1.txt
#为其他用户添加可写权限
chmod o+w 1.txt
#为所有用户添加写权限
chmod a+w 1.txt
#为所属用户和用户组添加写权限
chmod ug+w 1.txt
#为所属用户和用户组添加读写权限
chmod ug+rw 1.txt
除了上面的几种方法外,还可以直接用数字代表权限。- - -可以看成二进制数000,rwx看成二进制数111。在用chmod加权限的时候,把二进制数转换成八进制即可。需要注意的是,数字是完全代表了所有的权限,并不能单独追加某种权限,所以在更改权限时要注意按照实际需求计算好权限数字,避免将某个不想改的权限给误更改了。
#更改所属用户权限为r-x,用户组权限为--x,其他用户权限为rw-
chmod 516 1.txt
5. 查找文件
例:查找test.txt文件
5.1 locate
sun@sun-pc:~/myProjects$ locate /test.txt #locate只能查找文件名包含test.txt的文件,所以这里加上路径分割符号“/”
/home/sun/Share/frameworks/base/tools/aapt2/integration-tests/App/assets/test.txt
/home/sun/Share/frameworks/base/tools/aapt2/integration-tests/App/assets/subdir/subsubdir/test.txt
/home/sun/Share/frameworks/base/tools/aapt2/integration-tests/App/assets2/test.txt
/home/sun/Share/frameworks/base/tools/aapt2/integration-tests/App/res/raw/test.txt
/home/sun/Share/frameworks/compile/mclinker/unittests/test.txt
/home/sun/test.txt
注:
(1) locate是从系统的信息库中查找某文件,速度较快,区分文件名的大小写。
(2) 如果确定有某文件,但是没有locate没有查到,应该是信息库没有更新导致的,执行下面命令进行更新信息库:
sudo updatedb //一般时间较久,建议空闲时间执行
5.2 find
例1:查找test.txt文件
find -name "test.txt"
例2:查找test.txt文件的时候排除某个目录
使用-path 要排除的目录 -prune -o
,如果要排除多个目录就多写几个这条语句即可
find ./ -path ./out -prune -o -name test.txt //在当前目录下查找test.txt,查找的时候排除当前目录下的out目录
例3:找出A目录中与B目录中文件同名的文件
find A目录路径 -type f | sed 's/.*\///' | xargs -L 1 find -name
上面三个命令通过管道符号连接,分别解释一下:
- find A目录路径 -type f
找出A目录中所有的文件 - sed ‘s/.*///’
消除上个命令输出结果中的路径,只剩下文件名 - xargs -L 1 find -name
-L 1
意思是每次取一行上个命令的处理结果,作为find -name
的参数
例4:限制递归查找的层级
如果例3中,不进行递归子目录查找文件,可以使用-maxdepth
参数进行限制查找目录等级。
-maxdepth 0
代表0级目录,也就是不查找;
-maxdepth 1
代表一级目录,也就是目标路径的根目录;以此类推…
find A目录路径 -maxdepth 1 -type f | sed 's/.*\///' | xargs -L 1 find -maxdepth 1 -name
注:
(1) find命令是直接从磁盘中查找某文件,所以速度较慢。
(2) 有时候find在目录中递归查找某文件时,会出现“No such file or directory”这类的错误。如果不想看见这些错误信息,可以使用标准错误[2]配合重定向符[>]过滤掉错误信息:
find -name "test.txt" 2> /dev/null //把错误信息输入到空设备中,注意2和>之间没有空格
6. 在文件中查找特定内容
● 例1:在camera目录的所有文件中(包含其所有子目录的文件),查找字符串name: “libhidlbase”
grep -r 'name: \"libhidlbase\"' ./camera
● 例2:在当前目录及子目录下后缀名是mk的文件中查找字符串name
grep -r "name" --include="*.mk" ./*
● 例3:列出本目录下所有的一级子目录
ls -l | grep ^'d' //这个筛选原理是根据ls -l列出文件和目录的时候前边有类型符号,d开头的就是目录,-开头代表文件
参数 | 注释 |
---|---|
-r | 递归查找,默认不包括链接文件,除非在命令后面指定链接文件路径 |
-R | 递归查找,包括链接文件 |
-n | 显示行号 |
-l | 排除二进制文件中的查找 |
–include= | 表示在哪些文件中查找,包含多个文件时用{}把文件都括起来。注意这里的写法,是两个横杠后接"include=",并且等号前后不能有空格。(例如: –include={*.c,test.h} ) |
–exclude= | 表示不在哪些文件中查找,用法和–include= 相同 |
注:
1.查找符号的时候需要在符合前面加转义字符\
(例如: \" 代表 ")
2.查找反斜杠\
,需要用三个反斜杠做转义符,如:grep -rn “\\\\”
2.只写-r
而不指定查找范围时,默认查找当前所在目录,所以上面例二中./*
可以不写
7. 文件压缩与解压
7.1 使用7z类型压缩包
压缩
● 例:把1.txt 2.txt 3.txt这三个文件压缩为test.7z文件
7z a test.7z 1.txt 2.txt 3.txt
解压
例:把test.7z文件解压
7z x test.7z
参数 | 注释 |
---|---|
a | 代表添加文件/文件夹到压缩包 |
x | 代表解压缩文件,并且是按原始目录树解压 |
-o | 是指定解压到的目录,-o后是没有空格的,直接接目录 |
7.2 使用tar类型压缩包
压缩:
tar -zcvf test.tar.bz2 1.txt 2.txt
解压:
tar -zxvf test.tar.bz2
参数 | 注释 |
---|---|
-c | 代表创建压缩文件 |
-x | 代表解压缩文件 |
-t | 查看压缩包里面的文件 |
-z | 用 gzip 压缩/解压缩 |
-j | 用 bzip2 压缩/解压缩 |
-v | 显示压缩/解压缩的进度条 |
-f | 使用档名(注意:f后面不要接参数,-zxfv是不对的,要写成-zxvf) |
7.3 使用rar类型压缩包
压缩:
rar a test.rar 1.txt 2.txt
解压:
unrar e test.rar //把压缩包里所有的文件都解压到当前目录
unrar x test.rar //把压缩包正常解压到当前路径
7.4 使用zip类型压缩包
压缩:
zip -r test.zip 1.txt 2.txt
解压:
unzip test.zip
8. 文件系统挂载与卸载
简单说一下什么是挂载,挂载就是指将设备文件和操作系统里的文件夹进行绑定,这样就可以通过访问这个文件夹进行访问设备信息。正常情况下设备连接到操作系统后,操作系统会自动进行挂载,比如我们正常往电脑上插入U盘,系统会自动挂载并出现个磁盘分区,这样我们就可以对U盘进行读写等操作了。而在一些特殊情况下,需要开发人员手动进行挂载和卸载,这时候就需要mount和umount命令了。
挂载命令基本格式:mount [-t vfstype] [-o options] device dir
● 例1:将设备/dev/sdb1
挂载到/mnt
目录下
mount /dev/sdb1 /mnt //这里没有指定vfstype,因为系统会自动匹配合适的文件系统类型
● 例2:将/system
挂载的设备重新挂载并改为可读写的状态
mount -o remount,rw /system //这里使用"-o"指定了两个选项(remount和rw),选项之间用逗号分隔开
● 例3:卸载例1中的/dev/sdb1
umount -v /dev/sdb1 或者 umount -v /mnt //两种方式都可以,-v表示执行时显示详细信息
注:
1.挂载和卸载结果可以通过命令df -ah
进行查看
2.有时因为某进程正在使用该设备,导致该设备不能卸载,此时可以执行下面命令查看占用进程,并使用kill命令杀掉该进程fuser -m /dev/sdb1
9. 标准输入输出
tee:读取标准输入的内容并输出到标准输出和文件
例:在命令行下将内容“deb [trusted=yes] http://10.1.1.4/debian ./”填写到sources.list文件的末尾,并将执行结果重定向到空设备中
echo "deb [trusted=yes] http://10.1.1.4/debian ./" | tee -a /etc/apt/sources.list > /dev/null
注:-a选项代表附加到给定文件,但不要覆盖
10. 查看文件信息
10.1 ls指令
命令 | 含义 |
---|---|
ls | 列出当前目录下所有可见文件及目录清单 |
ls -l | 以列表形式列出当前目录下所有可见文件及目录清单 |
ll | 以列表形式列出当前目录下所有可见文件及目录清单,包含./及…/ |
ls -lt | 以列表形式列出当前目录下所有可见文件及目录清单,按时间降序排序显示 |
ls -lrt | -r代表是逆序,与ls -lt排序相反 |
ls -F | 区分显示,不同类型显示特点不同 普通文件: 白色,无任何特殊符号. 链接文件: 天蓝色,末尾带有@ 文件夹: 蓝色,末尾带有 / 有执行权限的文件: 绿色,末尾带 * |
扩展:
删除本目录下所有的子目录
sun@sun-pc:~/temp$ ls -F | grep /$ | xargs rm -rv
removed directory 'test1/'
removed directory 'test2/'
removed directory 'test3/'
removed directory 'test4/'
10.2 stat指令
11. 输出文件内容到终端上
cat filename #将文件filename的内容输出到终端上
cat filename | grep xxx #筛选包含字符串"xxx"的内容到输出到终端上
cat filename | grep xxx -n #输出包含字符串"xxx"的行数到终端上
cat filename | tail -n 10 #输出的最后10行内容
cat filename | head -n 10 #输出的头10行内容
cat filename | tail -n +10 #输出第10行及以后的内容
cat filename | tail -n +10 | head -n 20 #输出第10~20行内容
12. 文件复制命令cp
大家都熟悉拷贝命令cp,介绍一下特殊用法,如下
● 例1: 将main.mk分别拷贝到a/build/make/core/
和b/build/make/core/
echo a/build/make/core/ b/build/make/core/ | xargs -n 1 cp -v main.mk
注解:
echo
:这里的作用就是将目标目录打印出来,供xargs使用
xargs -n 1
:限制每个命令的参数最大为1个,并将参数传给cp命令
cp -v
:-v的意义就是拷贝的时候显示详细信息
● 例2:将多个文件(1.txt,2.txt)
拷贝到/home/user/temp
cp 1.txt 2.txt /home/user/temp
● 例3:除了1.txt
以外,将当前路径下的所有文件和目录拷贝到/home/user/temp
cp -rf !(1.txt) /home/user/temp
#扩展:上面是排除1.txt一个文件,排除多个文件如下
cp -rf !(1.txt|2.txt) /home/user/temp