欢迎登录课课家教育
看不清
√
十天内免登录
忘记密码?
登录
还没账号?
马上注册
注册有礼!
登录
首页
视频课程
模拟题库
新闻中心
IT文库
读书
招聘
博客
论坛
商城
hot
我的课课家
软考
photoshop
oracle
PHP
hcnp
Maya
java
1-5折限时秒杀
限时折扣专场
优惠课程套餐
进阶学习线路图
考试认证
软考
|
华为认证
|
思科认证
|
H3C认证
|
等级考试
|
一级建造师
|
二级建造师
|
PMP考试
|
注册安全工程师
|
其他
|
编程语言
Java
|
C/C++
|
Python
|
.Net
|
VB
|
R语言
|
Go语言
|
其他
|
设计
平面设计
|
网页设计
|
室内设计
|
工业设计
|
交互设计
|
CG插画
|
二维动画
|
三维动画
|
游戏美术
|
建筑设计
|
影视后期
|
包装设计
|
其他
|
Web开发
PHP
|
ASP
|
AJAX
|
Javascript
|
jQuery
|
Html/CSS
|
XML/XSL
|
Dreamweaver
|
浏览器技术
|
其他
|
移动开发
Android
|
IOS
|
Swift
|
Webapp
|
微信开发
|
HTML5
|
其他
|
游戏开发
Cocos2d-x
|
Unity3D
|
手游开发
|
3D游戏
|
开发工具
|
其他
|
数据库
MySQL
|
Access
|
Oracle
|
SQL Server
|
NoSQL
|
MongoDB
|
其他
|
系统/运维
Linux
|
Windows
|
Mac os
|
Exchange
|
服务器集群
|
shell script
|
Vmware
|
网络管理
|
路由交换
|
其他
|
Office
Excel
|
Word
|
PPT
|
其他
|
云计算
OpenStack
|
虚拟化
|
云平台
|
Office 365
|
云服务
|
Docker
|
其他
|
产品/运营
产品设计
|
活动策划
|
数据分析
|
网络编辑
|
其他
|
大数据
Spark
|
Hadoop
|
Hive
|
其他
|
嵌入式开发
嵌入式Linux
|
驱动/内核开发
|
单片机/工控
|
物联网
|
软件研发
软件测试
|
敏捷开发
|
研发管理
|
软件设计
|
软件架构
|
其他
|
企业信息化
ERP
|
BPM
|
管理软件
|
其他
|
其它
IT职场
|
网络营销
|
多媒体
|
互联网运营
|
其他
|
名课折扣
免费课程
套餐
学习线路图
专题课程
老男孩Linux系统
设计软件教程
计算机考证
公众号/APP端
关注微信公众号,可下载APP应用。
帮助中心
创建学院
客服QQ:3315713922
IT培训
/
新闻资讯
/ 大数据教程
/ Linux命令行的日常使用技术
Linux命令行的日常使用技术
作者:课课家 来源: www.kokojia.com
点击数:657
发布时间: 2015-10-28 19:45:07
标签:
Linux命令
打开这篇文章的人,都是爱问的人,我下面给大家讲讲。
有人说
Linux
的命令行就是一种艺术,由命令行形成的Linux系统的架构呈现丰富多变的样貌,这就才是Linux的魅力所在。本文就来介绍一下Linux命令行的日常使用技术。
日常使用
在Bash中,使用 tab 补完参数,使用 ctrl-r 来搜索命令历史。
在Bash中,使用 ctrl-w 来删除最后的单词,使用 ctrl-u 来删除整行,返回行首。使用 alt-b 和alt-f 来逐词移动,使用 ctrl-k 来清除到行尾的内容,以及使用 ctrl-l 清屏。参见 man readline来查看 Bash 中所有默认的键盘绑定,有很多。例如,alt-。 可以循环显示先前的参数,而alt- 扩展通配。(LCTT 译注:关于 Bash 下的快捷键,可以参阅: https://linux.cn/article-5660-1.html)
另外,如果你喜欢 vi 风格的键盘绑定,可以使用 set -o vi。
要查看最近用过的命令,请使用 history 。 有许多缩写形式,比如 !$(上次的参数)和!!(上次的命令),虽然使用 ctrl-r 和 alt-。 更容易些。(LCTT 译注:关于历史扩展功能,可以参阅: https://linux.cn/article-5658-1.html )
返回先前的工作目录: cd -
如果你命令输入到一半,但是改变主意了,可以敲 alt-# 来添加一个 # 到开头,然后将该命令作为注释输入(或者使用快捷键 ctrl-a, #,enter 输入)。然后,你可以在后面通过命令历史来回到该命令。
使用 xargs(或 parallel),它很强大。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
find 。-name ’*.py‘| xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
pstree -p 对于显示进程树很有帮助。
使用 pgrep 和 pkill 来按名称查找进程或给指定名称的进程发送信号(-f 很有帮助)。
掌握各种可以发送给进程的信号。例如,要挂起进程,可以使用 kill -STOP [pid]。完整的列表可以查阅 man 7 signal。
如果你想要一个后台进程一直保持运行,使用 nohup 或 disown。
通过 netstat -lntp 或 ss -plat 检查哪些进程在**(用于 TCP,对 UDP 使用 -u 替代 -t)。
lsof来查看打开的套接字和文件。
在 Bash 脚本中,使用 set -x 调试脚本输出。尽可能使用严格模式。使用 set -e 在遇到错误时退出。也可以使用 set -o pipefail,对错误进行严格处理(虽然该话题有点微妙)。对于更复杂的脚本,也可以使用 trap。
在 Bash 脚本中,子 shell(写在括号中的)是组合命令的便利的方式。一个常见的例子是临时移动到一个不同的工作目录,如:
# 在当前目录做些事
linux系统
(cd /some/other/dir; other-command)
# 继续回到原目录
注意,在 Bash 中有大量的各种各样的变量扩展。检查一个变量是否存在:${name:?error message}。例如,如果一个Bash脚本要求一个单一参数,只需写 input_file=${1:?usage: $0 input_file}。算术扩展:i=$(( (i + 1) % 5 ))。序列: {1..10}。修剪字符串:${var%suffix} 和${var#prefix}。例如,if var=foo.pdf ,那么 echo ${var%.pdf}.txt 会输出 foo.txt。
命令的输出可以通过 《(some command) 作为一个文件��处理。例如,将本地的 /etc/hosts 和远程的比较:
diff /etc/hosts 《(ssh somehost cat /etc/hosts)
了解 Bash 中的“嵌入文档”,就像在 cat 《《EOF 。.. 中。
在 Bash 中,通过:some-command 》logfile 2》&1 同时重定向标准输出和标准错误。通常,要确保某个命令不再为标准输入打开文件句柄,而是将它**到你所在的终端,添加 《/dev/null 是个不错的做法。
man ascii 可以得到一个不错的ASCII表,带有十六进制和十进制值两种格式。对于常规编码信息,man unicode,man utf-8 和 man latin1 将很有帮助。
使用 screen 或 tmux 来复用屏幕,这对于远程 ssh 会话尤为有用,使用它们来分离并重连到会话。另一个只用于保持会话的最小可选方案是 dtach。
在 ssh 中,知道如何使用 -L 或 -D(偶尔也用-R)来打开端口通道是很有用的,如从一台远程服务器访问网站时。
为你的 ssh 配置进行优化很有用;例如,这个 ~/.ssh/config 包含了可以避免在特定网络环境中连接被断掉的情况的设置、使用压缩(这对于通过低带宽连接使用 scp 很有用),以及使用一个本地控制文件来开启到同一台服务器的多通道:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMasterauto
ControlPath/tmp/%r@%h:%p
ControlPersist yes
其它一些与 ssh 相关的选项对会影响到安全,请小心开启,如各个子网或主机,或者在信任的网络中:StrictHostKeyChecking=no, ForwardAgent=yes
要获得八进制格式的文件的权限,这对于系统配置很有用而用 ls 又没法查看,而且也很容易搞得一团糟,可以使用像这样的东西:
stat -c ’%A %a %n‘/etc/timezone
对于从另一个命令的输出结果中交互选择值,可以使用percol。
对于基于另一个命令(如git)输出的文件交互,可以使用fpp (路径选择器)。
要为当前目录(及子目录)中的所有文件构建一个简单的 Web 服务器,让网络中的任何人都可以获取,可以使用:
Python
-m SimpleHTTPServer 7777 (使用端口 7777 和 Python 2)。
处理文件和数据
linux系统下载
要在当前目录中按名称定位文件,find 。 -iname ’*something*‘(或者相类似的)。要按名称查找任何地方的文件,使用 locate something(但请记住,updatedb 可能还没有索引最近创建的文件)。
对于源代码或数据文件进行的常规搜索(要比 grep -r 更高级),使用 ag。
要将 HTML 转成文本:lynx -dump -stdin。
对于 Markdown、HTML,以及各种类型的文档转换,可以试试 pandoc。
如果你必须处理 XML,xmlstarlet 虽然有点老旧,但是很好用。
对于 JSON,使用jq。
对于
Excel
或 CSV 文件,csvkit 提供了 in2csv,csvcut,csvjoin,csvgrep 等工具。
对于亚马逊 S3 ,s3cmd 会很方便,而 s4cmd 则更快速。亚马逊的 aws 则是其它 AWS 相关任务的必备。
掌握 sort 和 uniq,包括 uniq 的 -u 和 -d 选项——参见下面的单行程序。
掌握 cut,paste 和 join,它们用于处理文本文件。很多人会使用 cut,但常常忘了 join。
了解 tee,它会将 stdin 同时复制到一个文件和 stdout,如 ls -al | tee file.txt。
知道 locale 会以微妙的方式对命令行工具产生大量的影响,包括排序的顺序(整理)以及性能。大多数安装好的 Linux 会设置 LANG 或其它 locale 环境变量为本地设置,比如像 US English。但是,你要明白,如果改变了本地环境,那么排序也将改变。而且 i18n 过程会让排序或其它命令的运行慢好多倍。在某些情形中(如像下面那样的设置操作或唯一性操作),你可以安全地整个忽略缓慢的 i18n 过程,然后使用传统的基于字节的排序顺序 export LC_ALL=C。
了解基本的改动数据的 awk 和 sed 技能。例如,计算某个文本文件第三列所有数字的和:awk ’{ x += $3 } END { print x }‘。这可能比 Python 的同等操作要快3倍,而且要短3倍。
在一个或多个文件中,替换所有出现在特定地方的某个字符串:
perl -pi.bak -e ’s/old-string/new-string/g‘my-files-*.txt
要立即根据某个模式对大量文件重命名,使用 rename。对于复杂的重命名,repren 可以帮助你达成。
# 恢复备份文件 foo.bak -》 foo:
rename ’s/\\\\.bak$//‘*.bak
# 完整的文件名、目录名 foo -》 bar:
repren --full --preserve-case--from foo --to bar 。
使用 shuf 来从某个文件中打乱或随机选择行。
了解 sort 的选项。知道这些键是怎么工作的(-t和-k)。特别是,注意你需要写-k1,1来只通过第一个字段排序;-k1意味着根据整行排序。
稳定排序(sort -s)会很有用。例如,要首先按字段2排序,然后再按字段1排序,你可以使用sort -k1,1 | sort -s -k2,2
如果你曾经需要在 Bash 命令行中写一个水平制表符(如,用于 -t 参数的排序),按ctrl-v [Tab],或者写$’\\\\t‘(后面的更好,因为你可以复制/粘贴)。
对源代码进行补丁的标准工具是 diff 和 patch。 用 diffstat 来统计 diff 情况。注意 diff -r可以用于整个目录,所以可以用 diff -r tree1 tree2 | diffstat 来统计(两个目录的)差异。
对于二进制文件,使用 hd 进行简单十六进制转储,以及 bvi 用于二进制编辑。
还是用于二进制文件,strings(加上 grep 等)可以让你找出一点文本。
对于二进制文件的差异(delta 压缩),可以使用 xdelta3。
要转换文本编码,试试 iconv 吧,或者对于更高级的用途使用 uconv;它支持一些高级的 Unicode 的东西。例如,这个命令可以转换为小写并移除所有重音符号(通过扩展和丢弃):
uconv -f utf-8-t utf-8-x ’::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] 》; ::Any-NFC; ‘《 input.txt 》 output.txt
要将文件分割成几个部分,来看看 split(按大小分割)和 csplit(按格式分割)吧。
使用 zless,zmore,zcat 和 zgrep 来操作压缩文件。
系统调试
对于 Web 调试,curl 和 curl -I 很方便灵活,或者也可以使用它们的同行 wget,或者更现代的 httpie。
要了解磁盘、CPU、网络的状态,使用
IOS
tat,netstat,top(或更好的 htop)和(特别是)dstat。它们对于快速获知系统中发生的状况很好用。
对于更深层次的系统总览,可以使用 glances。它会在一个终端窗口中为你呈现几个系统层次的统计数据,对于快速检查各个子系统很有帮助。
要了解内存状态,可以运行 free 和 vmstat,看懂它们的输出结果吧。特别是,要知道“cached”值是Linux内核为文件缓存所占有的内存,因此,要有效地统计“free”值。
Java
系统调试是一件截然不同的事,但是对于
Oracle
系统以及其它一些 JVM 而言,不过是一个简单的小把戏,你可以运行 kill -3 《pid》,然后一个完整的堆栈追踪和内存堆的摘要(包括常规的垃圾收集细节,这很有用)将被转储到stderr/logs。
使用 mtr 作路由追踪更好,可以识别网络问题。
对于查看磁盘满载的原因,ncdu 会比常规命令如 du -sh * 更节省时间。
要查找占用带宽的套接字和进程,试试 iftop 或 nethogs 吧。
(
Apache
附带的)ab工具对于临时应急检查网络服务器性能很有帮助。对于更复杂的负载测试,可以试试 siege。
对于更仔细的网络调试,可以用 wireshark,tshark 或 ngrep。
掌握 strace 和 ltrace。如果某个程序失败、挂起或崩溃,而你又不知道原因,或者如果你想要获得性能的大概信息,这些工具会很有帮助。注意,分析选项(-c)和使用 -p 关联运行进程。
掌握 ldd 来查看共享库等。
知道如何使用 gdb 来连接到一个运行着的进程并获取其堆栈追踪信息。
使用 /proc。当调试当前的问题时,它有时候出奇地有帮助。样例:/proc/cpuinfo,/proc/xxx/cwd,/proc/xxx/exe,/proc/xxx/fd/,/proc/xxx/smaps。
当调试过去某个东西为何出错时,sar 会非常有帮助。它显示了 CPU、内存、网络等的历史统计数据。
对于更深层的系统和性能分析,看看 stap (SystemTap),perf) 和 sysdig 吧。
确认是正在使用的 Linux 发行版版本(支持大多数发行版):lsb_release -a。
每当某个东西的行为异常
(可能是硬虽然看起来难,但是操作还是很简单的。
件或者驱动器问题),使用dmesg。
单行程序
这是将命令连成一行的一些样例:
linux系统安装教程
有时候通过 sort/uniq 对文本文件做交集、并集和差集运算时,这个例子会相当有帮助。假定 a和 b 是已经进行了唯一性处理的文本文件。这会很快,而且可以处理任意大小的文件,总计可达数千兆字节。(Sort不受内存限制,不过如果 /tmp 放在一个很小的根分区的话,你可能需要使用 -T 选项。)也可参见上面关于LC_ALL的注解和 -u 选项(参见下面例子更清晰)。
sh cat a b | sort | uniq 》 c # c 是 a 和 b 的并集
cat a b | sort | uniq -d 》 c # c 是 a 和 b 的交集
cat a b b | sort | uniq -u 》 c # c 是 a 减去 b 的差集
使用 grep 。 * 来可视化查看一个目录中的所有文件的所有内容,例如,对于放满配置文件的目录: /sys, /proc, /etc。
对某个文本文件的第三列中所有数据进行求和(该例子可能比同等功能的Python要快3倍,而且代码也少于其3倍):
awk ’{ x += $3 } END { print x }‘ myfile
如果想要查看某个文件树的大小/日期,该例子就像一个递归ls -l,但是比ls -lR要更容易读懂:
find 。-type f -ls
只要可以,请使用 xargs 或 parallel。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
find 。-name ’*.py‘| xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
比如说,你有一个文本文件,如 Web 服务器的日志,在某些行中出现了某个特定的值,如 URL 中出现的 acct_id 参数。如果你想要统计有多少个 acct_id 的请求:
cat
Access
.log | egrep -o ’acct_id=[0-9]+‘| cut -d=-f2 | sort | uniq -c | sort-rn
运行该函数来获得来自本文的随机提示(解析Markdown并从中提取某个项目):
function taocl(){
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v ”(html/body/ul/li[count(p)》0])[$RANDOM mod last()+1]“|
xmlstarlet unesc | fmt -80
}
晦涩难懂,但却有用
expr:实施算术或布林操作,或者求正则表达式的值
m4:简单的宏处理器
yes:大量打印一个字符串
cal:漂亮的日历
env:(以特定的环境变量设置)运行一个命令(脚本中很有用)
look:查找以某个字符串开头的英文单词(或文件中的行)
cut 和 paste 以及 join:数据处理
fmt:格式化文本段落
pr:格式化文本为页/列
fold:文本折行
column:格式化文本为列或表
expand 和 unexpand:在制表符和空格间转换
nl:添加行号
seq:打印数字
bc:计算器
factor:分解质因子
gpg:加密并为文件签名
toe:terminfo 条目表
nc:网络调试和数据传输
socat:套接字中继和 tcp 端口转发(类似 netcat)
slurm:网络流量可视化
dd:在文件或设备间移动数据
file:识别文件类型
tree:以树形显示目录及子目录;类似 ls,但是是递归的。
stat:文件信息
tac:逆序打印文件
shuf:从文件中随机选择行
comm:逐行对比分类排序的文件
hd和bvi:转储或编辑二进制文件
strings:从二进制文件提取文本
tr:字符转译或处理
iconv或uconv:文本编码转换
split和csplit:分割文件
linux系统入门学习
units:单位转换和计算;将每双周(fortnigh)一浪(浪,furlong,长度单位,约201米)转换为每瞬(blink)一缇(缇,twip,一种和屏幕无关的长度单位)(参见: /usr/share/units/definitions.units)(LCTT 译注:这都是神马单位啊!)
7z:高比率文件压缩
ldd:动态库信息
nm:目标文件的符号
ab:Web 服务器基准测试
strace:系统调用调试
mtr:用于网络调试的更好的路由追踪软件
cssh:可视化并发 shell
rsync:通过 SSH 同步文件和文件夹
wireshark 和 tshark:抓包和网络调试
ngrep:从网络层摘取信息
host 和 dig:DNS查询
lsof:处理文件描述符和套接字信息
dstat:有用的系统统计数据
glances:高级,多个子系统概览
iostat:CPU和磁盘使用率统计
htop:top的改进版
last:登录历史
w:谁登录进来了
id:用户/组身份信息
sar:历史系统统计数据
iftop或nethogs:按套接口或进程的网络使用率
ss:套接口统计数据
dmesg:启动和系统错误信息
hdparm:SATA/ATA 磁盘操作/改善性能
lsb_release:Linux 发行版信息
lsblk:列出块设备,以树形展示你的磁盘和分区
lshw:硬件信息
fortune,ddate 和 sl:嗯,好吧,它取决于你是否认为蒸汽机车和 Zippy 引用“有用”
以上就是Linux命令行的日常使用技术了,只要熟练掌握了Linux命令行,就能像一个真正的
设计
师一样,操作和驾驭Linux系统。
要有实践出自知,可到课课家官网查看具体内容。
www.kokojia.com
赞(
14
)
踩(
0
)
分享到:
上一篇:
在Linux系统中挂载LVM分区的步骤
下一篇:
怎样用acdsee去除图片中多余的人
最新教程
Tiedemann 发布的数据集让非洲语言也能「机翻」
Java和大数据应该如何选?选对让你薪资翻番
人工智能无人机飞进农村,这一价值你绝对想不到
大数据在智能照明中如此重要?
人工智能是可再生能源电网复原力的关键
热门教程
大数据计算会越来越准确
大数据的26道数据科学技能测试题
开源语言Logica:用于大数据处理
大数据分布式文件系统HDFS
大数据在医疗行业的5个具体应用案例
大数据为您推荐
利用Kettle+FineBI+MySQL构建电商运营分析报表可视化平台视频教程
4695 人在学
大数据从入门到精通(徐培成亲授)视频教程
27409 人在学
Kettle从入门到精通视频教程
28616 人在学
Hadoop大数据从入门到精通(行业最强,备javaee)视频教程
52952 人在学
基于Flink流处理的动态实时电商实时分析系统视频教程
22889 人在学
资料下载
2022下半年信息系统项目管理师上午综合知识真题及答案解析
2022下半年信息系统项目管理师下午案例分析真题及答案解析
2022下半年系统集成项目管理工程师上午真题及答案解析
2022下半年系统集成项目管理工程师下午真题及答案解析
2022下半年网络工程师上午真题及答案解析
查看更多相关资料
推荐查看
Pentaho
数据库视频
数据化运营
推荐系统
技术
知识总结
DataLeap
工具
php
ssh架构
人物设计
数据分析.虚拟化
网络安全技术
大数据技术
系统架构
项目
分布式存储
TDSQL
数据分析学习视频
聚类算法
浏览器
机器学习
场景化
数据采集
云服务
医疗保健
SQL
大数据结构
移动
开发工具课程
热门资讯
在Excel表格中输入日期的五种方法与技巧
office最常用的三大办公软件
word如何取消自动编号(教你4个方法关闭word自动编号)
AI教程:如何让图形沿着路径复制?
四步教你在excel柱形图上添加折线图
【Python 课堂】第4课——变量
怎么在word表格中显示和隐藏表格中的虚线框
AI教程:如何沿着对象的路径输入文字?
9个最全游戏制作软件大全
MAC Excel 在单元格中如何换行?
热门图书
Web前端开发技术:HTML、CSS、JavaScript
网页设计与网站建设完全实战手册
HTML5秘籍(第2版)
跟老齐学Python:从入门到精通
HTML5跨平台游戏设计-从入门到超人气游戏开发实战
JavaEE开发的颠覆者: Spring Boot实战
写给大忙人看的Java核心技术
Unity 5.X 3D游戏开发技术详解与典型案例
Python算法教程
Python数据分析与挖掘实战