最近在弄Android源码,在旧机器上装了Ubuntu系统,所以顺带学习学习Linux的常用命令。内容会边用边补充。
1、man
man的含义是manual,手册的意思。当不清楚某个命令是怎么使用的时候,可以通过man command来进行查询,command为对应的命令名称,例如man ls。
2、find
find命令用于找寻某个文件或者文件夹。比如
find . -name "*.java"
该命令用于查找当前目录下扩展名为java的所有文件。find后面的点表示当前目录,*为通配符,代表任何名称。
find命令的格式为:find PATH OPTION [-exec COMMAND { } \;]
具体的使用可以通过man来查询。到时候再补充。
3、grep
grep为正则表达式比配命令,给命令用于字符串匹配。比如,要查找“Hello.java”文件中包含“Activity”字符串的所有地方,可以使用以下命令:
grep "Activity" hello.java
grep和find的区别在于,find用于查找目录或者文件,而grep用于查找指定的字符串,并且字符串可以用正则表达式来匹配。
4、xargs
这不是一个命令,是一个标示。代表了上一个命令的结果,并作为下一个命令的参数。Linux命令可以流水线执行,也叫做“多管道执行”,即两个命令用“|”分隔符隔开。
比如,想查找当前目录下文件名中包含“oa”的所有文件:
ls |grep "oa"
"多管道"后面的命令,会把前面命令的输出结果作为后面命令的参数。
find . -name "*.java" | xargs grep "Activity"
查找当前目录下所有包含“Activity”字符串的java文件。
再举个例子,想查找当前目录下子目录名称为res下的所有.xml文件,并且列出这些xml文件中包含“status_bar_size”字符串的地方。注意,本例子的限制条件是,查找的是res目录下的xml文件,而不是所有的xml文件。
find `find . -name res` -name "*xml" | xargs grep status_bar_size
该命令中,find命令进行了嵌套使用,内部find包含在“·”符号之中。这个符号不是单引号,而是键盘上数字键1左边对应的那个符号。内嵌的find命令用于查找名称为res的目录或文件,外部的find命令从得到额这些目录下继续查找xml文件。“多管道”后面的命令用于查找指定的字符串。
5、cat
cat命令用于连接文件内容并在Terminal中输出文件的内容,该命令后面如果只有一个文件名称,则仅输出该文件的内容。cat参数中的文件可以是普通意义上的有存储空间的文件,也可以是Linux系统中的设备文件。比如可以查看当前目录下main.java的文件内容,使用如下命令:
cat main.java
也可以查看设备文件:
sudo cat /dev/disk0
6、chmod
在Linux系统中,文件的访问者被划分为三类,并针对这三类用户指定不同的访问权限。这三类访问者是:
user(u),用户自身,即创建该文件的用户。
group(g),用户所在组,即与创建在一个组里面的用户。
other(o),其他用户。
chmod命令就是用于设置这三类访问者对某文件的访问权限。访问权限分为读(r)权限、写(w)权限、执行(x)权限,文件类型的不同,“执行”的含义不同。可以通过ls -l命令来查看文件的访问权限,Linux系统使用10位(bit)数据表示访问的权限。
bit 0 :使用 - 或者 d 表示,前者表示这个一个文件,后者表示这是一个目录(directory)。
bit 1~3 :用户自身user对该文件的访问权限。
bit 4~6:用户组group对该文件的访问权限。
bit 7~9:其他用户other对该文件的访问权限。
下面来看chmod命令如何修改文件的访问权限。假设有一个角门文件copy.sh,创建改文件时,默认的访问权限不包括执行(x),但要运行改脚本,用户必须拥有对该文件的执行权限,于是使用以下命令为用户添加执行选项。
chmod u+x copy.sh
命令u+x的含义就是给user添加执行(x)的权限,用a表示三类用户,即all。
对于某些Linux系统,比如Android手机底层的Linux,chmod命令不识别r、w、x这样的参数,而只能使用8进制数字来表示,比如
chmod 777 copy.sh
777表示:111 111 111,即分别代表u,g,o三类用户的访问权限。
7、ps,kill
ps用于列出当前运行的所有进程,kill用于杀死某个进程。这两个命令多用于系统调试,比如,可以先用ps列出所有进程,从输出信息中得到每个进程的id值,即pid,然后调用kill -9 pid就可以杀死制定pid的进程。具体可以查看kill的详细。
8、export
该命令用于将某个变量值的作用域设为全局范围。比如,可以将某个路径赋值给系统环境变量PATH,然后在export PATCH,从而,其他所有程序都可以使用该路径。
该命令还有一个巧用。有些公司为了资产管理的需求,往往会给每一台PC机进行编号、命名,比如xxxxcom_yyypart_username,这就导致打开Terminal后提示符之间的字符串太长。此时,可以使用export PS1=me的命令,PS1一般代表了当前的Terminal,等号后面的字符串则任由用户定制,它将代替那串冗长的提示符。