命令多,参数多,man page看的一不清二不楚
有些即使读明白了 不实践还是不懂。
而且还要学bash编程。。。
门槛很高的感觉啊。大家都是怎么过来的
一点一点积累?
有没有完全python代替bash 而且体验比较好的解决方案呢
恩,据unix编程艺术说,unix系统设计的对象就是程序员,众所周知,这个群体对复杂度的容忍是出奇的高。。。
不是程序员也用不了那么多的命令和参数,就算是程序员,也不见得必须用多少命令和参数。
1. 不是每个命令都需要所有参数.
2. 很多 man page 底部都有 example.
3. 通常需要的功能可以通过 google 得出对应的命令参数.
4. 多看, 多利用 man page 的搜索功能查找自己需要的信息.
很喜欢 shell 下面的操作感, 因为一切需求都可以通过命令解决.
推荐
1. 跟着鸟哥学 linux, 这本书讲得很基础.
2. 用最小安装盘装一遍 Gentoo(Arch 也可以). 对于刚开始用 linux的同学, 其中可以学到很多东西.
其实你仔细想一想,参数是最简单的解决方案
一个程序如果需要添加功能,参数是最快的,如果是图形化,还得设计相应的UI、UE,最终也会变得非常复杂。如果不添加功能,那就需要为新功能重写一个程序,而这个程序很多功能是相似的,参数虽然简单了,但是你不得不面对一大堆程序。
是啊。。。觉得这个时代man page这种东西应该改良一下啊。
有道理。 还是现用现学。
嗯,你说的都在做。 只是觉得这一套下来 学习成本有点高。 为什么不能降低复杂度,整体体验更好一些。类unix系统这方面对新手的友好度实在是不敢恭维。2012了都。
因为用的人需要这么多设置. 用 linux 就是为了能够针对自己定制各种东西.
据说windows server 2012 带了2000多个cmdlet——什么东西搞深了都不简单啊
按照微软的吐糟,bash所以复杂是因为它都是面向字符设计的,没有利用这个时代OOP的特性。说到底linux确实应该有longhorn式的跨越了。
是挺复杂的,慢慢来吧。
刚看见一篇文章 简洁的bash编程技巧
http://kodango.me/simple-bash-programming-skills
看了,不错,感觉中文的bash方面的资料不够多啊,我在ubuntu软件源里有找到 bash高级教程呢。
bash不是重点吧...
重点应该是grep,sed,awk等等一系列牛逼工具的使用,而且要在实际应用中去活学活用,用得多了,这些工具就像水一样自然的从你手里流出来了.
shell编程真的是其次的东西.
推荐你去cu的shell版多泡泡...
http://bbs.chinaunix.net/forum-24-1.html
当需要某个功能但没有那个参数什么的才是真·坑爹无双(
用多了就熟悉了. 完整的工具链和命令行环境是Linux最好的地方之一. 对比起来Windows的那个PowerShell就跟屎一样.
论体验论友好,你完全忽视了shell这玩意都是纯文本,搜索、共享、更改都很方便。比起动不动就要看配图,没有配图你都不知道对方在说什么的UI工具而言,这不是已经非常了得了么。
新手根本就不需要知道其他七七八八的东西,拿来命令行,run。一切都解决了,如果他要学习,自己可以分析这个脚本的设计思路,做代码分析等等等等。如果他想将这个脚本部分加入到自己的脚本上来说,也是ok的。
UI 层的确是给某些UI向的新手很大的便利,但是在能改动的层面上,文本才是王道,尤其是UI层无法穷举shell 无尽的组合。但是如果只是普通的 game launcher 这种简单配置,UI层来做是没问题的。
参数多是为了方便各种人的需求的,对特定人来说一般需要的部分会少很多,用多了自然就能记住自己最常用的那几个了。剩下的记不住就记不住吧。
哈哈 感谢推荐
@zenomac
我个人认为,学习shell有几个条件:
1)你要经常与Linux打交道,最好是命令行。
2)你要对学习有兴趣,你掌握一个命令会很开心,你遇到一个问题会思考着去解决(即使不懂)。
3)你要有主动性,遇到问题不要在论坛上丢下然后就等着,这样永远也解决不了问题。毕竟技术论坛的人气向来不高,回答的滞后性很大。你要学者自己去google搜索,或者像国外的stackoverflow/superuser等纯技术问答社区去找答案。
至于man手册很长,枯燥不易懂,没关系,我看没几个人会去通读整篇手册把。手册是遇到问题查阅用的,本身就不是一篇教程让人学习通读的。
还有命令行参数多的问题,我觉得把功能强的参数肯定多,因为功能多少和参数个数其实是成正比的,但是你可能用到全部参数吗?肯定不会的,你只会用其中的几个(3、4、5个左右),所以不要试图全部掌握,一步一步来,用到得时候再说。
就那grep做例子把,参数也挺多,但是可能你一个参数都不需要,等你哪一天用grep的时候有了忽略大小写的需求是,你在去查grep的help,这是你会发现有一个-i的参数,你也用得到;又到一天,你突然发现你grep的时候想显示在文件的哪一行,这时候你又发现了-n参数。。
等你用久了,你会发现grep比较有用的参数,就有个积累了。
ls命令也一样,最长用的就几个,比如-l/-h/-a,其他的用到时候再说哈哈。
当然也有那种参数很少的,这种命令往往是功能单一比较小巧的命定,比如一些内置命令、head/tail等等。
补充一句,chinaunix是个好论坛,虽然人不多(?我个人感觉),但是资料很丰富,老一辈们沉淀下来的技术文档很赞。
其实没那么难。命令参数虽多,常用的就不多,就十多条。请参考我写的短文:linux的六个管理。
http://chenge.diandian.com/post/2012-10-19/40039721456
没有捷径,就是日积月累。shell的基本使用目前看还是必须学的。
+1
一般情况下,只要记得几个简单的就够了,然后学会怎么查阅文档。
我觉得学习shell最重要的还是得弄清楚shell的管道和shell的内置命令,如for,[,$((expr)),至于grep,awk,sed等,了解其主要功能特点,重点掌握最常用的功能就行了
像grep的参数,我只记得-v,find的参数,我只记得-name 和-exec。
学精通了当然可以极大地提高效率,但是一般来说,学得差不多就行了。除非你是网管。
Unix基于纯文本的管道说实话已经有点过时了… 当然对于一直浸淫在其下的人也许觉得这不是问题
基于JSON或者edn(https://github.com/edn-format/edn)之类的格式应该会好很多
OS X下的services是挺好的IPC, 不像Windows下就只有剪贴板
老的MANPAGE最大的问题是EXAMPLE不详细
EXAMPLE是必须的啊必须的,好在现在大家写MANPAGE就写EXAMPLE了
不如想想基于json的话下面这条命令怎么实现
cat hostlist | xargs -i ssh {} "ls -al /home/work/abc/abc.log | awk '{print \$5}'" | awk '{sum+=$1}END{print "avg=",sum/NR}'
刚刚用的一个log大小统计的命令,我想不出来有什么格式能够比纯文本还要方便。json首先你要定义好各种数据结构,学习成本和复杂度蹭蹭就上去了
同学,我虽然年纪不大,但也是5年的SA了,每一天都在终端下泡著,也是Vi和Emacs用户。
Unix哲学确实很经典,所以才能几十年经久不衰,但是如同任何事物一样,并不是完美的。就拿你自己提供的这条命令来说,只要一看到$5, $1这种东西,就知道牵扯到了太多预设。比如你得知道ls的长输出每个column分别代表什么。对于浸淫在其中很多年的人来说,这些自然不是问题。在你考虑学习成本和复杂度的时候,也需要考虑额外的心智负担,回到楼主的迷茫,你就能够看到,其实对于入门者来说,是很困难的。
也许你会说,Unix是设计给专家和hacker来使用的,但是这并不是理由。Lisp, Emacs也是hacker才会用的东西,但是同Unix的IPC“所有的数据流都是无结构字符串,让我们来写parser吧!”不同,我觉得“所有的东西都是list”要更普适强大一些。
OP握手。
对的,纯文本的特点就是无法标记各个域,一旦ls的输出格式变了,我敢说这个世界上就上万个脚本会失败。。
但是用其他的格式取代纯文本,说倒是很容易了,但做起来却不一样。这个大家都在说,如果拿不出一个可用的demo,那还是算了。。。
并不是专家什么的,而是现在无人提出一个可用的可以替代Unix传统文本流的DEMO,甚至想法。
微软的Powershell算是一个尝试,但是效果却。。。
不管是什么样的操作系统,纯文本的parser都是基石吧?
unix的这套一旦学通了,感觉上迁移性很强,至少其他的系统上能跑。如果全部是list的话,不是还要学习list的特殊语法么?这个其实和parser纯文本没太大区别吧?(感觉就是在纯文本parser上面增加了一层而已)早期大家不支持json格式的时候,还不是自己写了一套parser来做这个事情...使用上还不是要知道各种key代表的什么意思?不然{a:1,b:2,c:3}这种谁知道是什么。
干什么都得付出点代价
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之类的方案吗?你可以看这本书:
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
‘计算机’3个字打错了,不知道怎么编辑,改在下面:
字节流文本本来就是为了方便 计算机 下层抽象(文件存储,进程通信,网络通信)统一而制定的,它本身是“反人类”的。
早在80年代就有人对Unix的文本流管道感到不爽了,要求用其他的格式来替代。
Unix编程艺术这本书更是将其作为Unix最大的缺点之一。
但是30年过去了,还是原来的样子。这里套用Linus的一句话:
Talk is cheap, show me the code.
不要寄希望于所谓的大牛,如果谁来鼓吹有更好的方法可以替代Unix的管道,那么请拿出code或者demo来,否则免谈。。不过就是镜花水月
就是一个熟练过程,使用频率高的自然就记住了,不常用的也没必要记,百年不遇需要时临时man一下也就OK了,久而久之就适应了,无他。
让我想起了unix 痛恨者和王艮大神的评论
just fucking google it
我说shell编程会被逐步代替的,不是字节流本身这个抽象(字节流应该被隐藏在底层)。
从来没统一过的各种shell + *nix各版本没统一过的环境变量 + 各种没有统一过的cmd工具 == 非常丑陋的古董程序.
我是建议lz如果不是做admin或者*nix系统定制,就别去折磨自己了,会基本的shell+cmd就行。
至于字节流本身,裸用当然是不如高级数据结构(list,dic,map)舒服了,这个是肯定的。像json之类的 {"name":value} 如果写的好,本身就是“注释”和"代码"合一的。但是字节流是传送/存储这种高级数据结构的基础,是会一直存在的。只是上层的数据结构规范统一了以后,程序猿没事是不用自己做人肉parser的。如果有高级数据结构(不恰当的例子,如大家都知道的C++STL里的map之类),当然不用用裸体的字节流了。所以,如果有时试着用Python之类的新脚本语言来做些简单的系统管理任务的话,就避免了用shell+cmd来parse各种复杂输入输出字节流的情况。
不需要等待牛人,lz自己就可以这样灵活地处理。
9494,没有必要全记住,你的脑子又不是电脑。知道怎么查,怎么用就行了,现用现查都来得及。
恩,用Python或者Ruby来取代shell是不错的选择。
但是Python去做事情有的时候有点隔靴搔痒的感觉,只能说小部分取代,根本上是没办法的。顶多用Python去调shell下的程序,还不是要记那些参数。。。
Python的库正经能干挺多事的,很多时候是不用调用各种cmd的。
lz问这个,所以就推荐他多用Python,少用shell了.
Python 本来不就是打算设计成一个系统(名字忘了,Am开头的)的 shell 么XD
一句话就把一个东西贬得一文不值,这样不太好吧。
求举几个让 PowerShell = 一坨翔的例子。
他言重了,引用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}'
我觉得linux多用用有了经验就好了
$ man builtin
用习惯就好了,你会发现命令行的吸引力不必ui界面差