Linux命令学习(三)

前言

接上文,本文接着来学习Linux中常用的命令,本文所学习的命令包含:history命令,echo命令,ln命令。

1. history:查看历史命令

history命令用于显示历史记录和执行过的命令,它会将终端上执行过的所有命令存储到 .bash_history 文件中,来帮助我们查找用户之前执行过的命令。不过由于是保存到内存中的,历史命令仅能存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制的。

history(选项)(参数)

选项:
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。

参数:
n:打印最近的n条历史命令。

另外,还可以通过!n来执行第n条命令,通过!xxx来执行最后一条 xxx 开头的命令。接下来我们来看一些实例。

1.1 快速重复执行上一条命令

一般情况下,有 4 种方法可以重复执行上一条命令:

  • 使用上方向键,并回车执行;
  • 按 !! 并回车执行;
  • 输入 !-1 并回车执行;
  • 按 Ctrl+p 并回车执行;
master@127.0.0.1:/test/logs$ !!
master@127.0.0.1:/test/logs$ ls
1.2 使用 HISTTIMEFORMAT 显示时间戳

默认情况下,执行history命令后,只会显示已执行命令的序号和命令本身,如果想查看命令历史的时间戳,可以通过执行:

master@127.0.0.1:/test/logs$ export HISTTIMEFORMAT='%F %T '

有关展示时间戳这块,这篇文章已经描述的特别清晰了:让 history 命令显示日期和时间 - linux.cn,大家直接去这看就可以了,这里就不多说了。

1.3 使用history列出最近使用的10条历史命令
master@127.0.0.1:/test/logs$ history 10
 6414  ls
 6415  cd /test/logs/
 6416  ls
 6417  history --help
 6418  history -help
 6419  man history
 6420  history
 6421  man history
 6422  ls -lh
 6423  history 10
1.4 从历史命令中执行一个指定的命令

可以通过!n来实现:

master@127.0.0.1:/test/logs$ !6429
master@127.0.0.1:/test/logs$ ls
test1.logs  test   test2.log   test

同样可以通过!xxx来执行以 xxx 开头的命令:

master@127.0.0.1:/test/logs$ !his
master@127.0.0.1:/test/logs$ history
1.5 命令替换

我们可以使用!!:$或者!$为当前的命令获得上一条命令的参数:

master@127.0.0.1:/testlogs$ ls common.log
common.log
master@127.0.0.1:/testlogs$ vi !!:$
master@127.0.0.1:/testlogs$ vi common.log
master@127.0.0.1:/testlogs$ ls common.log
common.log
master@127.0.0.1:/testlogs$ vi !$
master@127.0.0.1:/testlogs$ vi common.log

另外,还可以使用!^ 从上一条命令获得第一项参数:

master@127.0.0.1:/testlogs$ ls common.log
common.log
master@127.0.0.1:/testlogs$ vi !^
master@127.0.0.1:/testlogs$ vi common.log

并且,我们还可以使用!xxx:n的形式来从历史命令中搜索以 xxx 开头的命令,并获取它的某一项参数。我们使用 !cp:2 来获取以cp开头的命令,并获取它的第二项参数:

master@127.0.0.1:/test/logs$ cp common.log common.log.bak
master@127.0.0.1:/test/logs$ ls -l !cp:2
master@127.0.0.1:/test/logs$ ls -l common.log.bak
-rw-r--r-- 1 deploy deploy 11850 Jun 16 11:04 common.log.bak
master@127.0.0.1:/test/logs$ rm -rf common.log.bak

master@127.0.0.1:/test/logs$ cp common.log common.log.bak
master@127.0.0.1:/test/logs$ ls -l !cp:$
master@127.0.0.1:/test/logs$ ls -l common.log.bak
-rw-r--r-- 1 deploy deploy 11850 Jun 16 11:05 common.log.bak

其中,!cp:$表示获取以cp开头的命令的最后一个参数。

1.6 使用 ctrl + r 进行搜索

该快捷键可以让我们对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键:

master@127.0.0.1:~$ history 5
 6455  ls
 6456  history 5
 6457  history | tail -5
 6458  export HISTCONTROL=ignoredups
 6459  history
master@127.0.0.1:~$
(reverse-i-search)`':
(reverse-i-search)`history ': history | tail -5
master@127.0.0.1:~$ history | tail -5
 6456  history 5
 6457  history | tail -5
 6458  export HISTCONTROL=ignoredups
 6459  history
 6460  history | tail -5

通过输入 ctrl + r,将会进入搜索模式:(reverse-i-search)':`,然后我们进行相应的搜索即可,搜索完成回车即可执行。

1.7 history相关设置

首先,我们可以去/etc/profile中去搜索 HISSIZE ,来看下history保存的数量。

1)使用 HISTSIZE 控制历史命令记录的总行数
如果我们要修改history控制的总行数,可以将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条:

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

2)使用 HISTFILE 更改历史文件名称
默认情况下,命令历史存储在 ~/.bash_history 文件中。我们可以添加下列内容到 .bash_profile 文件并重新登录 bash shell,这时候将使用 .commandline_warrior 来存储命令历史:

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

3)使用 HISTCONTROL 从命令历史中删除连续重复的记录
我们可以将 HISTCONTROL 设置为 ignoredups

master@127.0.0.1:/test/logs$ export HISTCONTROL=ignoredups

4)使用 HISTCONTROL 清除整个命令历史中的重复条目
上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups

master@127.0.0.1:/test/logs$ export HISTCONTROL=erasedups

5)使用 HISTCONTROL 强制 history 不记住特定的命令
HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:

master@127.0.0.1:/test/logs$ export HISTCONTROL=ignorespace
master@127.0.0.1:/test/logs$  service httpd stop [Note that there is a space at the beginning of service, to ignore this command from history]

6)使用 HISTSIZE 禁用 history
如果想禁用 history,可以将 HISTSIZE 设置为 0:

master@127.0.0.1:/test/logs$  export HISTSIZE=0

7)使用 HISTIGNORE 忽略历史中的特定命令
比如我们可以选择忽略 pwd、ls、ls -ltr 等命令:

master@127.0.0.1:/test/logs$ export HISTIGNORE="pwd:ls:ls -ltr:"

这里参考链接为:History(历史)命令用法 15 例 - linux.cn ,如果想了解更多,可以去该文章处查看。

2. echo:输出命令

echo命令比较简单,一般用于shell中打印shell变量的值,或者直接输出指定的字符串。如果输出内容不包含变量等特殊含义,则原内容直接输出到屏幕;如果有特殊含义,则输出其含义。

echo (选项)(参数)

选项:
-e:激活转义字符;
-n:取消输出后行末的换行符号(内容输出后不换行);

参数:
变量:指定要打印的变量

当使用-e选项时,以下字符将作为转义字符处理:

  • \a 发出警告声;
  • \b 删除前一个字符,相当于退格键(Backspace);
  • \c 表示不换行;
  • \e Esc键;
  • \f 换页符;
  • \n 换行符;
  • \r 回车键;
  • \t 相当于Tab键;
  • \v 垂直制表符;
  • \\ 表示插入\字符;

比如说:

/app $
/app $echo -e 'ab\bc'
ac
/app $
//这里只会输出ac,因为\b相当于退格键,会删除前一个字符b,所以只会输出ac

/app $
/app $echo -n 'hello world'
hello world/app $
// 这里使用 -n 相当于去掉echo末尾的换行符;当然这里也可以通过-e加\c来实现;

和其他linux命令类似,echo命令针对单引号,双引号,不加引号的处理也有点不太一样:

  • 单引号的话,echo将单引号内的所有字符都当成普通字符处理;
  • 双引号的话,echo会将双引号的$\`这三种作为特殊符号处理,其他的特殊符号都会当成普通字符处理;
  • 不加引号的话,echo会将所有特殊符号按照该符号对应的逻辑处理。

另外,echo命令还具有显示色彩的功能,不过这些我们一般用不到,这里就不多说了,有兴趣的朋友可以自己去搜下。

3. ln:创建文件链接

ln命令(link):为某一个文件在另外一个位置建立一个同步的链接;链接分两种;软连接和硬连接。

软连接(也称符号链接):

  • 以路径的形式存在。类似于Windows操作系统中的快捷方式;
  • 软链接可以对一个不存在的文件名进行链接;
  • 软链接可以对目录进行链接(目录创建链接必须用绝对路径,相对路径创建会不成功);

硬连接:

  • 以文件副本的形式存在,但不占用实际空间;
  • 不允许给目录创建硬链接;

区别:

  • 软链接通常就是Windows中常说的快捷方式;
  • 硬链接说白了其实就是指针,所有的硬链接和源文件都是指向同一个磁盘块,通过使用硬链接可达到备份数据(实际是备份节点)的效果。 删除一个指针不会真正删除文件,只有把所有的指针都删除才会真正删除文件;

主要参数:

-i 交互模式,文件存在则提示用户是否覆盖
-f 强制执行
-b 删除,覆盖以前建立的链接
-s 创建软链接
-v 显示详细的处理过程

举例如下:

[master@127.0.0.1 ~]$ ls -li
总用量 4
1181205 -rw-rw-r-- 1 master master 34 3月  25 14:26 test.log
[master@127.0.0.1 ~]$ ln -s test.log softLink
[master@127.0.0.1 ~]$ ln test.log hardLink
[master@127.0.0.1 ~]$ ls -li
总用量 8
1181205 -rw-rw-r-- 2 master master 34 3月  25 14:26 hardLink
1180849 lrwxrwxrwx 1 master master  8 3月  25 14:29 softLink -> test.log
1181205 -rw-rw-r-- 2 master master 34 3月  25 14:26 test.log

[master@127.0.0.1 ~]$ ln -s test.log softLink
ln: 创建符号链接 "softLink": 文件已存在
[master@127.0.0.1 ~]$ ln -f -s test.log softLink
[master@127.0.0.1 ~]$ ln -f -i -s test.log softLink
ln:是否替换"softLink"? y
[master@127.0.0.1 ~]$ ls -li
总用量 8
1181205 -rw-rw-r-- 2 master master 34 3月  25 14:26 hardLink
1180849 lrwxrwxrwx 1 master master  8 3月  25 14:30 softLink -> test.log
1181205 -rw-rw-r-- 2 master master 34 3月  25 14:26 test.log
[master@127.0.0.1 ~]$ rm test.log
[master@127.0.0.1 ~]$ cat hardLink
this is a test log
so
just do it
[master@127.0.0.1 ~]$ cat softLink
cat: softLink: 没有那个文件或目录


[master@127.0.0.1 ~]$ mkdir catalogue
[master@127.0.0.1 ~]$ ln catalogue hardLink2
ln: "catalogue": 不允许将硬链接指向目录
[master@127.0.0.1 ~]$ ln -s catalogue softLink2
[master@127.0.0.1 ~]$ ls -li
总用量 4
1187841 drwxrwxr-x 2 master master 4096 3月  25 14:32 catalogue
1181174 lrwxrwxrwx 1 master master    9 3月  25 14:33 softLink2 -> catalogue
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 学习资料:《linux大棚命令百篇上》 awk介绍及简单实用 以下是在网上找到的两个awk的介绍: awk是一种处...
    陌上疏影凉阅读 704评论 0 3
  • 1.Linux下查看权限 在终端输入:ll 查看所有文件/文件夹的权限 ls -l文件名 查看文件属性 出现结果...
    怀夕阅读 407评论 1 0
  • 1.描述计算机的组成及其功能 (一)计算机的组成 1.CPU 2.CPU风扇 3.BIOS 4.内存 5.硬盘 6...
    whamai阅读 1,424评论 0 1
  • 1.命令格式:ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设...
    Nuuuu阅读 3,654评论 0 12
  • 本文笔记源自这里——[实验楼]欢迎大家在下面交流其中有问题的地方喜欢请点收藏,每日更新(全部已亲自实践). 一. ...
    东皇Amrzs阅读 3,947评论 7 54