V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
shawndev
V2EX  ›  iDev

维护了一个记录开发心得的公众号,请各位斧正。

  •  
  •   shawndev · 2019-04-09 16:41:35 +08:00 · 5572 次点击
    这是一个创建于 2046 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近都在更新,主要涉及 iOS, Python 和 golang,欢迎关注 晨晓(chenxiaopost)

    由于先在微信后台编辑的文章,转换 markdown 太麻烦了。。上面是完整内容的截图,下面是排版混乱的文本。

    在前文中,我分享了自己收集的一些便于使用的命令行命令,由于行文仓促没有进行必要的交代和拓展,本文会补全这些信息同时新增一些使用的命令行介绍。

    为什么使用命令行?《乔布斯传》中有介绍,乔布斯在参观了施乐( Xerox )之后,对其简洁优雅的用户图形界面 (Graphic User Interface, 简称 GUI) 感到震撼,后续凭借用户图形界面在个人电脑领域做出了不小的成就。可以说,用户图形界面变革了操作电脑必须掌握命令行的局面,将个人电脑走进千家万户铺就了路基。

    尽管如此,命令行操作仍然有着很多用户图形界面无可比拟的优势。

    1. 用户图形界面难以做到精准操控,点击某个页面左上角第一个像素可以作为一个例子加以印证。

    2. 由于第一条的缘故,用户图形界面不便于将操作自动化,尤其在面对大小各异的屏幕分辨率时。

    3. 用户图形界面是对某些核心操作优化体验之后的封装,省略了细节,灵活性不够。

    4. 系统内置的用户图形界面的应用程序数量有限,而新安装应用程序需要下载时间和硬盘空间,在切换使用环境时不便。

    5. 程序出现无法响应时命令行有时能作为补救措施。

    在学习命令行之前,你可能需要区分 Terminal, Console, TTY, Shell 的概念,可以移步 https://www.zhihu.com/question/21711307 进行访问。简单的说,Shell 就是命令行程序解释器,最常见的有 Bash 和 Zsh 等,我推荐大家使用 Oh-My-Zsh 搭配 Zsh 使用。

    由于第一台电脑诞生于上世纪的美国大学校园,故而很多命令会隐含英语缩写,下文会适当标明一些缩写方便记忆。

    (1)便于理解其他命令的命令

    • 查找相关命令
    • 如: 查询如何访问某个命令的手册, 输入 whatis manual, 返回
    • ...
    • man(1) - format and display the on-line manual pages
    • ...

    whatis COMMAND

    • 查询某个命令的使用手册, 即如何使用
    • man 是 manual(手册)的缩写

    man COMMAND COMMAND --help

    • 查找某个命令的位置

    which COMMAND whereis COMMAND

    • 清除当前 Shell 显示内容
    • 也可以使用 Control + l
    • Control + u 清除当前光标到本行开始的内容
    • Control + k 清除当前光标到本行结尾的内容

    clear

    • 退出当前进程
    • 也可以使用 Control + d
    • 连接远程主机时为退出登录, 断开连接

    exit

    (2)文件操作命令

    Unix 系统有一条知名的信条「一切皆文件」,无论是硬件外设,网络端口都被当作文件,每个文件有自己的 URI,通常以 / 开头的是基于系统根目录的绝对路径,以 ~/ 开头的是基于用户家目录的绝对路径,以 ./ 和 ../ 开头的是基于当前目录或上级目录的相对路径。

    • 列举目录, list 的缩写, 省略目录则列举当前目录

    ls [DIRECTORY]

    • 切换目录, Change Directory 的首字母缩写

    cd DIRECTORY

    • 显示当前工作目录, Pathname of current Working Directory 的首字母缩写

    pwd

    • 复制, copy 的缩写

    cp SOURCE TARGET

    • 移动, move 的缩写

    mv SOURCE TARGET

    • 删除, remove 的缩写

    rm DIRECTORY

    • 创建目录, Make Directory 隔三差五的缩写

    mkdir DIRECTORY

    • 创建文件

    touch FILENAME

    • 在 Finder 中打开目录, 如果目录是一个文件则使用默认打开方式打开

    open DIRECTORY

    • 使用文本编辑器打开文件

    open -e FILENAME

    • 使用指定应用打开文件

    open -a APPLICATION FILENAME

    • 修改目录标记, Change Flags 的缩写, 如是否隐藏等

    chflags DIRECTORY

    • 修改目录执行权限, Change File Mode 的缩写
    • 三位数字分别表示当前用户,当前用户组,其他用户组的权限
    • 4/r 表示可读, 2/w 表示可写, 1/x 表示可执行
    • u:目录或者文件的当前的用户
    • g:目录或者文件的当前的群组
    • o:除了目录或者文件的当前用户或群组之外的用户或者群组
    • a:所有的用户及群组

    chmod 755 DIRECTORY

    chmod a+x DIRECTORY

    • 修改目录拥有者和群组, Change File Owner 的缩写

    chown GROUP:USER DIRECTORY

    11 条回复    2019-04-09 21:23:01 +08:00
    superarm
        1
    superarm  
       2019-04-09 17:07:01 +08:00
    Cool,加油
    lynntsuiplu
        2
    lynntsuiplu  
       2019-04-09 17:15:42 +08:00
    想了些,应该是关注不看系列(那还是先关注吧
    azh7138m
        3
    azh7138m  
       2019-04-09 17:18:56 +08:00 via Android
    cli 还是 gui 都行的吧。。。
    罗列基础也算是心得吗。。。
    shawndev
        4
    shawndev  
    OP
       2019-04-09 21:03:22 +08:00
    @azh7138m
    抱歉刚下班看到您的回复,针对你的问题展开回复一下。

    第一,关于「 cli 还是 gui 都行的吧。。。」,我解读为通常 cli 可以做的事情 gui 都可以做。
    首先,相当一部分操作 gui 无法像 cli 一样轻易的完成,比如 1 )当可用磁盘空间小于 20g 时清理 xcode 产生的 archive 目录,光是 archive 目录的具体 uri 大部分开发者都没办法轻易记住 2 )数清楚某个工程目录下一共有多少 ios 源代码文件,包含.h 和.m。
    其次,bash 脚本更容易自动化这个言论我相信是站得住脚的,即使退而求其次选择 applescript 也难以完成多种 bash 命令组合的功能。

    第二,关于「罗列基础也算是心得吗。。。」
    首先,上面粘贴的图片确实主要是罗列基础,在文章第一句也说了,因为这个系列文章的第一篇讲述的是一些现成的命令,例如如何实现免密登录远程主机和别名登录远程主机,而 bash 对于很多小白其实是个黑盒,前文提到的 echo 到文件我考虑到可能有人不理解其功能,所以在第二篇补充了简要说明。
    其次,我不是简单的罗列了命令,如果只是想罗列命令,将 PATH 变量下各个目录 ls 一下然后拼接起来会比现在更全,再不济各个命令的 man 页面也有相关命令,可是这些 man 页面很多是 linux 下的命令,mac 下无法使用。而且我针对这些命令做了分组,简要说明了命令的来源,方便记忆。
    最后,其实这些命令有很多更详细的参数没有列举,我相信告诉有了 whatis 和 man 两个命令,加上后面命令分类,需要时再去查询要好过死记硬背。

    谢谢,希望您可以关注我的公众号,不断反馈帮助我做的更好。后续我会针对 git,openssl,ffmpeg,以及开发相关的一系列命令,如 make,ld,lipo,otool 等做更细致更有针对性的总结。
    @azh7138m
    shawndev
        5
    shawndev  
    OP
       2019-04-09 21:04:00 +08:00
    @superarm 感谢支持,希望能收到您的反馈~
    shawndev
        6
    shawndev  
    OP
       2019-04-09 21:04:53 +08:00
    @lynntsuiplu 哈哈,多看,多练,总能有所收获的。后面也会分享我近五年开发感到受益匪浅的网络资料。
    shawndev
        7
    shawndev  
    OP
       2019-04-09 21:06:35 +08:00
    @azh7138m 您可以查看我这个系列的第一篇博文,如果没有基础的铺垫,不知道环境变量,就很难理解 IFS 是什么含义,以及为什么需要修改 IFS,又如何通过修改 IFS 获取所有网络连接的 dns 连接方式。
    metrxqin
        8
    metrxqin  
       2019-04-09 21:11:25 +08:00
    汪汪汪 (增加此文噪音)
    eret9616
        9
    eret9616  
       2019-04-09 21:13:44 +08:00
    汪汪汪 (增加此文噪音)
    azh7138m
        10
    azh7138m  
       2019-04-09 21:18:19 +08:00 via Android
    那写个 shell 入门好了(
    其实如果看一个命令的常见用法可以去 tldr.jsx
    我只是觉得叫做心得 和 实际内容的预期偏差比较大
    shawndev
        11
    shawndev  
    OP
       2019-04-09 21:23:01 +08:00
    @azh7138m 感谢你的回复,我目前在用的是 devhints.io ,应该和你说的网址功能类似,现在你说的工具也纳入我的工具箱了。基于你的反馈我准备针对之前使用的一些稍微复杂的命令说一下问题产生的背景,bash 的解决方案,以及每一行的作用。毕竟心得是很务虚的东西,总结成切实可行的知识方便自己回顾,也方便其他不同程度的人查漏补缺。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.