热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

每个Linux用户都应该知道的命令行技巧

JoshuaLevy平常就在Linux平台工作,并且他积累了不少实用命令行技巧,他在回复中精选出一部分。对技术用户来说,这些技巧挺重要或实

Joshua Levy 平常就在 Linux 平台工作,并且他积累了不少实用命令行技巧,他在回复中精选出一部分。对技术用户来说,这些技巧挺重要或实用,但知道的人并不多。下文略有点长,一般来说,用户也不需要对全部内容都了解,但为了达到省时方便的目的,Joshua Levy 仍不遗余力做了校对,以保证列出的每一条都值得一读,前提是你是一位Linux重度用户。

为了获取文中提到的一个命令的更多信息&#xff0c;先试下“man <命令名称>”&#xff0c;在一些情况下&#xff0c;为了让这条命令可以正常执行&#xff0c;你必须安装相应的包&#xff0c;可以用aptitude 或者 yum。如果失败了&#xff0c;求助Google。

基础篇

1、学习基础的Bash。事实上&#xff0c;读整个的bash的帮助手册&#xff1b;很容易理解而且篇幅也不算长。其他一些可选的shell外观可能更漂亮&#xff0c;但是bash功能很强大而且总是能用&#xff08;主要学习zsh或者tcsh在很多情况下你会受到限制&#xff09;。

2、学习vim&#xff0c;对于Linux下的随机编辑&#xff0c;几乎没有工具能出其右&#xff08;即使你大部分的时间里都在使用Emacs或者Eclipse&#xff09;。

通过ssh-agent&#xff0c;ssh-add等命令&#xff0c;了解ssh&#xff0c;以及跳过每次登陆时密码验证的基础办法&#xff0c;。

3、熟悉bash下的工作管理: &&#xff0c;Ctrl-Z&#xff0c;Ctrl-C&#xff0c;jobs&#xff0c;fg&#xff0c;bg&#xff0c;kill&#xff0c; 等等。

4、基础的文件管理&#xff1a;ls 以及 ls -l (特别的&#xff0c;学习”ls -l”中列出的每一列字段的含义)&#xff0c;less&#xff0c;head&#xff0c;tail&#xff0c;tail -f&#xff0c;ln&#xff0c;ln -s (学习软链接和硬链接的区别)&#xff0c;chown&#xff0c;chmod&#xff0c;du&#xff08;快速了解磁盘总体占用情况&#xff09;&#xff0c;df&#xff0c;mount。

5、基础的网络管理命令&#xff1a;ip 或者 ifconfig&#xff0c;dig。

了解正则表达式&#xff0c;以及grep、egrep的不同命令选项&#xff0c;-0&#xff0c;-A&#xff0c;-B 都值得了解一下。

学习使用apt-get 或者 yum(取决于你的发行包)来找到并安装你需要的包.

日常使用篇

1、使用bash时&#xff0c;用Ctrl-R来搜索命令的历史记录。

2、使用bash时&#xff0c;用Ctrl-W来清除最后一个单词&#xff0c;使用Ctrl-U来清除整行。可以查看man readline来获取bash里面默认键的绑定设置。内容很多。比如Alt-.(注&#xff1a;点)遍历之前命令中使用过的参数&#xff0c;Alt-* 扩展了参数的匹配模式。

3、回到上次的工作目录&#xff1a;cd -。

4、如果你的命令敲到一半时改变了主意&#xff0c;可以用Alt-#来在命令前面增加一个#&#xff0c;使之成为一行注释&#xff08;或者使用Ctrl-A回到命令开头&#xff0c;然后再键入#&#xff09;。你可以之后再通过搜索历史记录回来。

5、使用xargs&#xff08;或者parallel&#xff09;。它非常强大。注意你能控制每一行(-L)执行多少项&#xff0c;也能控制如何并发&#xff08;- P&#xff09;。如果你不太确定它会如你所愿的工作&#xff0c;先使用xargs。 再者&#xff0c;-l{} 很有用。例如&#xff1a;

1

2

find . -name \*.py | xargs grep some_function

cat hosts | xargs -l{} ssh root&#64;{} hostname

6、pstree -p 可以很方便的显示整个进程树。

使用pgrep 和pkill 来通过名字来发现进程或者给进程发信号&#xff08;-f选项会有用&#xff09;。

7、了解你能向进程发送的信号种类。比如&#xff0c;要挂起一个进程&#xff0c;使用kill -STOP [进程ID]。要了解整个列表&#xff0c;请参考man 7 signal。

8、如果你想让一个后台进程一直运行&#xff0c;使用nohup or disown 。

9、通过netstat -lntp 来检测哪些进程在监听。同样可以用lsof。

10、bash脚本中&#xff0c;使用set -x 来调试输出。使用set -e在有错误时终止时终止执行。要想严格输出错误&#xff0c;可以考虑使用set -o pipefail&#xff08;虽然这个主题说起来有些复杂&#xff09;。对于更复杂的脚本&#xff0c;也可以使用trap。

数据处理篇

1、把HTML转成文本&#xff1a;lynx -dump 标准输入

2、如果要处理XML&#xff0c;xmlstarlet会很棒。

3、对于Amazon S3&#xff0c;s3cmd 很方便&#xff08;虽然还不太成熟&#xff0c;可能会有一些不太好的特性&#xff09;。

4、了解sort 以及 uniq&#xff08;包括uniq的 -u 以及 -d 选项&#xff09;。

5、了解cut&#xff0c;paste&#xff0c;join 来操作文本文件。许多人使用cut但却忘了还有join。

6、当你要在文件之间做集合的加&#xff0c;减&#xff0c;以及差运算时&#xff0c;用sort/uniq是非常方便的。假如a和b是两个已经去重的文本文件&#xff0c;那么运算起来会很快&#xff0c;而且可以在任意大小的文件之间执行操作&#xff0c;甚至可以到GB字节大小。&#xff08;sort不受内存限制&#xff0c;不过如果/tmp 在一个很小的root分区的话&#xff0c;你可能需要使用-T选项&#xff09;

1
2
3
cat a b | sort | uniq > c # c is a union b
cat a b | sort | uniq -d > c # c is a intersect b
cat a b b | sort | uniq -u > c # c is set difference a - b

7、了解本地化会影响到许多命令行的工作&#xff0c;包括排序的顺序和性能。多数的linux安装包会把LANG或者其他一些本地化的变量设置为类似美国英语的一个本地设置。这会让sort和其他一些命令运行起来慢很多。&#xff08;注意即使你使用UTF-8编码的文本&#xff0c;你仍然可以放心的通过ASCII码的顺序来排序&#xff0c;这一点用处很多&#xff09;为避免i18n拖慢日常的工作&#xff0c;使用传统的基于字节的排序顺序&#xff0c;使用export LC_ALL&#61;C&#xff08;实际上&#xff0c;考虑在你的.bashrc里加进去&#xff09;。

系统调试篇

1、对于web调试来说&#xff0c;curl和curl -l会有用&#xff0c;以及和wget相同的那部分功能。

2、如果想了解磁盘/cpu/网络的状态&#xff0c;可以使用iostat&#xff0c;netstat&#xff0c;top(更好一些的话&#xff0c;用htop)&#xff0c;以及&#xff08;尤其是&#xff09;dstat&#xff0c;对于想快速了解系统当前正在发生的事情&#xff0c;非常的方便。如果想了解内存当前的状态&#xff0c;可以使用free以及vmstat&#xff0c;还要了解各项输出的含义。特别值得一提的是&#xff0c;你要知道“cached”的数值是linux内核保留用来做文件缓存的空间的大小&#xff0c;所以真正可用的有效内存是“free”项的对应值。

3、java的系统调试则完全是另外一回事&#xff0c;但在Sun以及其他的JVM上有一个简单的技巧&#xff0c;就是你可以运行kill -3 ,得到一个完整的栈调用轨迹以及堆使用的总体情况&#xff08;包括产生的垃圾回收细节&#xff0c;这里面包含有很多的信息&#xff09;&#xff0c;会被定向到标准错误或者日志。

4、使用mtr作为更好的网络追踪&#xff0c;识别网络存在的问题。

5、要查看一个磁盘是否是满的&#xff0c;ncdu要比一般用的“du -sk *”要快。

要查看哪些socket或者进程在占用带宽&#xff0c;试试iftop或者netlogs。

6、ab 工具&#xff08;随apache的安装包一起发布&#xff09;对于检测网络服务器的性能很有帮助&#xff0c;对于更加复杂的压力测试&#xff0c;可以试下siege。对于更加严重的网络问题的调试&#xff0c;试试wireshark或者tshark。了解strace和ltrace。这在一个程序突然失败&#xff0c;挂掉&#xff0c;或者崩溃&#xff0c;而你却不知所措&#xff0c;或者是你想知道程序的整体性能的情况时&#xff0c;会很有帮助。可以注意下-c和-p选项。

了解用ldd来检查共享库函数等的一些问题。

以上信息对你来说一定是有用的&#xff0c;现在没吸收不要紧&#xff0c;转到朋友圈慢慢看吧&#xff01;


推荐阅读
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • Linux系统快捷键大全及使用技巧
    本文详细介绍了Linux系统中的各种快捷键,包括命令行和VIM编辑器中的常用快捷键,帮助用户提高操作效率。同时,文章还提供了关于字体配置、软件安装等方面的实用信息。 ... [详细]
  • 本文详细介绍了在Mac平台上安装和配置MySQL的步骤,包括下载安装包、卸载MySQL以及解决命令行中找不到mysql命令的问题。 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 阿里云服务器搭建详解——Ubuntu
    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器。听朋友说,学生买的话是非常便宜 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 如何在Linux中配置环境变量:命令与脚本详解
    请关注本头条号,每天坚持更新原创干货技术文章。当您在Linux命令行上键入命令时,您实际是在告诉shell运行指定名称的可执行文件。在Linux中,这些可执行程序通常位于系统上的几 ... [详细]
  • jupyterlab部署到docker
    操作环境:macOS10.14.6docker版本:10.03.1终端:iterm23.3时间:2019年8月::说明::jupyter没有提供单独的jupyterlab镜像,可以 ... [详细]
  • 互联网世界 9 种基本的商业模式
    互联网世界9种基本的商业模式一个商业模式是运行一个公司的方法;通过该模式的运作,一个公司能维持自己的生存,就是说,能有收益。商业模式意味着一个公司是如何通过在价值链中定位自己,从而获 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
author-avatar
lhpa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有