Mac环境下,巧用Linux命令助力开发
发布于 3 年前 作者 juanzeng 4591 次浏览 来自 分享

简述

随着身边越来越多的小伙伴都用上了苹果电脑用来作为开发环境,大家应该也知道苹果系统(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 执行类似的命令。了解这些命令能够帮助你处理很多重复劳动类型的工作,并且不需要使用任何其他工具,快去尝试一下吧!我们下次再见。

回到顶部