简述
随着身边越来越多的小伙伴都用上了苹果电脑用来作为开发环境,大家应该也知道苹果系统(MacOS)其实就是一个类Unix的系统,而Linux也是类Unix系统,两者其实是同源的。故而许多常用的Linux命令都可以很方便的直接运用于MacOS中,以下就是本人总结的一些常用的命令以及他们的使用场景。
1. 常用命令
在介绍具体其他命令之前,先说一个最为重要的 man
,毕竟无论是MacOS还是Linux都有许多命令,不太可能掌握所有命令,而使用man + 任意其他命令就可以查看命令的详细说明以及使用例子,按上下键翻看,看完按q即可退出。
1.1. 目录操作
命令 | 功能描述 | 示例 |
---|---|---|
mkdir | 创建目录 | mkdir dirname |
mvdir | 移动一个目录 | mvdir dir1 dir2 |
rmdir | 删除一个目录 | rmdir dirname |
cd | 改变当前目录 | cd dirname |
pwd | 获取当前目录的路径名 | pwd |
ls | 显示当前目录内容 | ls -la |
dircmp | 比较两个目录内容 | dircmp dir1 dir2 |
1.2. 文件操作
命令 | 功能描述 | 示例 |
---|---|---|
cat | 显示或连接文件 | cat filename |
pg | 分页格式化显示文件内容 | pg filename |
more | 分屏显示文件内容 | more filename |
od | 显示非文本文件的内容 | od -c filename |
cp | 复制文件或目录 | cp file1 file2 |
rm | 删除文件或目录 | rm filename |
mv | 改变文件名或所在的目录 | mv file1 file2 |
ln | 联接文件(软链) | ls -s file1 file2 |
find | 使用匹配表达式查找文件 | find . -name "filename" -print |
file | 显示文件类型 | file filename |
open | 使用默认程序打开文件 | open filename (使用 open . 打开当前目录) |
1.3. 选择操作
命令 | 功能描述 | 示例 |
---|---|---|
tail | 显示文件的最后几行 | tail -10 filename |
awk | 在文件中查找并处理模式 | awk '{print 123}' filename |
diff | 比较并显示两个文件的差异 | diff file1 file2 |
sort | 排序或归并文件 | sort -dfu file1 |
grep | 在文件中按模式查找 | grep "^[0-9]" filename |
sed | 非交互方式流编辑器 | sed 's/111/222/g' filename |
1.4. 安全操作
命令 | 功能描述 | 示例 |
---|---|---|
chmod | 改变文件或目录的权限 | chmod +x filename |
chown | 改变文件或目录的属主 | chown newowner filename |
1.5. 进程操作
命令 | 功能描述 | 示例 |
---|---|---|
kill | 创建目录 | kill -9 31200 |
ps | 移动一个目录 | ps u |
1.6. 网络操作
命令 | 功能描述 | 示例 |
---|---|---|
ping | 创建目录 | ping www.weimob.com |
telnet | 移动一个目录 | telnet www.weimob.com |
1.7. 其他命令
命令 | 功能描述 | 示例 |
---|---|---|
history | 列出最近执行过的几条命令及编号 | history |
whoami | 显示当前正在操作的用户名 | whoami |
2. 命令组合
管道(Pipeline)是一个类Unix系统中非常有用的概念。管道是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直接作为下一个进程的输入。 在类Unix系统使用 |
符号作为管道符,使用方式类似: command1 | command2
。而我们接下来主要讲的命令组合就是基于管道功能实现的。
2.1. 过滤
若您已经习惯了使用命令去辅助开发,那您肯定遇到过类似的场景,对同一个或若干个命令的反复执行,但是中间会插入一些其他的命令,我们都知道在命令行工具中按上键可以显示上一条执行的命令,但若是上三条,或者上十条命令呢?那我们就可以使用history
命令帮助我们查看之前执行过的若干条命令,但是每次执行 history
命令列出的内容都过多,不方便查看,那么就可以使用 grep
执行帮助我们筛选,例如:
history | grep npm
上一条命令就会将执行过并且命令中带有 npm
的全部列出来。同理,grep
可以和许多命令组合从而进行筛选,类似的还有查找文件中的以a开头的内容
cat filename | grep ^a
查找指定进程
ps -ef | grep node
还有许多类似的组合,诸君感兴趣的话可以自行查找和尝试,这里就不一一列出了。
2.2. 批量操作文件
在开发过程中,我们经常会碰到类似的场景,需要对一批文件执行相类似的操作。批量操作中 xargs
是一个很重要的命令,其作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。 可单独使用,也可使用管道符、重定位符等与其他命令配合使用。 xargs的默认动作是echo,默认分隔符为空白字符(空格,TAB,换行符)。
用 xargs
之后我们配合管道符可以完成很多批量操作的功能,例如批量删除同名文件:
find dirname -name filename | xargs rm -rf
当然,执行 rm -rf
的时候请慎重,你肯定不想你的重要资料丢失。
再例如在有的时候我们需要做一些项目的md5识别,那仅仅在最外层文件夹上进行md5计算是不够的,我们可能需要对项目中的每个文件进行一次md5,并且把最后所有文件的md5值汇总起来最后进行一次md5,那么你可以使用下面的命令:
find dirname -type f -exec md5sum {} \\; | cut -d ' ' -f1 | sort -k 2 | md5sum | cut -d ' ' -f1 | xargs echo -n
又再比如你想找到所有jpg文件并压缩,那么可以如此操作:
find dirname -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
3. 小结
虽然标题是写的MacOS系统,但其实本文所表述的命令可以适用于大部分的类Unix系统,Windows则可以通过 Git Bash
执行类似的命令。了解这些命令能够帮助你处理很多重复劳动类型的工作,并且不需要使用任何其他工具,快去尝试一下吧!我们下次再见。