共享Unix / Linux的命令行功能和技巧。如果可能,请尝试使其与外壳/发行版无关。有兴趣查看别名,单行代码,键盘快捷键,小型Shell脚本等。
#1 楼
这在此答案中提到的!!
技巧上有所扩展。实际上,有一堆与历史相关的命令往往会被忘记(人们倾向于刺破100次,而不是寻找他们知道自己键入的命令)。history
命令将在左侧显示带有事件指示符的最近运行命令列表!N
将替换与事件指示符关联的命令N
!-N
将替换N
最新命令;例如!-1
将替换最近的命令,!-2
替换第二个命令,以此类推。如另一个答案中所述,
!!
是!-1
的简写,可以快速替换最后一个命令以!string
开头的最新命令string
将替换包含!?string?
的最新命令单词标识符可以是在
string
历史记录命令上添加了修改结果。冒号将事件和单词代号分隔开,例如!
。使用单词指示符时,事件指示符!!:0
可以缩写为!!
,因此!
等同于!!:0
。 > !:0
将获得第一个参数(!:0
将得到第二个,依此类推)。第一个论点。 !:1
将获取最后一个!:2
将获取所有参数(但不是命令)修饰符也可以附加到
!:2-3
历史记录命令中,每个前缀以冒号。可以堆叠任何数字(例如!:^
)。!:$
-排列到基本文件名文件名!:*
-排列到文件扩展名!
-仅文件扩展名> !:t:r:p
-用h
替换所有出现的t
#2 楼
bash-插入前一行的最终参数再按一次以选择较旧的最后一个参数。
很棒,当您想对刚才使用的参数/文件做更多的事情时。
评论
您还可以使用!$引用上一个命令中的最后一个arg。这很有用,因为它既可以在脚本中也可以交互地工作。 (在bash和zsh中工作)
–杰里·H。
2010年8月10日在20:07
每次您按下alt-。它将转到上一个命令并从中拉出最后一个参数。因此,如果您想从三个命令之前获取最后一个参数,只需按alt-。三次。
–clee
10年8月20日在20:09
这是yank-last-arg readline命令的默认键绑定,因此它应与链接到readline的任何程序一起使用,而不仅仅是BASH或ZSH。
–詹姆斯·斯诺格(James Sneeringer)
2011年10月5日下午16:58
在vi模式下,我必须按照以下答案重新绑定yank-last-arg:superuser.com/questions/18498/…
–杰利姆·安格利姆
2011年10月8日13:14
在xterm中,meta-。产生®,但是您可以使用esc代替meta(通常在bash中使用),因此esc-。代替。
–德罗伯特
11年11月11日在22:01
#3 楼
我最喜欢的是man 7 ascii
简单又非常有用。
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL 'q4312078q' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
看看您也可以在Peteris Krumins的博客上查看Peteris Krumins的这四篇文章。
CommandLineFu的十大一线作家解释了
CommandLineFu的下十个单行解释了
另外CommandCommandFu的十个单行了解释了
CommandLineFu的另外十个单行了解释了
评论
单独的ascii程序也很有用。除了打印表格外,它还可以查询一个或多个单个字符。
–马修·弗拉申(Matthew Flaschen)
2010年8月15日下午5:24
#4 楼
以root用户身份执行最后一个命令:sudo !!
#5 楼
不确定这是否算作“技巧”,但是人们似乎并不了解标准的readline热键。在shell中特别有用:Ctrl + U-剪切当前行
Ctrl + Y-用Ctrl + U粘贴剪切的行
评论
只需添加一些内容即可:Ctrl + A转到行的开头,Ctrl + E转到行的末尾,Ctrl-K删除从光标到行的末尾。
–rsuarez
2011年1月24日15:13
Ctrl + L对应于FormFeed ASCII字符。它通常会在带有屏幕窗口(例如vim,less,mc等)的文本应用程序中重绘屏幕。如果屏幕已被另一个程序的某些输出“污染”,那就很好。
–喜剧
2011-3-17在22:13
添加到热键列表中:Ctrl + W可以向后切一个单词,Alt + F可以向前切一个单词,Alt + B可以一行切向一个单词。我喜欢Ctrl + Y和Shift + Insert,因为您可以复制两条线。一个用Ctrl + U(用Ctrl + Y粘贴),同时您可以复制另一个单词(选择该行),用(Shift + Insert)粘贴。
–user14039
2012年2月24日19:26
#6 楼
BASH中的CTRL + R,用于搜索/激活先前执行的命令(〜/ .bash_history的内容)。这通常非常有用。运行此别名将在端口8000上通过HTTP(索引)在PWD上提供服务: ,这些别名可能是我最常用的(严重):我用它将任何种类的内容都复制到我的Linode中,并将生成的HTTP URL复制到我的剪贴板(单击中键)。对于将内容粘贴到IRC中的人非常有用:
alias webserver="python -m SimpleHTTPServer"
只需几个。我可以在以后发布更多内容,必须恢复工作!
评论
alias mk = make键入速度更快,出错的可能性较小。或使用热键从编辑器进行编译...
–拉尔斯·豪格斯
2010年8月13日在5:29
BTW Zsh具有内置的拼写更正功能,非常适合纠正简单的错字。
–亚当·伯特克(Adam Byrtek)
2010-09-15 17:14
同样在zsh中,我认为默认值是当您按下向上键时它会进行历史搜索,就好像您已经按下ctrl r一样。可能不是默认值,但这是一个设置。
–法尔玛里
2010-12-16 18:40
我会考虑使用别名m = make,甚至可以考虑使用m = make -j6或类似的名称-除了我已经使用别名m = mutt☺
– jmtd
2011年5月10日12:54
#7 楼
diff
两个命令的输出而无需手动创建临时文件(bash):diff <(ls dir1) <(ls dir2)
评论
这对于comm也非常有用,因为它仅接收文件,但是在许多情况下,这浪费了inode。
–马辛
2011年5月5日下午14:11
#8 楼
很基本,但人们似乎不知道,它使您返回到上一个目录:cd -
评论
我告诉你,来自DOS的cd ..根深蒂固在我的肌肉记忆中...
–LawrenceC
2011-2-16在5:04
这是推入和弹出的便宜版本...
– Robert Massaioli
2011-2-17在21:30
同样,有cd(无参数)可将您带到主目录。
–美
2012年2月3日在23:57
是的,那太疯狂了。它在手册页的何处显示“-”的扩展名?我一直在尝试(并忘记)使用推/弹出
– Chuck R
2012年2月20日在22:02
#9 楼
括号扩展:括号扩展是一种可以生成任意字符串的机制。它使您可以用较短的实例替换像以下这样的乏味的行:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
其他用途
mv loong/and/complex/file/name{,backup}
算术扩展:
算术扩展允许评估算术表达式和结果替换。算术
扩展的格式为:括号没有特别处理。
表达式中的所有标记都经过参数扩展,字符串
扩展,命令替换和引号删除。算术扩展
可以嵌套。
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
评论
很好,我简直不敢忘记。还有一个更紧凑的foo [123]将扩展为foo1 foo2 foo3,但是在这种情况下,它们必须是文件名才能使用
– Michael Mrozek
2010-09-23 14:31
呵呵..谢谢...每天学习一些东西+1
– Stefan
2010-09-29 20:19
#10 楼
这通常是在我的启动脚本(.bashrc,.profile等)中。shopt
很好,请检查注释:保存击键的方法:mkdir
和cd
放在其中: br /> shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
评论
+1,为什么我没想到呢? (提取)
– MAK
2010-09-19的16:48
我有一个与mkcd类似的功能,只是我将其命名为id md。但是,使用“ $ @”作为cd的参数没有任何意义,因为您不能将cd到一个以上的目录中。 “ $ @”适用于mkdir,但是对于mkdir和cd来说,您处理参数的方式有所不同,因此我建议md(){mkdir -p“ $ 1”; cd“ $ 1”}
–喜剧
2011-3-17在22:20
如何添加这些命令?只是按原样粘贴到.bashrc或在它们之前添加“别名”?
– Asaf
11年11月18日在19:34
#11 楼
两种bash功能可以节省很多按键。每成功执行一次cd后,就会自动执行一次ls: br />
function cd {
builtin cd "$@" && ls
}
评论
我从未意识到您可以使用内置的foo来解决定义cd的功能;我一直在函数中使用chdir。便利
– Michael Mrozek
2010年8月11日下午13:39
太棒了只需在cd函数中将-F添加到ls,就完美了(对我而言)!
–frabjous
2010年8月22日在2:49
我对cd的处理与您相同,但是我进行了更多的健全性检查,避免在非交互模式下执行ls:cd(){内置cd-“ $ @” && {[“” $ PS1“ =”“ ] || ls -hrt --color; }; }
– jmtd
2011年5月10日下午14:27
#12 楼
由于我通常想搜索之前进入命令行(bash中的CTRL-R),因此我在.bashrc中有以下内容。bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
我输入cd,然后按向上/向下按钮,我可以看到所有cd输入的选项。基本上,我将其用于常用的目录。就像“ cd w”一样,我最终要遍历所有我经常使用的工作空间。
评论
这个真的很棒!它扩展了箭头的行为,而没有破坏其基本功能。谢谢!
– philfr
2011-3-16在8:41
#13 楼
节省大量时间的一件事是push / popd命令。这些家伙使您可以创建目录堆栈并减少大量键入操作:/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
评论
是!别名u = pushd;别名o = popd
–灵长类动物罐头
2010年8月15日9:57
..你在这里代表什么?
– deizel
2010年8月19日,11:32
@deizel:没什么特别的,只是避免键入的快捷方式。
–亚当·伯特克(Adam Byrtek)
2010-09-15 17:15
看起来像命令的第二个字母,因为它们都以p开头,所以不能同时使用它们。
– camh
2010-09-16 10:20
在ZSH中,您可以设置setopt autopushd,所有目录更改将自动推送
– Michael Mrozek
2010-09-23 14:34
#14 楼
screen
命令。基本上,它保存了您回来时的命令行会话。它有点像一个终端管理器,就像一个窗口管理器。这样,在单个终端会话中,您可以拥有多个虚拟终端。非常酷如果使用
screen
,则此shell函数(将其放入.bashrc
中)非常有用:如果您的主要会话存在并将附加到它。否则它将创建它。 评论
从技术上讲,它是自己的程序,而不是“命令”。
–mike3996
2011年3月15日上午11:00
我建议在屏幕上使用tmux或dvtm。它们是更现代,更清洁的替代品。
– deltaray
2011-11-20 3:59
是的,“ tmux”无疑比屏幕好得多。
– ColinM
2012年3月2日在21:38
它也更严格地遵循直觉,缩写名称的unix约定:)
–user394
2012年3月5日15:00
#15 楼
如果需要在bash中编辑特别长的命令行,请在编辑器($ EDITOR)中将其打开。您可以通过将其添加到.zshrc中来获得相同的行为:
^X^E (Ctrl-X Ctrl-E)
评论
哇,那本书进了。
–l0b0
2011年6月20日13:29
是的,进入我的笔记!
– jyz
2011年7月1日在0:28
#16 楼
如果您是快速打字员,这些将派上用场:alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
此宏可帮助您计算一列输出的总数:文件大小,字节,数据包,所有要做的就是指定要添加的列:
total ()
{
if [ x = x ]; then set `echo 1`; fi
awk "{total += $} END {print total}"
}
例如使用这种方式,不带任何参数,它将第一列的总数相加:
du | total
如果提供该参数,它将对该列求和,例如,这将为您提供/ tmp中所有C#文件使用的字节总数:
ls -l /tmp/*cs | total 5
有时由于不小心查看了二进制文件(例如,cat / bin / ls)而使控制台混乱,您可以使用此shell函数恢复终端:
restaura ()
{
perl -e 'print "\e)B";'
}
我喜欢我的ls使用字符来区分文件的类,并且还隐藏由编辑器生成的备份文件(备份文件以〜结尾)字符):
alias ls='ls -FB'
评论
不要忘记:alias gerp ='grep --color = tty'我一直都这样做;-)
–罗伯特·斯威舍(Robert Swisher)
2010年8月24日在22:19
就我而言,如果我不准确,“快速”就不算在内。您可能还需要查看GREP_COLORS和GREP_OPTIONS变量。
–安迪·莱斯特(Andy Lester)
2010-10-8 22:58
s /快速/草率/
–乔什
2010年12月14日16:00
我在使用restaura的地方使用了reset。
– jmtd
2011年5月10日13:04
#17 楼
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
我忘记了我的最爱之一
s
:$ s !! # last command with super user priviledges
评论
如果使用ZSH,则可以执行诸如bindkey -s'\ e [12〜'“ sudo !! \ n”之类的操作来绑定(在这种情况下)F2以运行该命令。我具有该绑定,因此当我运行某些命令并看到“您忘记了'sudo',傻瓜”错误消息时,我可以烦恼地刺入F2
– Michael Mrozek
2010年8月10日19:50
F2键差....)
–Eimantas
2010年8月10日19:55
我经常用这个。我经常忘记在编辑主机文件之前输入sudo。如果发生这种情况,我只需运行sudo !!。 +1
–布莱恩·威金顿
2011年1月13日22:16
#18 楼
如果命令接受标准输入,则可以使用<filename
从文件中读取输入。它可以出现在命令的任何位置,因此这些行是等效的:cat filename
cat <filename
<filename cat
这对于grep尤其有用,因为它允许您将表达式放在该行,因此您可以通过单击Up来快速修改它的grep命令,而无需向左滚动以跳过文件名:
评论
一个很好的提示!值得一提的是,这实际上并没有将命令的参数重新排序。而是将文件通过管道传输到进程的STDIN中,因为grep现在没有文件参数,它默认为从STDIN读取。理解这一点将为将这种技术与其他命令结合使用提供许多机会,并且还可以帮助人们了解在事情无法按预期进行时的情况。有关更多信息,请查找管道和重定向器:dsj.net/compedge/shellbasics1.html
–寒颤
2010年8月10日在20:23
@chill好点;提示实际上措辞很差,以至于本质上是错误的。我根据您的评论重写了它
– Michael Mrozek
2010年8月10日20:34
我最近发现的一些信息:您可以将输入重定向到循环(for,while等)。参见faqs.org/docs/abs/HTML/redircb.html。
–卢卡斯·琼斯(Lucas Jones)
2010年8月11日上午10:41
通常,将重定向放在最后。使用 output,如果您尝试在某些shell循环原语(如while或for中间)中进行混合,则此输出将不起作用。所以我放弃了,只是按照惯例将其放在最后。
– jmtd
2011年5月10日13:07
@jmtd好了,将其放在最后可以消除“这对于grep尤其有用,因为它允许您将表达式放在行的末尾,因此您可以通过单击Up来快速修改它的grep命令,而无需滚动离开文件名”
– Michael Mrozek
2011年5月10日13:42
#19 楼
您可以使用CDPATH
来设置等效于PATH
的目录;如果尝试cd foo
并且当前目录中没有foo
,则外壳程序将检查CDPATH
中的每个目录,以在其中查找foo
,然后切换到找到的第一个目录:export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
评论
这可能会导致问题。请参阅softpanorama.org/Scripting/Shellorama/cdpath.shtml“如果设置了$ CDPATH,则cd内置将不会隐式地将当前目录附加到该目录。这意味着如果无法从任何目录构造有效目录名,则cd将失败。即使在当前目录中存在与$ cdPATH条目相同的目录,即使该目录的名称与作为cd参数的名称相同。我为此感到痛苦,一些Makefile停止工作了。追加中。虽然显然可能有所帮助,但是与此同时也存在一些问题。
–ustun
2010年8月19日在9:22
#20 楼
vi `which scriptname`
当您不知道某物在哪里居住时,您也不在乎。
评论
我并不是要继续插入ZSH功能,而是在其他人回答:)时一直在思考它们。在ZSH中,您可以执行= foo来自动调用它,因此vi = scriptname
– Michael Mrozek
2010年8月10日在19:58
如果您在查找反引号字符时遇到问题,也可以使用$(scriptname)
–帕特里克(Patrick)
2010-10-16 8:20
#21 楼
&符。它会将您的命令置于后台,因此您可以继续输入。您的过程已完成!非常适合不需要等待它们终止的事情。
评论
而且,如果您的应用程序是GUI,则可能不希望它继续存在。附加&!为工作提供背景并从外壳中将其删除!
–mike3996
2011-3-15在11:01
@progo:在bash中这对我不起作用。
–内森·奥斯曼(Nathan Osman)
2011年5月6日在2:07
@乔治。看来你是对的。我确实了解到zsh支持它,后来听说bash也支持它。天啊 :(
–mike3996
2011年5月6日下午4:28
@progo:事实证明,在命令前面加上nohup即可完成此操作。
–内森·奥斯曼(Nathan Osman)
2011年5月6日下午6:37
#22 楼
制表符完成。如果必须输入每条路径的所有字符,效果会很糟吗?评论
有自杀的Linux。如果您输入的命令不正确-rm -fr /。是的,制表符完成非常重要...
–Eimantas
2010年8月21日在4:58
并不像您想的那样糟糕(但仍然很糟糕),您只是在各处撒了通配符:ls / usr / lib / game-d * / rott *
– jmtd
2011年5月10日13:08
@Eimantas在大多数Linux系统中不是rm -rf /禁用吗?
– Bernhard Heijstek
2011年7月9日在7:02
@phycker-我提到Suicide Linux,不是“全部”。
–Eimantas
2011年7月10日在14:25
#23 楼
卸载上次安装的设备:mount /media/whatever
...
u!mo
!mo
扩展到以mo
开头的最后一个命令(至少在bash中)。有时一个在中间执行
mv
,因此u!m
将无法正常工作。评论
为了安全起见,请使用Ctrl + Shift + 6(Ctrl + ^)展开命令而不运行该命令
– ColinM
2012年3月2日21:48
#24 楼
我在我的.bashrc中有此内容。#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
并想找到我使用的所有链接
function find-all() {
python -c "import re
import sys
for i in re.findall('', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
剪贴板中有所有网址
我也有此功能
c-v | find-all 'href="([^"]*)"' | c-c
,显示大小(人类可读)和文件名。 br />
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
使用此函数,我可以计算乘积或参数和。通过正则表达式输入,然后加入结果。 DNS
我也有三种颜色功能
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
function separate() {
python -c "import sys,re; print ''.join(re.split('\s*', sys.stdin.read().strip()))";
}
此函数验证文件md5哈希。
这将显示给定代码的错误消息
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print ''.join(re.split('', sys.stdin.read().strip()))";
}
您可以使用
function factorial() {
seq -s* | bc
}
打印所有消息
#25 楼
ZSH的另一个有用技巧:将命令的输出作为文件处理:emacs =(hg cat -r 100 somefile)
这将打开旧版本的Mercurial跟踪emacs中的文件以进行语法突出显示。否则,我将不得不弄乱
hg revert
,hg archive
或将hg cat
的输出显式发送到一个临时文件。标准输出。评论
您可以使用<()在bash中执行此操作
–ScaryAardvark
2010年8月11日,9:45
#26 楼
ZSH特有的功能是后缀别名,可通过给alias
标志-s
标志来设置:直接扩展,ZSH将启动给定程序并将文件名作为参数传递。因此,如果上述别名有效,则这些行是等效的:alias -s ext=program
评论
这是我在Windows上真正想念的一件事……直到我意识到“程序”始终是emacs,所以我停止使用shell打开文件,而只是使用C-x C-f(duh)。
– Harpo
2011-2-16在4:11
#27 楼
我一直以来最喜欢的ZSH功能之一是命名目录。您可以导出具有给定名称的变量,并且该变量的值指向特定路径:export foo=/usr/bin
评论
如果您的提示显示了当前的工作目录,据我所记得,变量的名称也将在此处使用。
–安德烈·霍尔兹纳(Andre Holzner)
2011年6月18日下午16:34
#28 楼
看到这个问题。当您运行
ps ax | grep string
时:[steve@sage-arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
包含
grep
的最后一行有点烦人您可以通过运行
ps ax | grep '[s]tring'
摆脱自己:[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
更新:或只运行
pgrep string
评论
是的,非常有用您应该引用openbox('[o] penbox')。方括号将像glob一样起作用,因此,如果目录中存在openbox(例如,您在/ usr / bin中),bash将仅使用openbox,这将防止grep欺骗。
– Rich Homolka
2010-10-21 19:58
#29 楼
不执行命令
:
,如while :; do :; done
括号扩展与for循环结合使用:
for c in {1..3}; do :; done
!
操作员和短路操作员||
和&&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
使用子壳代替pop / push的功能(在脚本中非常有用)
也非常好:这里字符串
~$ ( cd /tmp; echo $PWD )
/tmp
~$
和我的最爱:重定向命令列表
~$ type type
type is a shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
#30 楼
我喜欢把尽可能多的东西塞进我的PS1中。需要记住一些有用的事情:\e[s
和\e[u
分别保存和取消保存光标位置。我用它在屏幕顶部创建了一个“信息栏”,该栏长了几行,可以容纳更多东西。示例:PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]$ '
与
alias clear='echo -e "\e[2J\n"'
结合。试试吧!PROMPT_COMMAND
变量还定义了一条每次在PS1之前执行的命令。另一个是
bg
命令。如果忘记将&
放在命令末尾,只需按^ Z并键入bg
,它就会在后台运行。评论
感谢bg,当我有一个程序在后台运行并且不小心按fg时,我不知道如何将其推回:D
– phunehehe
2010年8月11日在7:15
我喜欢干净的PS1,所以我将大部分想要的东西放到了屏幕的底线...
–乔什
2010-12-14 16:16
评论
而且,如果您使用的是Bash(某些其他Shell可能相同),则M- ^(Meta- ^)会为您扩展上述历史扩展运算符,以防万一您想看看您实际引用的内容至。
–埃里克·史密斯(Eric Smith)
2010-09-16 14:41
我从来没有发现过!命令的东西。对我来说,运行一个我没有看到的命令似乎很糟糕。键入!-3而不是!-4很容易,谁知道会发生什么。找到我要运行的命令的行号通常比其价值更大。虽然很酷的技巧,但我从来没有发现它们真正的用处。
–法尔玛里
2010-12-16 18:37
@Falmarri我也从不使用!-#。我确实使用!string来运行以string开头的最后一个命令,但是通常我会先使用Tab键完成它(zsh),以确保运行正确的东西
– Michael Mrozek
2010-12-16 18:42
没有! :)“正在运行!N将运行命令...”的描述太狭窄了;实际上,!N将由命令...代替。对于答案中的所有说明,依此类推。更正确,打开更多有用的可能性!例如,提到的sudo !!。
– imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)
2011-3-16在1:34
要运行由字符串查找的先前命令,通常只需按Ctrl-R。多个Ctrl-R将更深入地了解历史。这样,我立即看到了找到的命令,可以将其丢弃并进一步查看。 Ctrl-G退出此模式。唯一的不便是Ctrl-R用于bash。在Emacs中,要浏览输入命令和值(用于M-x或其他读取值)的历史,请改用Meta-R(在Emacs中的eshell中也使用Meta-R)。所以我经常把它们弄乱。
– imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)
2011-3-16在1:45