Linux中Sl命令的使用

我们在输入命令时候,有时候难免会输入错误,比如在Linux 下,有时候会把ls误输入成了sl,那么会出现怎么的效果呢?

输入sl后会看到“一个火车咔咔的从桌面上走过!!!”。下面谈谈sl 的使用。

在这里插入代码片

一、环境

这里使用的是Ubuntu14.04(本质上只要是Linux操作系统即可)

二、安装

1.先输入sl看下,如果提示没有这个命令,说明没有安装

在这里插入图片描述

2.输入以下命令进行移除

sudo apt-get remove sl

3.输入以下命令安装

sudo apt-get install sl

安装完后直接在命令行输入sl,即可:

三、命令说明

在命令行直接输入man sl查看sl的使用:

man sl

sl #这个命令主要是提醒程序员输入的命令是sl,而不是ls
sl -a #可以看到火车上有一个“求救”的人
sl -l #显示一个比直接输入sl更小的一个火车
sl -F #火车会从右下角向左上角飞走了
sl -e #可以使用Ctrl+C中断当前会话
本文转载于网络 如有侵权请联系删除

相关文章

  • vs-code常用插件(自用)

    语言相关插件备注Chinese(Simplified)(简体中文)中文语言包功能相关插件备注AutoRenameTag自动重命名配对的标签AutoCloseTag自动闭合HTML/XML标签Surround用于在代码块周围添加包装器片段vscode-icons好看的文件图标(icon)BracketPairColorizer彩虹括号,已内置给括号加上不同的颜色,便于区分不同的区块(现在已内置在vscode中) 通过设置(搜索BracketPairs)进行配置CSS相关插件备注CSSPeek定位到css位置JavaScript相关插件备注JavaScriptSnippetPackjs片段ParameterHints显示被调用函数的参数名称Vue相关插件备注Veturvue语法高亮和代码片段VueLanguageFeatures(Volar)完美支持vue3代码片段,但是和Vetur冲突Vue3Snippetsvue代码片段VueHelpervue代码片段浏览器相关插件备注LiveServer本地服务器,动态更新网页openinbrowser快速打开本地浏览器AI代码相关插件备注GitHu

  • 说说Robots.txt限制收录与Google网站管理员工具

    最近有朋友询问:用谷歌site你的站发现Google没收录你的tag页,我的怎么?有还大部分是?站长认为,很多新手估计都不明其中的道理,索性就写篇文章吧。1.为什么Google没收录tag标签页其实站长使用的是Robots.txt限制收录,关于Robots.txt,请看《Robots.txt是什么/有什么用/怎么写》。你也可以直接查看站长的自留地的Robots.txt:https://www.cmhello.com/robots.txt注意: 1.由于我自己对Robots.txt不熟悉,所以下面的规则很不规范,也不精简,甚至有错误,如果你看出了错误的地方,希望能指点一下站长,感激不尽。 2.每个人的链接样式都不一样,不要复制我的Robots.txt,否则后果自负哦 从我的robots.txt应该可以看出来,我禁止所有的搜索引擎收录tags、分类、评论、feed等多种页面类型,所以搜索引擎就会不收录这些页面,并且逐渐去除上面禁止类型的文章,如下图很明显的是百度在3月8日的结果中已经基本把我所有的tag和分类页去除了,Google目前还没有完全去除(只是把tag和分类页收录结果放到了最后面

  • 类实例对象的class类型却不属于该类,何解?

    前言标题可能会让人一头雾水,直接上例子如果我们在代码中,执行如下内容serverinstanceofMvpServer复制它返回的东西会是啥,如果得出正确答案的朋友,下面内容就可以不用看了。答案是当时看到这个答案,我真的一脸懵逼,还一度怀疑是我idea问题排查像这种问题,有时候真的得靠平时的积累了,类是由什么进行加载?答案是类加载器,即使类包名一样,类名字一样,如果你是由不同的类加载器进行加载,则该类也是不一样。因此我们就可以优先从类加载器排查起在这里插入图片描述从图片就很容易看出来,server和MvpServer的类加载器不一样。server他这个类加载器是springdevtools这个包提供的。因此解决的思路就很简单,就查下项目中是否引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>复制有的话,可以直接去掉

  • 使用测试自动化左移你的安全关键型软件测试

    来源:http://www.51testing.com/  安全认证和所需的测试和验证在软件开发预算中占了很大的比重。将软件的测试转移到左边(即在软件开发生命周期的早期),同时利用自动化技术,在成本、风险和进度方面都有很大的好处。下图1显示了商业航空公司软件开发每千行代码的成本(以百万美元为单位)(波音和空客的数据),它清楚地显示了指数级的增长。  图1:商业航空项目每行代码的软件开发成本。数据取自空客和波音的项目指标。错误的产生和发现地点,以及对成本的影响  不足为奇的是,大多数缺陷都是在项目开始时引入的,甚至是在编写第一行代码之前。大多数缺陷是在测试期间发现并修复的,但有相当一部分(高达20%!)是在运行期间发现的,即在产品销售和发货之后。在认证系统中,这要么意味着极其昂贵的修复-测试-再认证的周期,要么意味着操作者对问题的变通。图2显示了在软件开发生命周期的每个阶段引入和检测到的bug的相对百分比。  图2:图表显示了在开发的不同阶段引入和检测到的缺陷的百分比。  在生命周期的早期,缺陷的修复是最便宜的,而随着项目时间的推移,发现和修复缺陷的成本会成倍增加。在运营中,产品运到客户

  • Java Word break analysis

    CreatedbyWang,Jerry,lastmodifiedonDec18,2015ingetAllPossibleSentences,s:catsanddogpos:9 Substring:catsanddog 逐一遍历字典里的word,检查当前子串是否以word结尾。 SubStringendswithwordinDict!:dog-字典里找到一个匹配。 currentposition:9wordlength:3 firstSegend:6找到匹配后准备开始递归。 RECURSIVELYcall,newposition:6 ingetAllPossibleSentences,s:catsanddogpos:6-传s还是传整个字符串进去,只是position变成前6个。此时执行流不会返回,仍然是在当前dog匹配的大前提下。 Substring:catsand SubStringendswithwordinDict!:sand currentposition:6wordlength:4 firstSegend:2 RECURSIVELYcall,newposition:2又找到一个

  • C++标准库中copy算法的使用

    目录std::copy是C++标准库中的算法接口,主要用于两个容器间的复制,据说其效率要优于自己用for循环逐个复制。之前一直非常混淆其中的用法,这里总结了几个例子如下:#include<iostream> #include<vector> #include<algorithm> #include<set> usingnamespacestd; intmain() { //vector复制到vector { vector<int>src={0,1,2,3,4}; vector<int>dst(8,-1); std::copy(src.begin(),src.end(),dst.begin()); for(inti=0;i<dst.size();i++) { cout<<dst[i]<<'\t'; } cout<<endl; } //vector插入到vector末尾 { vector<int>src={0,1,2,3,4}; vecto

  • Python之双色球选购和三级菜单问题

    1:双色球选购 #1双色球(假设一共八个球,6个红球,球号1-32、2个蓝球,球号1-16) #2确保用户不能重复选择,不能超出范围 #3用户输入有误时有相应的错误提示 #4最后展示用户选择的双色球的号码 select_red_ball=[] whileTrue:    n=int(input('请输入你要选择的红色球(1-32):'))    if0<n<33:        ifnnotinselect_red_ball:            select_red_ball.append(n)        else:            print('number%disalreadyexistinredballlist'%n)    else:        print('onlycanselectnbetween1-32')    iflen(select_red_ball)==6:        break select_red_ball.sort() select_blue_ball=[] whi

  • picu后端架构总结

    首先我们项目的定位是一个图片,音频为主体的分享应用,于是服务器对于大资源的存储有了常规数据库,nginx静态资源存储和对象存储服务的选型问题.常规数据库(如mysql)的业务存储不可避免的遇到服务器带宽问题和单点问题.于是我们选择了COS服务进行大对象存储,同时对于生成目录等用户关键信息进行云Redis存储并选择双机备份.项目开发,压测结束Redis只占用了2M内存空间,COS服务+CDN溯源提供了优秀的读写带宽和数据保持.其次一开始我们两位后台开发同学对于架构的选型的第一目的其实是以”复杂装逼”为先,但是实际搭建过程中发现需要意识到每个组件选型的原因,因为每个组件的选型对于访问压力和安全都有可能有灾难性的错误,在具体架构图的体现上可能是”一粒老鼠屎”.因此我们转而明确我们需要什么样的服务器.阅读往年KM经验总结得到互联网服务器的核心在于可用容灾,简单点说要先解决每个服务的单点问题.举个项目过程中的接口例子:我们COS的上传服务是客户端先向服务器请求一个临时Token而后利用这个临时Token存储,读取资源.由于COS不能设计给CVM的回调函数,于是基本设计是通过两条请求分离1.取to

  • SAP最佳业务实践:返工处理(库存制造物料)(151)-1业务概览

    用途本流程涵盖了对于在仓库中发现的缺陷生产物料的返工业务优点使返工生产的成本透明化在返工生产中,可以使用所有SAP提供的标准车间现场控制功能处理流程中涉及的公司角色:仓库文员生产计划员生产主管车间主任包含的关键处理流程:创建返工生产订单缺陷物料的发货确认返工生产活动过帐返工生产订单的收货返工处理(库存制造物料)对于可以返工的缺陷物料,为修正缺陷而创建返工生产订单。与返工生产订单相关的成本将作为物料差异结算到获利能力。该流程主要用于使用单独的返工生产订单进行生产返工,并且对原物料进行生产执行完成后的过账处理(包括生产收货)。在实际业务中,对生产的物料的发货只有过账到库存方能看到。为实现该流程,提供了一下方案:将原始物料通过转移过账的方式转变为返工物料后,会生成一张新的生产订单。返工物料作为生产订单组件,生产订单的产出仍然是原始物料。返工物料的物料评估应该放映成品价值减去返工成本。在新的生产订单中进行成本收集并作为生产差异结算到成本控制中。除此以外,通过物料转帐触发的财务过帐将包含平均返工成本。由于转移过账的做法并不是被广为接受的,所有不作为本业务场景的一部分。在该业务场景中,库存生产物料

  • 初识Neo4j

    睡觉前,突然想起来Neo4j这个数据库,以前认为是一个相当神秘的数据库,一听是图数据库,以为是存储图片的。一想不对啊,存储图片不是数据库层面建议的,所以自己理了下,也算是自己说服自己吧。 Neo4j是开源的,分了多个版本,其中企业版是基于AGPL协议的。也就意味着你需要扩展,需要补充一个协议。Neo4j的版本也分了不同的平台,目前较新的版本是3.3,最新的3.4Neo4j比较贴心的是下载的时候会提示你注册一个用户,注册之后,会给你发送一个电子版的pdf文档。有一些详细的技术细节。下载Neo4j其实会很多的选择,有很多的组件可下载。其中Cypher学习Neo4j的重中之重。限于时间关系,我就学了几个花拳绣腿。因为Neo4j是基于Java,所以使用Java来做数据的处理还是很方便的,当然他也支持不同平台的语言和技术。我们来简单实践一下。首先从官网下载Neo4j,安装包大概是80M左右。因为Neo4j是基于Java开发,我选择的版本是3.3,能够接受的最低版本是1.8了。所以在安装配置的时候我们需要提前准备好Java.然后在bin目录下启动Neo4j,有两种方式,一种是使用console选项

  • GCC 指定运行期动态链接库搜索路径

    链接器ld的-rpath=dir选项可以指定运行期so文件的搜索路径。 GCC的-Wl,option选项可以传递选项给链接器ld。 所以组合起来,可以直接使用-Wl,-rpath=dir,或者-Wl,-rpath,dir。 g++protobuf.cpp-oprotobuf.out-I./3rdparty/include-L./3rdparty/lib-lprotobuf-Wl,-rpath=./3rdparty/lib/ 复制 lddprotobuf.out linux-vdso.so.1(0x00007fffd5d7c000) libprotobuf.so.30=>./3rdparty/lib/libprotobuf.so.30(0x00007f8174c63000) libstdc++.so.6=>/lib/x86_64-linux-gnu/libstdc++.so.6(0x00007f8174a70000) libgcc_s.so.1=>/lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007f8174a50000) libc.s

  • jaege使用elasticsearch存储docker安装

    一、安装docker-compose curl-Lhttps://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64-o/usr/local/bin/docker-compose chmod+x/usr/local/bin/docker-compose复制   二、创建docker-compose.yml文件 [root@localhost~]#catdocker-compose.yml version:"3" services: elasticsearch: image:docker.elastic.co/elasticsearch/elasticsearch:6.3.1 networks: -elastic-jaeger ports: -"127.0.0.1:9200:9200" -"127.0.0.1:9300:9300" restart:on-failure environment: -cluster.name=jaeger-cluster -discov

  • 启动类加注解@MapperScan spring boot mybatis 启动错误

    Description: FielduserDaoincom.gcy.springsecuritydemo.service.user.UserServicerequiredabeanoftype'com.gcy.springsecuritydemo.dao.user.UserDao'thatcouldnotbefound. Action: Considerdefiningabeanoftype'com.gcy.springsecuritydemo.dao.user.UserDao'inyourconfiguration. DisconnectedfromthetargetVM,address:'127.0.0.1:61935',transport:'socket' Processfinishedwithexitcode1   解决办法:启动类加注解@MapperScan @SpringBootApplication @MapperScan("com.gcy.springsecuritydemo.dao")//mybatis扫描 publicclassSpringsecuri

  • VRRP-虚拟路由冗余协议

       1.什么是VRRP   2.VRRP:为什么需要负载分担   3.VRRP的基本配置   1.什么是VRRP   VRRP中文名称虚拟路由器冗余协议,它是一种路由容错协——也可以叫做备份路由协议,通常一个网络内的主机都设置一个缺省路由   VRRP的作用是充当网络中的一个默认网关,可以说PC定义的网关不生效的话,则整个网络都用不了,只能访问同一个VLAN内的。如果在没有部署VRRP之前,两台互相备份和负载分担的设备就设备了2个IP地址,都可以充当PC的网关,而PC又没有任务的检测机制来判断网关是否能出故障而进行切换。如果没有VRRP之前,则只能通过人工进行修改。这个工作量是非常巨大的。特别是在大型网络当中,非常不实际。   所以,VRRP解决的问题就是,通过VRRP技术协商,虚拟一个IP地址出来(VRRP可能直接使用接口定义的了地址的),这样做的好处就是,下面的PC只需要定义VRRP定义的那个IP地址作为网关即可,当主设备故障出现故障后,会自动切换到备用上面,从而对客户来说是透明的。 2.VRRP:为什么需要负载分担   在默认情况下,所有的数据包都是交给

  • 自己随便写点东西

     有时候要测试一下某个功能的并发能力,又不要想借助于其他测试工具,索性就自己写简单的demo模拟一个并发请求就最方便了。如果熟悉jemter的测试某接口的并发能力其实更专业,此处只是自己折腾着玩。 CountDownLatch和CyclicBarrier是jdkconcurrent包下非常有用的两个并发工具类,它们提供了一种控制并发流程的手段。其实查看源码它们都是在内部维护了一个计数器控制流程的 CountDownLatch:一个或者多个线程,等待其他多个线程完成某件事情之后才能执行; CyclicBarrier:多个线程互相等待,直到到达同一个同步点,再继续一起执行。    CountDownLatch和CyclicBarrier的区别 CountDownLatch的计数器,线程完成一个记录一个,计数器是递减  计数器,只能使用一次 CyclicBarrier的计数器更像是一个阀门,需要所有线程都到达,阀门才能打开,然后继续执行,计数器是递增  计数器提供reset功能,可以多次使用    另外Semaphore可以控同时访问的线程个数

  • python- generator生成器

    什么是生成器? 通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。   所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator   生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。   生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器    python中的生成器   要创建一个

  • BIO/NIO/AIO对比

    BIO\NIO\AIO对比 IO模型 就是使用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。 Java支持三种网络编程模型:BIO、NIO、AIO。 JavaBIO,同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善。 JavaNIO,同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求会被注册到多路复用器上,多路复用器轮询到有IO请求就会进行处理。 JavaAIO,异步非阻塞,AIO引入了异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。 BIO、NIO、AIO使用场景 BIO方式适用于连接数比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4之前唯一的选择,程序较为简单容易理解。 NIO方式适用于连接数目

  • UC浏览器 分享到朋友圈和微信好友 分类: JavaScript 2015-04-28 14:45 615人阅读 评论(1) 收藏

    用手机UC浏览器访问新浪微博,会注意到有这样的两个分享按钮: 在手机端浏览器里,点击分享按钮,就可以启动微信客户端并分享到微信。研究了下其源代码,存在这样的一个js:http://mjs.sinaimg.cn/wap/module/share/201504071745/js/addShare.min.js 从里面抽离出了分享调用的方法,方便调用。(注意:这个分享功能只在UC手机浏览器有效) if(/AppleWebKit.*Mobile/i.test(navigator.userAgent)||(/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){ if(window.location.href.indexOf("?mobile")<0){ try{ //判断是手机端访问 if(/Android|webOS|iPhone|i

  • python 06 8/28-8/30

    六 函数的返回值,使用return返回数据,可以同时返回多个数据,将会以元组的形式返回到函数的调用处。return具有返回数据和中止程序的作用! return后不加任何数据则返回None,判定为False。 关于【组包与解包】: 组包:python解释器自动将多个数据组装到一个容器中 解包:将容器中的多个数据拆出来 1. #组包:解释器把1,2,3自动组包成一个元组,然后赋值给a,a的类型就是元组类型的   a=1,2,3#相当于a=(1,2,3)   print(a)#(1,2,3)   print(type(a))#<class'tuple'> #解包:解释器会自动对元组(1,2)进行解包,然后把1赋值给m,把2赋值给n   m,n,k=(1,2,3)#m=1,n=2,k=3   print(m)#1   print(n)#2   print(k)#3 函数使用参数可以使函数变得更加通用,增加扩展性。参数的顺序有讲究,定义函数时,【形参顺序】 deffunc(位置参数,可变位置参数,默认参数,可变关键字参数):   pass

  • Java解数独

    1importjava.util.Scanner; 2importjava.util.Set; 3importjava.util.TreeSet; 4 5/* 6*解密9*9数独: 7*格子内填充1-9的数字(空格用0代替),使任意格子的行,列,九宫格都出现1-9的数字 8*注:对于空格较多的数独,遍历层次较深,需要使用更多的栈内存,应适当调节栈内存配置后运行 9*例: 10*800000000 11*003600000 12*070090200 13*050007000 14*000045700 15*000100030 16*001000068 17*008500010 18*090000400 19*结果: 20*812753649 21*943682175 22*675491283 23*154237896 24*369845721 25*287169534 26*521974368 27*438526917 28*796318452 29*/ 30publicclassMain{ 31 32staticint[][]source=newint[9][9];//原始数组 33

  • 理解、学习与使用 JAVA 中的 OPTIONAL

    理解、学习与使用JAVA中的OPTIONAL 从Java8引入的一个很有趣的特性是 Optional 类。Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException)——每个Java程序员都非常了解的异常。 本质上,这是一个包含有可选值的包装类,这意味着Optional类既可以含有对象也可以为空。 Optional是Java实现函数式编程的强劲一步,并且帮助在范式中实现。但是Optional的意义显然不止于此。   我们从一个简单的用例开始。在Java8之前,任何访问对象方法或属性的调用都可能导致 NullPointerException: String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();复制 在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查: if (user != n

相关推荐

推荐阅读