10 个小技巧助你快速成为 Linux 高手!

可莉
• 阅读 543

点击上方“杰哥的IT之旅”,选择“置顶公众号”

干货、福利第一时间送达!

10 个小技巧助你快速成为 Linux 高手!

10 个小技巧助你快速成为 Linux 高手!

10 个小技巧助你快速成为 Linux 高手!  推荐五个高质量的公众号 10 个小技巧助你快速成为 Linux 高手!

让我们面对现实吧:坏习惯很难改变。但是您已经熟悉的习惯可能更难克服。有时,重新审视某些事情可能让您遇到“啊哈,我没想到它能做到这一点!”的时刻。本文将提供另外 10 个小技巧,可以使您成为更高效的 Linux 高手。

是哪10个小技巧呢?如下:

  • 使用文件名自动补全功能 (file name completion)。

  • 使用历史扩展。

  • 重用以前的参数。

  • 使用 pushd 和 popd 管理目录导航。

  • 查找大型文件。

  • 不使用编辑器创建临时文件。

  • 使用 curl 命令行实用工具。

  • 最有效地利用正则表达式。

  • 确定当前用户。

  • 使用 awk 处理数据。

1. 文件名自动补全

文件名自动补全功能让你无需在命令提示符处键入各种又臭又长的文件名,避免输入错误,提高效率。这个功能在各个 Shell 中的工作方式略有不同,所以首先请确定自己用的是哪种shell。

我正在运行哪种 Shell?

可以使用 echo $0 或 ps -p $$ 命令显示您正在使用的 Shell。

List1:确定你的shell

$ echo $0-bash$ ps –p $$PID TTY TIME CMD6344 ttys000 0:00.02 –bash

C Shell

C Shell 支持最直接文件名补全功能。设置 filec 变量即可启用该功能(使用命令 set filec)。

在您开始键入文件名后,可以按 Esc 键,Shell 将补全文件名或者补全尽可能多的部分。

例如,假设有名为 file1、file2 和 file3 的文件。如果键入 f,然后按 Esc 键,将填充 file,之后你需要输入 1、2 或 3 来完成相应的文件名。

Bash

Bash Shell 也提供了文件名补全功能,但它使用 的是Tab 键。您在 Bash Shell 中不需要设置任何选项即可启用文件名补全功能,该选项是缺省设置的。

Bash 还实现了其他功能。键入文件名的一部分后,按 Tab 键,如果有多个文件满足您的请求,并且您需要添加文本以选择其中一个文件,那么您可以多按 Tab 键两次,以显示与您目前键入的内容相匹配的文件的列表。

用之前名为 file1、file2 和 file3 的文件示例,首先键入 f。当按一次 Tab 键时,Bash 自动补全显示file;再按一次 Tab 键时,将展开列表 file1 file2 file3。

Korn Shell

对于 Korn Shell 用户,文件名补全功能取决于 EDITOR 变量的值。如果 EDITOR 设置为 vi,那么您键入部分名称,然后按 Esc 键后跟反斜杠 () 字符。

如果 EDITOR 设置为 emacs,那么您键入部分名称,然后按两次 Esc 键以补全文件名。

2. 使用历史扩展

如果你的一系列命令都用了相同的文件名,会发生什么情况?有一种快捷方式可以快速获得你上次使用的文件名。如List 2 所示,!$ 命令返回前一个命令使用的文件名。

从文件 this-is-a-long-lunch-menu-file.txt 中搜索单词 pickles 的出现位置。

搜索结束后,用 vi 命令来编辑 this-is-a-long-lunch-menu-file.txt 文件,而不需要重新键入文件名。

用感叹号 (!) 来访问历史,然后使用美元符号 ($) 返回前一命令的最后字段。

如果你需要反复用到长文件名,那么这是一个非常好的工具。

List2:用 !$ 获得前一个命令使用的文件名

$ grep pickles this-is-a-long-lunch-menu-file.txtpastrami on rye with pickles and onions$ vi !$

3. 重用以前的参数

!$ 命令返回某个命令使用的上一个文件名参数。但如果某个命令使用多个文件名,而您只希望重用其中一个文件名,该如何做?

!:1 操作符返回某个命令使用的第一个文件名。

List 3 中的示例显示可以如何将此操作符与 !$ 运算符组合使用。在第一个命令中,将一个文件重新命名为更有意义的名称,但为了保持原始文件名可用,创建了一个符号链接。

重新命名文件 kxp12.c 以提高可读性,然后使用 link 命令来创建到原始文件名的符号链接,以防在其他位置使用该文件名。

!$ 操作符返回 file_system_access.c 文件名,而 !:1 操作符返回 kxp12.c 文件名,该文件名是上个命令的第一个文件名。

List3:组合使用 !$ 和 !:1

$ mv kxp12.c file_system_access.c$ ln –s !$ !:1

4. 使用 pushd 和 popd 管理目录导航

UNIX 支持各种目录导航工具,我最喜欢的两款提高工作效率的工具是 pushd 和 popd。您肯定知道 cd 命令用于更改当前目录。如果要在多个目录中导航,但希望能够快速返回某个位置,该如何做?

pushd 和 popd 命令创建一个虚拟目录堆栈,pushd 命令用来更改您的当前目录并将其存储在堆栈中,而 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。可以使用 dirs 命令来显示当前目录堆栈。

List4:使用 pushd 和 popd 在目录树中导航

$ pushd .~ ~$ pushd /etc/etc ~ ~$ pushd /var/var /etc ~ ~$ pushd /usr/local/bin/usr/local/bin /var /etc ~ ~$ dirs/usr/local/bin /var /etc ~ ~$ popd/var /etc ~ ~$ popd/etc ~ ~$ popd~ ~$ popd

pushd 和 popd 命令还支持使用参数处理目录堆栈。使用 +n 或 -n 参数,其中 n 是一个数字,可以向左或向右移动堆栈:

List5:旋转目录堆栈

$ dirs/usr/local/bin /var /etc ~ ~$ pushd +1/var /etc ~ ~ /usr/local/bin$ pushd -1~ /usr/local/bin /var /etc ~

5. 查找大型文件

有时候需要找出磁盘空间到底被什么占用了?可以使用以下几个工具来管理存储设备。

df 命令显示每个可用卷上已使用的块的总数以及空闲空间的百分比。

List6:确定各卷的使用情况

$ dfFilesystem 512-blocks Used Available Capacity Mounted on/dev/disk0s2 311909984 267275264 44122720 86% /devfs 224 224 0 100% /devfdesc 2 2 0 100% /devmap -hosts 0 0 0 100% /netmap auto_home 0 0 0 100% /home

要查找大型文件?用 find 命令时附带 -size 参数。List 7 显示了如何使用 find 命令来查找大于 10MB 的文件。注意,-size 参数以 KB 为单位计量大小。

List7:查找大于10MB的所有文件

$ find / -size +10000k –xdev –exec ls –lh {};

6. 不要用编辑器创建临时文件

下面是个简单示例:需要快速创建一个简单临时文件,但不想启动编辑器。使用带有 > 文件重定向操作符的 cat 命令。

如List 8所示,使用不带文件名的 cat 命令只回显向标准输入键入的任何内容;> 重定向将该输入捕获到指定的文件中。注意,在结束输入时必须提供文件结束字符,一般是 Ctrl-D。

List8:快速创建临时文件

$ cat > my_temp_file.txtThis is my temp file text^D$ cat my_temp_file.txtThis is my temp file text

要执行相同操作,但是附加到现有文件而不是创建新文件。如List 9 所示,改用 >> 操作符。>> 文件重定向操作符向现有文件附加内容。

List9:快速向文件附加内容

$ cat >> my_temp_file.txtMore text^D$ cat my_temp_file.txtThis is my temp file textMore text

7. 使用 curl 命令行实用工具

想从命令行访问 Web?用 curl 命令!curl 命令使您可以使用 HTTP、HTTPS、FTP、FTPS、Gopher、DICT、TELNET、LDAP 或 FILE 协议从服务器检索数据。

例如,用 curl 命令来下载 HTTP 托管的文件。使用 -o 参数来指定保存输出的位置

List10:用 curl 下载文件

$ curl -o archive.tar http://www.somesite.com/archive.tar

curl命令非常强大,可以通过man curl了解更多它的功能 。

8. 最有效的利用正则表达式

大量 UNIX 命令使用正则表达式作为参数。从技术角度而言,正则表达式是表示某种模式的字符串(也就是说,由字母、数字和符号组成的字符序列),用于定义零或更长的字符串。

正则表达式使用元字符(例如,星号 [*] 和问号 [?])来匹配其他字符串的部分或全部内容。

正则表达式不一定包含通配符,但通配符可以使正则表达式在搜索模式和处理文件时发挥更大的作用。表 1 显示了一些基本正则表达式序列。

表 1. 正则表达式序列

序列

说明

脱字符 (^)

匹配出现在行首的表达式,例如 ^A

美元符号 ($)

匹配出现在行末的表达式,例如 A$

反斜杠 ()

取消下一个字符的特殊含义,例如 ^

方括号 ([])

匹配括起来的任一字符,例如 [aeiou](使用连字符 [-] 表示范围,例如 [0-9])

[^ ]

匹配除括起来字符以外的任一字符,例如 [^0-9]

句点 (.)

匹配除行尾之外的任意单个字符

星号 (*)

匹配零个或多个前驱字符或表达式

{x,y}

匹配出现过 x 到 y 个和前面相同的内容

{x}

精确匹配出现过 x 个和前面相同的内容

{x,}

匹配出现过 x 个或更多和前面相同的内容

以下是经常与 grep 命令一起使用的一些基本正则表达式:

List11:使用正则表达式和 grep

$ # Lists your mail$ grep '^From: ' /usr/mail/$USER $ # Any line with at least one letter $ grep '[a-zA-Z]' search-file.txt$ # Anything not a letter or number$ grep '[^a-zA-Z0-9] search-file.txt$ # Find phone numbers in the form 999-9999 $ grep '[0-9]{3}-[0-9]{4}' search-file.txt$ # Find lines with exactly one character$ grep '^.$' search-file.txt$ # Find any line that starts with a period "." $ grep '^.' search-file.txt $ # Find lines that start with a "." and 2 lowercase letters$ grep '^.[a-z][a-z]' search-file.txt

9. 确定当前用户

有时查找问题是,需要确定某个特定用户是否运行过您的管理脚本。为找出答案,您可以使用 whoami 命令来返回当前用户的名称:

List12:从命令行使用 whoami

$ whoamiJohn

List13:用 whoami 确保当前用户不是根用户的 Bash 脚本

if [ $(whoami) = "root" ]then echo "You cannot run this script as root." exit 1fi

10. 用awk处理数据

awk 命令似乎始终处在 Perl 的阴影下,但它对于简单、基于命令行的数据处理来说是一个快速、实用的工具。List 14 展示了如何开始使用 awk 命令。

若要获取文件中每行文本的长度,用 length() 函数。若要查看字符串 ing 是否出现在文件文本中,请用 index() 函数,该函数返回 ing 首次出现的位置,

这样您就可以使用它来进行进一步的字符串处理。若要 tokenize(也就是说,将一行拆分为单词长度的片段)某个字符串,请使用 split() 函数。

List14:基本awk处理

$ cat texttesting the awk command$ awk '{ i = length($0); print i }' text23$ awk '{ i = index($0,”ing”); print i}' text5$ awk 'BEGIN { i = 1 } { n = split($0,a," "); while (i <= n) {print a[i]; i++;} }' texttesting theawkcommand

打印文本文件中的指定字段是一项简单的 awk 任务。在List 15中,sales 文件包含每个销售人员的姓名,后跟每月销售数字。

可以使用 awk 命令来快速获得每个月的销售总额。缺省情况下,awk 将每个以逗号分隔的值视为不同的字段。用 $n 操作符来访问每个字段。

List15:用awk对数据进行汇总

$cat salesGene,12,23,7Dawn,10,25,15Renee,15,13,18David,8,21,17$ awk -F, '{print $1,$2+$3+$4}' salesGene 42Dawn 50Renee 46David 46

awk 命令可以很复杂并应用于广泛的情景中。

来自:IBM developerWorks

链接:https://www.ibm.com/developerworks/cn/aix/library/au-unixtips/

本文完。


推荐阅读

1、在 Linux 环境下,我用了这款端口扫描工具~

2、Linux 环境下安装 Nexus 私服存储库

3、必会的 24 道 Shell 脚本面试题

4、一文读懂 Shell 中各种括号的作用

5、Linux 思维导图整理(建议收藏)

6、详解 Linux 环境下防毒软件 ClamAV

7、Linux 环境下安装 GitLab 与配置

8、Linux 环境下安装 Python3 的操作方法

资源分享

1、资料大放送①期 | 这份资料很特别!

2、第②波 | 纯福利,无套路资源分享~

CSDN资源下载

1、CSDN海量资源免费下载!

10 个小技巧助你快速成为 Linux 高手!

写留言

10 个小技巧助你快速成为 Linux 高手!

在看这篇文章的你,点赞

本文分享自微信公众号 - 杰哥的IT之旅(Jake_Internet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这