cd pushd

cd pushd http://os.51cto.com/art/200910/158752.htm cd - # list current dir pwd /foo # cd to /bar cd /bar pwd /bar # 可以在 $OLDPWD 变量里查看旧目录 echo $OLDPWD # cd - return to previous dir /foo cd - pwd /foo # cd -, return to previous dir /bar cd - pwd /bar pushd、popd 和 dirs pushd 和 popd 是对一个目录栈进行操作,而 dirs 是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。 dirs 的 参数: -p 每行显示一条记录 -v 每行显示一条记录,同时展示该记录在栈中的 index -c 清空目录栈, 将目录栈中除当前目录之外的其它目录清除 每次 cd 之后, 新目录都会被记录到目录栈中 ...

2016-07-02 · 2 min · 271 words · -

golang io

golang io https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md

2016-07-01 · 1 min · 3 words · -

golang 异常处理, err, error, panic, recover

golang 异常处理, err, error, panic, recover 基础知识 错误指的是可能出现问题的地方出现了问题, 比如打开一个文件时失败, 这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题, 比如引用了空指针, 这种情况在人们的意料之外。可见, 错误是业务过程的一部分, 而异常不是。 自定义异常 return errors.New("string") 打印调用栈 using runtime defer func() { if p := recover(); p != nil { logger.Errorf("panic: %v", p) //打印调用栈信息 buf := make([]byte, 2048) n := runtime.Stack(buf, false) stackInfo := fmt.Sprintf("%s", buf[:n]) logger.Errorf("panic stack info %s", stackInfo) } }() using debug if p := recover(); p != nil { logs.Error("message push panic: %v", p) //打印调用栈信息 debug.PrintStack() } Go语言追求简洁优雅, 所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下 (比如除数为0了) 。才使用Go中引入的Exception处理: defer, panic, recover。 ...

2016-07-01 · 2 min · 251 words · -

golang flag 获取命令行参数

golang flag 获取命令行参数 flag.String("port", ":8080", "http listen port") 像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,第一个参数表示参数名称,第二个参数表示默认值,第三个参数表示使用说明和描述。flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。 flag.Parse() 解析函数将会在碰到第一个非 flag 命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd -flag=true abc 则第一个非 flag 命令行参数为 “abc” 使用flag来操作命令行参数,支持的格式如下: -id=1 --id=1 -id 1 --id 1 package main import ( "flag" "fmt" ) func main() { ok := flag.Bool("ok", false, "is ok") id := flag.Int("id", 0, "id") port := flag.String("port", ":8080", "http listen port") var name string flag.StringVar(&name, "name", "123", "name") flag.Parse() fmt.Println("ok:", *ok) fmt.Println("id:", *id) fmt.Println("port:", *port) fmt.Println("name:", name) } 还是非常方便的。 ...

2016-07-01 · 1 min · 106 words · -

golang tcp socket

golang tcp socket Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是"高频+刚需",而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的。 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket在各大主流OS平台上都得到了很好的支持。关于tcp programming,最好的资料莫过于W. Richard Stevens 的网络编程圣经《UNIX网络 编程 卷1: socket 联网API》 了,书中关于tcp socket接口的各种使用、行为模式、异常处理讲解的十分细致。Go是自带runtime的跨平台编程语言,Go中暴露给语言使用者的tcp socket api是建立OS原生tcp socket接口之上的。由于Go runtime调度的需要,golang tcp socket接口在行为特点与异常处理方面与OS原生接口有着一些差别。这篇博文的目标就是整理出关于Go tcp socket在各个场景下的使用方法、行为特点以及注意事项。 模型 从tcp socket 诞生后, 网络编程架构模型也几经演化, 大致是: “每进程一个连接” –> “每线程一个连接” –> “Non-Block + I/O多路复用 (linux epoll/windows iocp/freebsd darwin kqueue/solaris Event Port)"。伴随着模型的演化,服务程序愈加强大,可以支持更多的连接,获得更好的处理性能。 目前主流web server一般均采用的都是"Non-Block + I/O多路复用” (有的也结合了多线程、多进程) 。不过I/O多路复用也给使用者带来了不小的复杂度,以至于后续出现了许多高性能的I/O多路复用框架, 比如libevent、libev、libuv等,以帮助开发者简化开发复杂性,降低心智负担。不过Go的设计者似乎认为I/O多路复用的这种通过回调机制割裂控制流的方式依旧复杂,且有悖于"一般逻辑"设计,为此Go语言将该"复杂性"隐藏在Runtime中了: Go开发者无需关注socket是否是 non-block的,也无需亲自注册文件描述符的回调,只需在每个连接对应的goroutine中以"block I/O"的方式对待socket处理即可,这可以说大大降低了开发人员的心智负担。一个典型的Go server端程序大致如下: //go-tcpsock/server.go func handleConn(c net.Conn) { defer c.Close() for { // read from the connection ...

2016-06-29 · 11 min · 2233 words · -

linux tc

linux tc http://blog.csdn.net/qinyushuang/article/details/46611709 TC 在Linux中,流量控制都是通过TC这个工具来完成的。通常,要对网卡进行流量控制的配置,需要进行如下的步骤: ◆ 为网卡配置一个队列; ◆ 在该队列上建立分类; ◆ 根据需要建立子队列和子分类; ◆ 为每个分类建立过滤器。 在Linux中,可以配置很多类型的队列,比如CBQ、HTB等,其中CBQ 比较复杂,不容易理解。HTB(Hierarchical Token Bucket)是一个可分类的队列, 与其他复杂的队列类型相比,HTB具有功能强大、配置简单及容易上手等优点。在TC中,使用"major:minor"这样的句柄来标识队列和类别,其中major和minor都是数字。 对于队列来说,minor总是为0,即"major:0"这样的形式,也可以简写为"major: “比如,队列1:0可以简写为1:。需要注意的是,major在一个网卡的所有队列中必须是惟一的。对于类别来说,其major必须和它的父类别或父队列的major相同,而minor在一个队列内部则必须是惟一的(因为类别肯定是包含在某个队列中的)。举个例子,如果队列2:包含两个类别,则这两个类别的句柄必须是2:x这样的形式,并且它们的x不能相同,比如2:1和2:2。

2016-06-10 · 1 min · 20 words · -

archlinux steam

archlinux steam sudo pacman -S steam sudo pacman -S ttf-liberation sudo pacman -S wqy-zenhei sudo pacman -S lib32-alsa-plugins sudo pacman -S lib32-curl sudo pacman -S lib32-libxtst sudo pacman -S lib32-gtk2 sudo pacman -S lib32-libpulse STEAM_RUNTIME=0 steam https://wiki.archlinux.org/index.php/steam#Installation https://wiki.archlinux.org/index.php/Steam#Using_native_runtime

2016-06-05 · 1 min · 38 words · -

领域模型 贫血模型 充血模型

领域模型 贫血模型 充血模型 http://blog.darkmi.com/2011/12/21/2069.html 领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。 业务对象模型 (也叫领域模型 domain model) 是描述业务用例实现的对象模型。它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象。业务对象模型从业务角色内部的观点定义了业务用例。该模型为产生预期效果确定了业务人员以及他们处理和使用的对象 (“业务类和对象”) 之间应该具有的静态和动态关系。它注重业务中承担的角色及其当前职责。这些模型类的对象组合在一起可以执行所有的业务用例。 贫血模型 (Anemic Model) Anemic Domain Model (贫血领域模型), 贫血领域对象 Martin Fowler在他个人博客里描述的一个Anti-pattern 反模式 是 Anemic Domain Model (贫血域模型), 但是,恰恰这种 Anti-pattern 反模式,却在实际应用中频繁出现。 是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。 贫血领域对象 (Anemic Domain Object)是指仅用作数据载体,而没有行为和动作的领域对象。 贫血领域对象只是个数据载体,没有任何行为。简单的业务系统采用这种贫血模型和过程化设计是没有问题的,但在业务逻辑复杂了,业务逻辑、状态会散落到在大量方法中,原本的代码意图会渐渐不明确,我们将这种情况称为由贫血症引起的失忆症。 充血模型 层次结构和上面的差不多,不过大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等,这样层次结构就变成Client-> (Business Facade)->Business Logic->Domain Object->Data Access。 参考资料: http://baike.baidu.com/view/757895.htm http://www.uml.org.cn/mxdx/200803141.asp http://www.oschina.net/question/54100_10400 作者: 郭凛 链接: https://www.zhihu.com/question/20360521/answer/14891150 来源: 知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 贫血模型最早广泛应用是源自于EJB2,最强盛时期则是由Spring创造,把"行为" (也称为逻辑、过程) 和"状态" (可理解为数据,对应到语言就是对象成员变量) 分离到不同的对象之中,那个只有状态的对象就是所谓的"贫血对象" (常称为VO——Value Object) ,而那个只有行为的对象就是我们常见的N层结构中的Logic/Service/Manager层 (对应到EJB2中的Stateless Session Bean) 。 (曾经Spring的作者Rod Johnson也承认,Spring不过是在沿袭EJB2时代的"事务脚本",也就是面向过程编程) 充血模型其实很简单,就是面向对象设计的本质: “一个对象是拥有状态和行为的”,比如说一个人,他眼睛什么样鼻子什么样这就是状态,人可以去打游戏或是写程序,这就是行为。为什么要有一个"人Manager"这样的东西存在去帮人"打游戏"呢?举个简单 ...

2016-06-04 · 1 min · 93 words · -

什么时候考虑使用静态

什么时候考虑使用静态 静态方法比较少用,因为他在一启动就实例化了,比较占资源,当然,配合单例模式还是比较好用的 比较多的用在数据连接上,我避免使用的原则就是减少资源消耗 静态方法用来执行无状态的一个完整操作,实例方法则相反,它通常是一个完整逻辑的一部分,并且需要维护一定的状态值。 如果用内存和效率来区分使用Static Method、Instance Method 就回到过去结构化编程了。使用那种方法的根本出发点还是围绕面向对象来进行的 静态方法不用创建实例可以直接调用 与类相关与对象无关 不需要对象的"轻"方法 工厂方法 如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快. 可以直接拿来就用的方法,就是静态的. 肯定不涉及具体对象,因为静态方法内,是无法直接使用任何非静态成员的。 工具类 可以当作"全局"对象或方法来使用 重载"操作符" 静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。 从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据该方法和实例化对象具是否有逻辑上的相关性,如果是就应该使用实例化对象, 反之使用静态方法。 我是把静态类当做全局变量和全局函数的整合对象来用的 全局累加时用 不需要生成对象的 经常频繁使用的 工具类里的 (如SqlHelper) 适当地使用static方法本身并没有什么,当一个人从来不懂使用多态、接口设计时,很自然地会滥用static方法。 个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法,方便调用。 所有对象共有的方法 不关系到任何于特定对象相关的操作 比如学生的年龄就是学生的相关。 修改学生的年龄就不适合用静态方法。 一般来说,如果你的方法里没有用到this关键字, 那就适合用静态方法 通常通用的类中一些常用的方法可以设计为静态类 只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的 可以实现某些特殊的设计模式: 如Singleton 由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部 可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好 总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的 以上这些各种说法,基本上都是正确的。但是,其中绝大多数是讲了"静态"和"实例"的区别,以及静态方法的特征。 很少有说到何时或是为什么要使用静态的。 静态包括静态类和静态成员 (静态方法 和 静态属性) ,既然搜索出来的这些说的都是静态成员 (基本上说的都是静态方法) ,那么我也就先仅对静态方法谈一谈自己的看法。 上中学数学,尤其是平面几何的时候,老师经常讲"定义"与"性质"的区别。“性质"只是它表现出来的特征而已,而"定义"才是真正的决定性的东西。 我觉得,静态方法的"定义"当然是 static 关键字了。没有用到this指针,这一点才是静态方法的首要"性质” (本质特征) 。像什么【共通】【全局】【单例模式】呀,那都是它的应用场景,或是说使用静态方法来达到的目的。 那么说到"何时该使用静态方法"其实是困扰很多程序员的苦恼问题。不明白这一点,也从一个侧面反映出对OO思想的理解不够,就很可能通过滥用静态方法已达到在面向对象的语言中继续进行面向过程的编程,这是很可怕的。 其实,方法是否涉及具体类的实例,或者简单的说是否涉及"数据" (如果使用就要用到this指针) 是决定是否使用静态方法的根部要因。然而,判断是否涉及到"数据"也是要看当前设计思路的。有时候不够OO的设计,可能会将本该设计到数据的实例方法,从"数据相关"变成"数据无关"。 (与OO不同,面向过程的编程就是将 方法 与 数据 分开) 在这样的设计思路下,你会发现怎么什么动作都是与数据无关的呢?恩,这就该开始滥用静态方法了。 本想举一个好一点的例子,但是时间匆忙,就简短说一下 Log 吧。有人认为写日志是一个工具在干活,应该是 Log.debug(…); ...

2016-06-02 · 1 min · 176 words · -

rsync

rsync install rsync pacman -S rsync sudo apt install rsync rsync -azP source dest options https://blog.csdn.net/m0_37886429/article/details/77285738 -a 同步所有, 包括修改时间、群组、权限、特殊文件、也包括递归。 -h, –human-readable 输出易读格式。 以人类可读的格式输出。 -r 递归, 在同步目录时使用 -v, –verbose 详细模式输出 -x, –one-file-system 递归时避免跨越文件系统的边界(即不能跨越挂载点) -z 压缩传输的文件 -A, –acls preserve ACLs (implies -p) 将目标ACL更新为与源ACL相同 -H, –hard-links 保留硬链结 -P 是 -progress 和 -partial 的组合。第一个选项是用来显示传输进度条, 第二个选项允许断点续传和增量传输 -X, –xattrs 将目标扩展属性更新为与源扩展属性相同。 –numeric-ids 传输文件的用户id,而不是传输用户名 使用 rsync 命令同步本地目录和远程主机目录 Rsync, 代表 “remote sync”, 它是本地和远程主机文件同步工具。它只同步更改的文件,以此实现最小化传输数据。 我们创建两个测试目录和一些文件: mkdir d1 mkdir d2 touch d1/somefile{1..5} rsync -r d1/ d2 rsync -anv dir1/ dir2 # 注意上面的dir1/中的"/"不能少,它代表同步目录下文件, 如果没有"/" 代表同步这个目录。 和远程主机进行同步目录 ...

2016-05-31 · 1 min · 137 words · -

nftables

nftables 这里有张图 https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks nftables 是一个新式的数据包过滤框架,旨在替代现用的 iptables、ip6tables、arptables 和 ebtables 的新的包过滤框架。nftables 诞生于 2008 年,2013 年底合并到 Linux 内核,从 Linux 内核 3.13 版本开始大多数场景下 nftables 已经可以使用,但是完整的支持(即:nftables 优先级高于 iptables)应该是在 Linux 内核 3.15 版本。 nftables 旨在解决现有 {ip/ip6}tables 工具存在的诸多限制。相对于旧的 iptables,nftables 最引人注目的功能包括:改进性能、支持查询表、事务型规则更新、所有规则自动应用等等。 nftables 主要由三个组件组成:内核实现、libnl netlink 通信和 nftables 用户空间。其中内核提供了一个 netlink 配置接口以及运行时规则集评估,libnl 包含了与内核通信的基本函数,用户空间可以通过新引入的命令行工具 nft 和用户进行交互。 nft 可以通过在寄存器中储存和加载来交换数据。也就是说,它的语法与 iptables 不同。但 nft 可以利用内核提供的表达式去模拟旧的 iptables 命令,维持兼容性的同时获得更大的灵活性。简单来说,nft 是 iptables 及其衍生指令(ip6tables 和 arptables )的超集。 nftables 的特点 nftables 拥有一些高级的类似编程语言的能力,例如:定义变量和包含外部文件,即拥有使用额外脚本的能力。nftables 也可以用于多种地址簇的过滤和处理。 不同于 iptables, nftables 并不包含任何的内置表,需要哪些表并在这些表中添加什么处理规则一切由管理员决定。 表包含规则链,规则链包含规则。 nftables 相较于 iptables 的优点 更新速度更快 在 iptables 中添加一条规则,会随着规则数量增多而变得非常慢。这种状况对 nftables 而言就不存在了,因为 nftables 使用原子的快速操作来更新规则集合。 ...

2016-05-25 · 4 min · 801 words · -

http proxy, whistle, w2, http 调试代理

http proxy, whistle, w2, http 调试代理 whistle HTTP, HTTPS, Websocket debugging proxy tool in linux, like Fiddler for windows install whistle npm install -g whistle yarn global add whistle w2 command w2 help w2 start w2 stop 把代理指向127.0.0.1:8899 浏览器访问 http://127.0.0.1:8899/#network https://github.com/avwo/whistle https://github.com/avwo/whistle/blob/master/README-zh_CN.md https://www.npmjs.com/package/whistle https://avwo.github.io/whistle/install.html

2016-05-24 · 1 min · 44 words · -

HTTP Transfer-Encoding

‘HTTP Transfer-Encoding’ 本文作为我的博客「HTTP 相关」专题新的一篇,主要讨论 HTTP 协议中的 Transfer-Encoding。这个专题我会根据自己的理解,以尽量通俗的讲述,结合代码示例和实际场景来说明问题,欢迎大家关注和留言交流。 Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」。实际上,HTTP 协议中还有另外一个头部与编码有关: Content-Encoding (内容编码) 。Content-Encoding 通常用于对实体内容进行压缩编码,目的是优化传输,例如用 gzip 压缩文本文件,能大幅减小体积。内容编码通常是选择性的,例如 jpg / png 这类文件一般不开启,因为图片格式已经是高度压缩过的,再压一遍没什么效果不说还浪费 CPU。 而 Transfer-Encoding 则是用来改变报文格式,它不但不会减少实体内容传输大小,甚至还会使传输变大,那它的作用是什么呢?本文接下来主要就是讲这个。我们先记住一点,Content-Encoding 和 Transfer-Encoding 二者是相辅相成的,对于一个 HTTP 报文,很可能同时进行了内容编码和传输编码。 Persistent Connection 暂时把 Transfer-Encoding 放一边,我们来看 HTTP 协议中另外一个重要概念: Persistent Connection (持久连接,通俗说法长连接) 。我们知道 HTTP 运行在 TCP 连接之上,自然也有着跟 TCP 一样的三次握手、慢启动等特性,为了尽可能的提高 HTTP 性能,使用持久连接就显得尤为重要了。为此,HTTP 协议引入了相应的机制。 HTTP/1.0 的持久连接机制是后来才引入的,通过 Connection: keep-alive 这个头部来实现,服务端和客户端都可以使用它告诉对方在发送完数据之后不需要断开 TCP 连接,以备后用。HTTP/1.1 则规定所有连接都必须是持久的,除非显式地在头部加上 Connection: close。所以实际上,HTTP/1.1 中 Connection 这个头部字段已经没有 keep-alive 这个取值了,但由于历史原因,很多 Web Server 和浏览器,还是保留着给 HTTP/1.1 长连接发送 Connection: keep-alive 的习惯。 ...

2016-05-24 · 2 min · 270 words · -

Invalid HTTP server response [411] – Length Required

‘Invalid HTTP server response [411] – Length Required’ http://www.coderanch.com/t/625696/Web-Services/java/Invalid-HTTP-server-response-Length As William asked, please share how you are setting content length in SOAP header. I searched online for error and found that there can be one more reason for this failure. Reason - The remote WSEndpoint did not like the HTTP Chunking feature activated. Try disabling this feature for WS client. netty HttpPostRequestEncoder bodyRequestEncoder = new HttpPostRequestEncoder(factory, request, false);

2016-05-24 · 1 min · 68 words · -

netty 文件上传

netty 文件上传 http://blog.csdn.net/mcpang/article/details/41140409 【初学与研发之NETTY】netty4之文件上传 标签: netty4文件上传 2014-11-15 04:35 6005人阅读 评论(29) 收藏 举报 分类: JAVA (48) Netty (6) 版权声明: 本文为博主原创文章,未经博主允许不得转载。 客户端: print? public class UpLoadClient { private StringBuffer resultBuffer = new StringBuffer(); private EventLoopGroup group = null; private HttpDataFactory factory = null; private Object waitObject = new Object(); private ChannelFuture future = null; public UpLoadClient(String host, int port) throws Exception { this.group = new NioEventLoopGroup(); this.factory = new DefaultHttpDataFactory(DefaultHttpDataFactory.MINSIZE); Bootstrap b = new Bootstrap(); ...

2016-05-24 · 6 min · 1133 words · -

MessageFormat

MessageFormat MessageFormat用法 博客分类: java MessageFormatMessageFormat.format MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = “I’m not a {0}, age is {1,number,short}”, height is {2,number,#.#}; 而MessageFormat可以格式化这样的消息,然后将格式化后的字符串插入到模式中的适当位置,比如: 将str中的{0}用"pig"替换,{1,number,short}用数字8替换,{2,number,#.#}用数字1.2替换。 那么最终用户得到的是一个格式化好的字符串"I’m not a pig, age is 8, height is 1.2"。 MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息。 MessageFormat模式 (主要部分) : FormatElement: { ArgumentIndex } { ArgumentIndex , FormatType } { ArgumentIndex , FormatType , FormatStyle } FormatType: number date time choice (需要使用ChoiceFormat) FormatStyle: short medium long full integer currency percent SubformatPattern (子模式) 还以str为例,在这个字符串中: {0}和{1,number,short}和{2,number,#.#};都属于FormatElement,0,1,2是ArgumentIndex。 {1,number,short}里面的number属于FormatType,short则属于FormatStyle。 {1,number,#.#}里面的#.#就属于子格式模式。 指定FormatType和FormatStyle是为了生成日期格式的值、不同精度的数字、百分比类型等等。 实例: ArgumentIndex必须是非负整数,它的个数不只限于0到9这10个,它可以用0到9的数字组成,因此可以有好多个,如: Java代码 ...

2016-05-17 · 2 min · 339 words · -

英语, English

英语 English 句子成分 主语 Subject 谓语 Predicate 宾语 Object 主语 Subject 指句子中动作的执行者或状态的承受者,通常是名词、代词或相当于名词的词或短语。 在祈使句中,主语通常是隐含的 “You”。 谓语 Predicate 通常是一个动词(或动词短语),说明主语做什么或处于什么状态。 主语 和谓语的关系 主语是动作的执行者,谓语是主语所做的动作或状态的描述。 主谓一致(Subject-Verb Agreement) 主语和谓语在数(单复数)和人称上必须一致。 宾语 Object 宾语是动作的承受者,通常是谓语动词的作用对象。换句话说,就是“谁”或“什么”受到了这个动作。 通常出现在 及物动词(transitive verb) 后面 通常是名词、代词,或相当于名词的词/短语(名词短语)/从句 直接宾语 Direct Object 动作直接作用的对象 I read a book. 间接宾语 Indirect Object 表示动作的接受者或受益者,通常在人之前 She gave me a gift. me: 间接宾语, a gift: 直接宾语 宾语从句 Object Clause 整个从句作为宾语 I think (that he is right). 动词后不一定有宾语, 及物动词需要宾语,比如 need, like, see, eat, 不及物动词通常不需要宾语, 比如: sleep, arrive, go ...

2016-05-15 · 19 min · 3849 words · -

统计文件行数, 文件数

统计文件行数, 文件数 Linux下有三个命令: ls、grep、wc。通过这三个命令的组合可以统计目录下文件及文件夹的个数。 统计当前目录下文件的个数 (不包括目录) ls -l | grep “^-” | wc -l 统计当前目录下文件的个数 (包括子目录) ls -lR| grep “^-” | wc -l 查看某目录下文件夹(目录)的个数 (包括子目录) ls -lR | grep “^d” | wc -l 统计.md文件个数 ls -lR|grep "^-.*.md"|wc -l 语法: wc [选项] 文件… 说明: 该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。 该命令各选项含义如下: c 统计字节数。 l 统计行数。 w 统计字数。 这些选项可以组合使用。 输出列的顺序和数目不受选项的顺序和数目的影响。 总是按下述顺序显示并且每项最多一列。 行数、字数、字节数、文件名 如果命令行中没有文件名,则输出中不出现文件名。 例如: `$ wc - lcw file1 file2 4 33 file1 7 52 file2 ...

2016-05-15 · 1 min · 114 words · -

Linux批量重命名文件

Linux批量重命名文件 #在前面添加 _hoho_ for i in \`ls\`; do mv -f $i \`echo "_hoho_"$i\`; done #修改前面5个字母为zhaozh for i in \`ls\`; do mv -f $i \`echo $i | sed 's/^...../zhaozh/'\`; done Linux批量重命名文件会涉及到改变一个字母、改变一些相连字母、改变某些位置的字母、在最前面加上某些字母、或者改变字母的大小写。完成这里五个方法基本上就会解决了Linux批量重命名的工作。 我想把它们的名字的第一个1个字母变为"q",其它的不变 [root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | sed ’s/^./q/’`; done 或者写个脚本,显得更加清晰: for file in `ls` do newfile =`echo $i | sed ’s/^./q/’` mv $file $newfile done 修改前面5个字母为zhaozh [root@pps mailqueue]# for i in `ls`; do mv -f $i `echo $i | sed ’s/^…../zhaozh/’`; done ...

2016-05-13 · 1 min · 131 words · -

ansible basic command

ansible basic command commands # 临时的 inventory file ansible -i '192.168.50.111,' all -m shell -a 'whoami' -u root ansible-galaxy collection install community.general # localhost ansible localhost -m shell -a 'ls' # 指定私钥 --key-file ansible -i 'wiloon.com,' all -m shell -a 'systemctl stop enx-api' -u root --key-file ~/.ssh/id_ed25519_w10n hibernate ansible -i '192.168.50.31,' all -m shell -a 'sudo systemctl hibernate' -u user0 install Installing Ansible on Ubuntu sudo apt update sudo apt install software-properties-common sudo add-apt-repository --yes --update ppa:ansible/ansible sudo apt install ansible macos brew install ansible ansible 配置文件 /etc/ansible/ansible.cfg 文件内容 [defaults] interpreter_python = auto_legacy_silent # gather 超时时间 gather_timeout=30 inventory 默认的 Inventory 路径 /etc/ansible/hosts ...

2016-05-13 · 2 min · 382 words · -