Terminal命令小结

关于Command Line

从入行至今,使用Terminal的次数并不多,现用现查是常态,平时开发中Git也是使用图形界面工具,所以对Terminal非常陌生,直到最近自己搭了一个VPN才真正意识到命令行的便捷,而搭建博客的过程中命令行更是不可缺少的工具。

你可以整天驾驶汽车而不用知道如何修理它们,但是如果你希望当一个维护员,你就需要知道事情是如何运作的。同样的事情也发生在了 Mac OS X 上;你可以一直使用 Mac 而不用知道如何修理它,但是如果你想对系统做一些维护或解决一些问题,那么你需要知道如何使用 command-line。

—— 网摘自Renfei Song's Blog

Mac上很多功能不提供图形界面,只能通过命令行来实现,例如说ssh,Windows下需要使用XShell之类的软件来操作,而*nix系统直接使用终端命令就可以直接链接:

$ ssh username@hostname

通过Terminal可以访问所有目录,包括Finder隐藏的目录,而Finder的隐藏文件功能也只能通过Terminal开关,当然在系统10.12中可以使用Shift+Command+.来快速开启与关闭:

$ defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 
$ defaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder 

Terminal可以做界面图形App能做的绝大多数操作,因为界面图形App背后使用的就是Command Line,例如在你安装Xcode之后,你就可以通过命令行进行编译和打包操作:

$ xcodebuild -workspace YourWorkspaceName -scheme YourSchemeName -configuration Debug archive -archivePath YourArchivePath
$ xcodebuild -exportArchive -archivePath YourArchivePath -exportPath YourExportPath -exportOptionsPlist ./ConfigPlistName.plist

虽然学习Command Line需要一个记忆和熟练的过程,但其强大且广泛的功能带给我们的便利快捷要远大于其学习成本,所以说使用Terminal,学会Command Line是一个程序员必备的素质之一。

关于man命令

Terminal里面成百上千条命令,每一条命令还有其具体的参数方法,谁也不能全都记住,那么怎么办?推荐学习Command Line的人们最先掌握的命令man。通过man CommandName来获取你想知道的命令的使用指南:

$ man xcodebuild

NAME
     xcodebuild -- build Xcode projects and workspaces

SYNOPSIS
     xcodebuild [-project name.xcodeproj]
                [[-target targetname] ... | -alltargets]
                [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [action ...]
                [buildsetting=value ...] [-userdefault=value ...]
...

包括命令的名称、参数意义、使用描述等等,足够你理解使用这个命令了,在浏览期间可以通过Space翻页、来滚动、输入/ SearchKeyword来搜索,使用Q退出页面。如果你不清楚这个命令的名字,可以使用man -K Keyword来搜索,Terminal会询问你搜索的结果是否是你想要的。

关于路径与文件命令

虽然平时使用Finder管理文件已经很方便了,但是某些时候使用Terminal来进行路径和文件的操作也会非常便捷。

路径命令

路径分为绝对路径和相对路径。

绝对路径总是以/开头,例如/Users/xuhaoran/blog

相对路径是根据你的Terminal当前的路径位置有关,Terminal默认路径为Home Folder,就是++H的Folder,相对路径可以使用../来表示上一级路径,使用./表示本级路径,通常可以省略,使用~/则表示你的Home Folder

绝对路径的第一个/代表根目录,而/Users/UserName即是HomeFolder

如何获取绝对路径?有两个方法:1、打开Terminal后,直接拖拽Folder或File进来;2、使用pwd命令:

$ pwd
/Users/xuhaoran/blog

跳转到指定路径使用cd命令:

$ cd DirectoryName

cd -命令可以后退目录:

$ cd ~/Desktop/
$ cd ~/Downloads/
$ cd -
/Users/xuhaoran/Desktop

查看当前路径下的所有Folder和File使用ls命令,值得一提的是使用Tab可以进行匹配输入,注意Terminal大小写敏感。通常情况ls命令是不显示隐藏文件的,可以使用ls -A来显示所有隐藏文件,即.Name形式的文件:

$ ls -A
.CFUserTextEncoding .gitignore_global   .vim
.DS_Store       .hgignore_global    .viminfo

pwdcdls三条命令搭配使用可以完成绝大多数的路径查询跳转工作,至于这三个命令的其他参数可以使用man来自行查询。

而创建与删除路径使用mkdirrmdir两个命令:

$ mkdir DirectoryName
$ rmdir DirectoryName

使用mkdir命令时,如果想创建多层目录的话可以添加参数p

$ mkdir -p dir1/dir2/dir3

文件命令

通过Command Line检视文件,可以使用命令cat将文件内容输出到Terminal中:

$ cat Desktop/
cat: Desktop/: Is a directory
$ cat Hello.text
Hello World!

面对较长的文本直接输出到Terminal中显然并不合理,那么可以使用less命令,在less命令进入文件后按V进入vim编辑器。

如果想查看文件类型信息,特别是在文件扩展名丢失的情况下,可以使用file命令:

$ file unnamed
unnamed: ASCII text

可以使用touch命令创建文件和指定文件扩展名:

$ touch FileName.ExpandedName

创建之后可以直接进入编辑器进行编辑,可以使用vim命令进去vim编辑器或者nano命令进入nano编辑器:

$ vim FileName.ExpandedName

可以使用open命令打开一个文件或者使用Finder打开一个Folder,使用open .命令来打开当前的Folder:

$ open .

对于基本的复制剪切操作可以分别使用cpmv命令:

// 将Test/ 复制/移动到 Workspace/
$ cp Test/ Workspace/
$ mv Test/ Workspace/

关于权限命令

权限

查看当前目录下的文件权限可以使用ls -alh命令:

$ ls -alh
total 8152
/*
    权限        拥有者    群组
*/
-rw-r--r--@  1 xuhaoran  staff   104K 11 22 14:07 430DDC5092226B6C4F062BAEF2242B78.jpg
drwxr-xr-x  10 xuhaoran  staff   320B 11  2 14:05 AlamofireDemo
-rw-r--r--@  1 xuhaoran  staff   956B 10 13  2016 CertificateSigningRequest.certSigningRequest
...

其中权限部分详细的分为d rwx rwx rwx四部分。

第一部分中d表示为Directory,而-则表示File。

后面三部分分别表示“对所有者”、“对同组人”、“对其他人”的权限,r读取权限、w写入权限、x执行权限,-表示无权限。

以其中AlamofireDemo为例,表示为目录、所有者可读可写可执行、同组人可读可执行、其他人可读可执行。

而三部分的权限可使用数字表示,其中r权限为2²,w权限为2¹,x权限为2º,例如:AlamofireDemo目录的全校可以表示为755,而cerSigningRequest文件的权限为644

权限是可以变更的,使用chmod命令:

$ chmod -R 755 AlamofireDemo

这是通常情况下的标准命令,为文件添加rwxr-xr-x权限,-R参数表示改变目录结构下所有子目录文件的权限而并非目录本身。chmod 777 FileName则是非常危险的命令,赋予了其他人与root相同的权限。

chmod还有一种改变权限的形式,使用运算符+(增加)、-(去除)、=(覆盖设定)配合用户类型u(所有者)、g(同组人)、o(其他人)、a(全部):

$ chmod -R g+x AlamofireDemo/

上面这条命令是为AlamofireDemo这个目录的同组人添加执行权限。

同样,拥有者和群组也是可以改变的,使用chown命令:

$ chown UserName:GroupName FileName

root权限

sudo命令的作用在于会用root账户权限来执行后面的命令,通常在执行一条命令提示Permission denied时使用。使用sudo !!再次执行:

$ cat secret.doc
Permission denied
$ sudo !!
Password: *

如果执行多条需要root权限的命令,可以使用sudo -s获取root权限,注意#代替了$表示使用root权限操作,操作结束可以使用Control+D或者输入exit命令来退出环境:

xuhaoran$ sudo -s
Password:
bash-3.2# exit

关于网络通信的命令

ping命令

在网络通信之前,最常用的操作就是ping命令,它会给网络主机发送一个回应请求,进而验证可否进行通信:

$ ping panghu.cf
PING panghu.cf (128.14.32.165): 56 data bytes
64 bytes from 128.14.32.165: icmp_seq=0 ttl=50 time=168.334 ms
64 bytes from 128.14.32.165: icmp_seq=1 ttl=50 time=158.529 ms

可使用Control+C停止发送请求。

ssh命令

ssh是一种远程登录和其他安全服务的协议,远程登录相比较于telnetrlogin两种协议,有其特有的优势,例如加密传输、数据压缩等。

Mac的Terminal自带SSH,使用ssh就可以登录远程服务器:

$ ssh root@panghu.cf
root@panghu.cf's password: *

之后就可以在远程服务器进行一些常规操作或者一些逗逼的命令:

$ wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh

网络通信命令还有很多,这里限于能力就不献丑了。

关于其他系统命令

bash命令是用来执行一段脚本命令的命令,通常可以用来执行本地写好的脚本,例如:

$ bash ssr.sh

who命令可以列出当前登录的所有用户,who am i显而易见是回答“我是谁?”的问题:

$ who
xuhaoran console  Nov 20 17:06 
xuhaoran ttys001  Nov 22 13:52 
xuhaoran ttys002  Nov 23 14:52 
$ who am i
xuhaoran ttys002  Nov 23 14:52 

console是电脑的底层控制台,伴随着电脑开机而启动;ttys(Teletypewriter的缩写)则是Terminal的类型名称,随着Terminal数量增加而增加计数。使用Command+N来新建Terminal。

至于ConsoleTerminalttyShell的关系这里就不叙述了。

使用ps命令来查看进程状态,可以确定哪些进程僵死或过多占用资源等。通常使用ps aux来查看具体进程:

$ ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
xuhaoran           355   3.0  3.0  7056284 249392   ??  S    一05下午  57:40.33 /Applications/WeChat.app/Contents/MacOS/WeChat -psn_0_57358
root                96   0.3  0.1  4346796   8364   ??  Ss   一05下午   3:00.86 /usr/libexec/opendirectoryd
...

PID表示进程的id,%CPU%MEM分别表示进程占用CPU和内存的比重,VSZ表示使用掉的虚拟内存(KB),RSS表示占用的固定内存(KB),TT表示在哪个Terminal上执行,STAT表示该进程目前的状态。

关于STAT的状态码:

状态码 意义
R 正在运行
S 休眠
T 停止
Z 僵死
< 高优先级
N 低优先级
L 锁定
s 存在子进程
+ 后台进程组

查询到进程之后可以使用kill命令用来终止进程:

$ kill -SignalNumber PID

至于SignalNumber可以通过命令kill l获取:

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
 9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGINFO     30) SIGUSR1     31) SIGUSR2 

其中常用的为9(SIGKILL),对付大多数程序可以kill -9 PID直接干掉。

其他常用的系统命令有查看时间的命令date

$ date
2017年11月23日 星期四 16时47分40秒 CST

查看日历的命令cal

$ cal
      十一月 2017        
日 一 二 三 四 五 六  
          1  2  3  4  
 5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30   

cal命令后面可接年份,例如cal 2017,也可以接月份+年份,例如cal 8 2018表示展现2018年8月的日历。

一些小技巧

alias与unalias命令

对于常用的命令可以使用alias为其添加别名,例如:

$ alias del="rm -rf"

删除别名可以使用unalias:

$ unalias del

退出及清屏命令

使用control+C 可以终止持续进行的命令,例如ping命令。

使用control+D或者exit命令可以结束当前状态,例如结束ssh的远程链接。

使用control+L或者clear命令可以清屏,与reset命令不同的是,clear可以滚动查看之前的内容,而reset则是完全清除内容。

光标操作

操作符 作用
control+A 移动光标至行首
control+E 移动光标至行尾
control+U 删除整行命令
control+K 删除光标后面的内容
option+ 按词组移动光标

快速操作

操作符 作用
!! 执行上一条命令
! 重复命令,例如$ ! -3执行前三条命令、$ !pod重复最近一次的pod命令等
| --将左侧命令结果扔给右侧命令,例如$ ps aux | pbcopy将进程信息保存的剪贴板--
> 将左侧命令结果保存进右侧文件,例如$ pbpaste > out.txt将剪贴板内容保存到文件
&& 等待前一条命令执行成功之后执行后面命令,例如$ chmod +x ssr.sh && bash ssr.sh
& 多条命令同时执行,例如$ chmod +x ssr.sh & chmod +x other.sh
; 不管前面命令成功与否都继续执行后面命令,例如$ chmod +x ssr.sh ; cp ssr.sh ~/Desktop/

使用history命令可以查询执行命令的历史记录history PageCnt

$ history 10
  543  kill l
  544  kill -l
  545  date
  546  cal
  547  ssh root@panghu.cf
  548  ls
  549  ping panghu.cf
  550  ftp panghu.cf
  551  yum
  552  ls

小结

连续写了两天时间,期间不断的去查询和完善内容,感觉这个过程又收获了很多知识。

Terminal的强大只有真正融入进去才能感受得到,以上这些都只是本人在工作中遇到的最基本的内容,说成冰山一角毫不为过,所以日后遇到新的内容还会继续进行补充更新。

最后,很多命令下的参数都有不同的用法,当遇到问题了请熟练地使用man命令,希望对您有所帮助。

请关注我的新博客Leo的博客,以后会在上面更新最新的文章,当然简书也会同步上来的~谢谢大家支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 98,526评论 9 468
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 一、为什么要使用命令行? 许多功能在图形界面不提供,只有通过命令行来实现。 Finder 会隐藏许多你不太会需要的...
    小道萧兮阅读 36,870评论 2 31
  • (一)基本命令 命令格式: 命令 参数 1.ls 显示文件名,等同于dos下dir命令 命令格式:ls [opti...
    飞羽孟德阅读 1,809评论 0 3
  • 本文笔记源自这里——[实验楼]欢迎大家在下面交流其中有问题的地方喜欢请点收藏,每日更新(全部已亲自实践). 一. ...
    东皇Amrzs阅读 3,849评论 7 54