抱怨:linux命令参数好多啊

2012-11-04 12:38:39 +08:00
 zenomac
命令多,参数多,man page看的一不清二不楚

有些即使读明白了 不实践还是不懂。

而且还要学bash编程。。。

门槛很高的感觉啊。大家都是怎么过来的
一点一点积累?


有没有完全python代替bash 而且体验比较好的解决方案呢
6462 次点击
所在节点    Linux
43 条回复
cabbala
2012-11-04 21:14:18 +08:00
@Kymair 不如想想基于json的话下面这条命令怎么实现

cat hostlist | xargs -i ssh {} "ls -al /home/work/abc/abc.log | awk '{print \$5}'" | awk '{sum+=$1}END{print "avg=",sum/NR}'
cabbala
2012-11-04 21:16:26 +08:00
@Kymair 刚刚用的一个log大小统计的命令,我想不出来有什么格式能够比纯文本还要方便。json首先你要定义好各种数据结构,学习成本和复杂度蹭蹭就上去了
Kymair
2012-11-04 21:32:35 +08:00
@cabbala 同学,我虽然年纪不大,但也是5年的SA了,每一天都在终端下泡著,也是Vi和Emacs用户。
Unix哲学确实很经典,所以才能几十年经久不衰,但是如同任何事物一样,并不是完美的。就拿你自己提供的这条命令来说,只要一看到$5, $1这种东西,就知道牵扯到了太多预设。比如你得知道ls的长输出每个column分别代表什么。对于浸淫在其中很多年的人来说,这些自然不是问题。在你考虑学习成本和复杂度的时候,也需要考虑额外的心智负担,回到楼主的迷茫,你就能够看到,其实对于入门者来说,是很困难的。
也许你会说,Unix是设计给专家和hacker来使用的,但是这并不是理由。Lisp, Emacs也是hacker才会用的东西,但是同Unix的IPC“所有的数据流都是无结构字符串,让我们来写parser吧!”不同,我觉得“所有的东西都是list”要更普适强大一些。
cabbala
2012-11-04 21:48:21 +08:00
@Kymair OP握手。
对的,纯文本的特点就是无法标记各个域,一旦ls的输出格式变了,我敢说这个世界上就上万个脚本会失败。。

但是用其他的格式取代纯文本,说倒是很容易了,但做起来却不一样。这个大家都在说,如果拿不出一个可用的demo,那还是算了。。。
cabbala
2012-11-04 21:51:36 +08:00
@Kymair 并不是专家什么的,而是现在无人提出一个可用的可以替代Unix传统文本流的DEMO,甚至想法。

微软的Powershell算是一个尝试,但是效果却。。。
iwege
2012-11-04 22:10:11 +08:00
不管是什么样的操作系统,纯文本的parser都是基石吧?

unix的这套一旦学通了,感觉上迁移性很强,至少其他的系统上能跑。如果全部是list的话,不是还要学习list的特殊语法么?这个其实和parser纯文本没太大区别吧?(感觉就是在纯文本parser上面增加了一层而已)早期大家不支持json格式的时候,还不是自己写了一套parser来做这个事情...使用上还不是要知道各种key代表的什么意思?不然{a:1,b:2,c:3}这种谁知道是什么。
lch21
2012-11-04 23:50:48 +08:00
干什么都得付出点代价
dcoder
2012-11-05 00:26:38 +08:00
json之类的高级list或者dictionary比字节流文本更流行肯定是必然趋势,字节流文本本来就是为了方便子算计下层抽象(文件存储,进程通信,网络通信)统一而制定的,它本身是“反人类”的。字节流文本的输入和输出都需要做人肉parser,有没有json之类的格式,区别就是如果是json类输入输出,你做的人肉parser就更简单,如果没有json类输入输出,你做的人肉parser就复杂 -- 冗长的manual就是给你做人肉parser的格式指导,并且这个指导只是“注释“级别的,比json类格式更加的容易变,容易不靠谱,特别是考虑到*nix不同distribution, 不同shell之间的不兼容,你看的这些冗长的manual信息,随时可能失效!

所以,我想说的是,不要给新人过度吹捧shell.这东西迟早是要被代替的。就肯有没有牛人,或者牛人组织来做这个事情。用shell,只需要理解基本的东西就行了:cd/cp/mv/ssh/ls/find/chmod 等等之类的。当然如果你要做admin,或者定制*nix系统,你得看很多shell,那是另外一回事。

楼主问有Python之类的方案吗?你可以看这本书:
<Python for Unix and Linux System Administration>
http://www.amazon.com/Python-Unix-Linux-System-Administration/dp/0596515820/ref=sr_1_1?ie=UTF8&qid=1352046371&sr=8-1&keywords=python+in+admin
dcoder
2012-11-05 00:30:45 +08:00
‘计算机’3个字打错了,不知道怎么编辑,改在下面:
字节流文本本来就是为了方便 计算机 下层抽象(文件存储,进程通信,网络通信)统一而制定的,它本身是“反人类”的。
cabbala
2012-11-05 10:00:23 +08:00
@dcoder 早在80年代就有人对Unix的文本流管道感到不爽了,要求用其他的格式来替代。

Unix编程艺术这本书更是将其作为Unix最大的缺点之一。

但是30年过去了,还是原来的样子。这里套用Linus的一句话:
Talk is cheap, show me the code.

不要寄希望于所谓的大牛,如果谁来鼓吹有更好的方法可以替代Unix的管道,那么请拿出code或者demo来,否则免谈。。不过就是镜花水月
xtrs
2012-11-05 10:18:44 +08:00
就是一个熟练过程,使用频率高的自然就记住了,不常用的也没必要记,百年不遇需要时临时man一下也就OK了,久而久之就适应了,无他。
freetstar
2012-11-05 11:13:51 +08:00
@cabbala 让我想起了unix 痛恨者和王艮大神的评论
c0878
2012-11-05 11:20:09 +08:00
just fucking google it
dcoder
2012-11-05 11:28:40 +08:00
@cabbala
我说shell编程会被逐步代替的,不是字节流本身这个抽象(字节流应该被隐藏在底层)。

从来没统一过的各种shell + *nix各版本没统一过的环境变量 + 各种没有统一过的cmd工具 == 非常丑陋的古董程序.
我是建议lz如果不是做admin或者*nix系统定制,就别去折磨自己了,会基本的shell+cmd就行。

至于字节流本身,裸用当然是不如高级数据结构(list,dic,map)舒服了,这个是肯定的。像json之类的 {"name":value} 如果写的好,本身就是“注释”和"代码"合一的。但是字节流是传送/存储这种高级数据结构的基础,是会一直存在的。只是上层的数据结构规范统一了以后,程序猿没事是不用自己做人肉parser的。如果有高级数据结构(不恰当的例子,如大家都知道的C++STL里的map之类),当然不用用裸体的字节流了。所以,如果有时试着用Python之类的新脚本语言来做些简单的系统管理任务的话,就避免了用shell+cmd来parse各种复杂输入输出字节流的情况。

不需要等待牛人,lz自己就可以这样灵活地处理。
anyforever
2012-11-05 12:17:49 +08:00
@xtrs 9494,没有必要全记住,你的脑子又不是电脑。知道怎么查,怎么用就行了,现用现查都来得及。
cabbala
2012-11-05 13:30:05 +08:00
@dcoder 恩,用Python或者Ruby来取代shell是不错的选择。

但是Python去做事情有的时候有点隔靴搔痒的感觉,只能说小部分取代,根本上是没办法的。顶多用Python去调shell下的程序,还不是要记那些参数。。。
dcoder
2012-11-05 14:03:34 +08:00
@cabbala
Python的库正经能干挺多事的,很多时候是不用调用各种cmd的。
lz问这个,所以就推荐他多用Python,少用shell了.
skydark
2012-11-05 15:11:11 +08:00
Python 本来不就是打算设计成一个系统(名字忘了,Am开头的)的 shell 么XD
xupefei
2012-11-05 17:29:38 +08:00
@SAGAN 一句话就把一个东西贬得一文不值,这样不太好吧。
求举几个让 PowerShell = 一坨翔的例子。
ADIVILOrz
2012-11-05 23:12:39 +08:00
@xupefei 他言重了,引用re,看看这个PS怎么处理?
cat hostlist | xargs -i ssh {} "ls -al /home/work/abc/abc.log | awk '{print \$5}'" | awk '{sum+=$1}END{print "avg=",sum/NR}'

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/51675

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX