常用快捷键

按键 作用
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动

现在你想在你大堆其他文件中找到这两个文本文件怎么办呢,这时候你就可以使用通配符了

$ ls *.txt

windows中要你一次性创建一些这样的文件你该怎么做,“love_1_linux.txt, love_2_linux.txt,... love_10_linux.txt”,不知道咋办了吧。不过这对linux来说也是小意思

$ touch love_{1..10}_linux.txt

shell常用通配符:

字符 含义
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[!list] 匹配 除list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
{c2..c2} 匹配 c1-c2 中全部字符 如{1..10}

/<你要搜索的关键字>,查找到后你可以使用n键切换到下一个关键字所在处,shift+n为上一个关键字所在处。使用Space(空格键)翻页,Enter(回车键)向下滚动一行,或者使用j,k(vim编辑器的移动键)进行向前向后滚动一行。按下h键为显示使用帮助(因为man使用less作为阅读器,实为less工具的帮助),按下q退出

cd -进入上次的目录

例一:把shiyanlou.log的文件内容加上行号后输入zhou.log这个文件里,可以使用如下命令:

cat -n shiyanlou.log > zhou.log
例三:将test1目录下的最近更新的文件复制到test2目录下,覆盖前询问,可以使用如下命令:

cp -iu test1/* test2

例一:递归创建多个目录 ,可以使用如下命令:

mkdir -p zhou/test
例二:创建权限为777的目录,可以使用如下命令:

mkdir -m 777 zhou

显示shiyanlou.log文件中的最后5行内容,当shiyanlou.log文件有新内容增加,自动更新显示。可以使用如下命令:

tail -n 5 -f shiyanlou.log

例一:显示shiyanlou.log文件中的前5行内容,可以使用如下命令: head -n 5 shiyanlou.log

less与cat和more的区别:

cat命令功能用于显示整个文件的内容,单独使用没有翻页功能。因此经常和more命令搭配使用,cat命令还有就是可以将数个文件合并成一个文件的功能。 more命令功能:让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,或按q键停止显示。

less命令功能:less命令的用法与more命令类似,也可以用来浏览超过一页的文件。所不同的是less命令除了可以按空格键向下显示文件外,还可以利用上下键来卷动文件。当要结束浏览时,只要在less命令的提示符“:”下按q键即可。 其实这三个命令除了cat命令有合并文件的功能,其余功能上相近,只是从浏览习惯和显示方式上有所不同。

例二:从shiyanlou.log文件中查找第一个出现"g"字符串的行,并从该处前两行开始显示输出,可以使用如下命令:

more +/g shiyanlou.log

搜索etc目录下文件名包含lou的文件,可以使用如下命令:

locate /etc/*lou*

例一:搜索etc目录下所有以sh开头的文件,可以使用如下命令:

locate /etc/sh

例一:确认是否安装了gcc,可以使用如下命令:

which gcc

在当前目录下递归搜索文件中包含main()的文件,经常用于查找某些函数位于哪些源代码文件中,可以使用如下命令:

grep -r “main()” .

将/etc/passwd文件中没有出现root和nologin的行取出来,可以使用如下命令:

grep -v “root” /etc/passwd | grep -v “nologin”

例一:将/etc/passwd文件中出现root的行取出来,关键词部分加上颜色显示,可以使用如下命令:

grep “root” /etc/passwd --color=auto
cat /etc/passwd | grep “root” --color=auto

按照空间大小逆序排序显示,使用如下命令:

du -h | sort -nr | head -10

cat /etc/group | grep -E "ivo|sudo"
查看有ivo或是sudo的 grep -E 或

# 绝对路径
$ cd /usr/local/bin
# 相对路径
$ cd ../../usr/local/bin

批量重命名
# 现实用通配符批量创建5个文件
$ touch file{1..5}.txt
# 批量将这5个后缀为.txt的文本文件重命名为以.c为后缀的文件
$ rename 's/\.txt/\.c/' *.txt
# 批量将这5个文件,文件名改为大写
$ rename 'y/a-z/A-Z/' *.c

vimdiff env.txt export.txt set.txt
使用vimdiff工具比较导出的几个文件的内容

#!/bin/zsh

for ((i=0; i<10; i++));do echo "hello shell" done exit 0 输出10次hello shell echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
上述命令中>>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重定向到一个文件中,

5.修改和删除已有变量

变量修改

变量的修改有以下几种方式:

变量设置方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串
比如要修改我们前面添加到PATH的环境变量:

为了避免操作失误导致命令找不到,我们先将PATH赋值给一个新的自定义变量path

$ path=$PATH
$ echo $path
$ path=${path%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
$ path=${path%*/mybin}
其他设置方式,你就自己操作体会吧。

变量删除

可以使用unset命令删除一个环境变量

$ unset temp
6.如何让环境变量立即生效

在上面我们在shell中修改了一个配置脚本文件之后(比如zsh的配置文件home目录下的.zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source命令来让其立即生效。

如:

$ source .zshrc
source命令还有一个别名就是.,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.的方式就该是

$ . ./.zshrc
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source则不需要

二、搜索文件

与搜索相关的命令常用的有如下几个whereis,which,find,locate

whereis简单快速
$whereis who

你会看到它找到了三个路径,两个可执行文件路径和一个man在线帮助文件所在路径,是不是很快,它快是因为它并没有从硬盘老老实实挨个去找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate命令

locate快而全
通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,你就得自己执行一次updatedb命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如:

查找/etc下所有以sh开头的文件

$ locate /etc/sh
注意,它不只是在etc目录下查找并会自动递归子目录进行查找

查找/usr/share/下所有jpg文件

$ locate /usr/share/\*.jpg
注意要添加*号前面的反斜杠转义,否则会无法找到

如果想只统计数目可以加上-c参数,-i参数可以忽略大小写进行查找,whereis的-b,-m,-s同样可以是使用

which小而精
which本身是shell内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令

$ which man
find精而细
find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find命令强大到,要把它将明白至少需要单独好几节课程才行,我们这里就只介绍一些常用的内容,希望深入学习的用户可以就多找”男人“多动手。

在指定目录下搜索指定文件名的文件

$ find /etc/ -name interfaces
注意find命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action]

与时间相关的命令参数

参数 说明
-atime 最后访问时间
-ctime 创建时间
-mtime 最后修改时间
下面以-mtime参数举例

-mtime n: n 为数字,表示为在n天之前的”一天之内“修改过的文件
-mtime +n: 列出在n天之前(不包含n天本身)被修改过的文件
-mtime -n: 列出在n天之前(包含n天本身)被修改过的文件
newer file: file为一个已存在的文件,列出比file还要新的文件名

列出home目录中,当天(24小时之内)有改动的文件

$ find ~ -mtime 0
列出比某个文件新的所有文件

# 姑且利用一下工程师配置环境时遗留的test.c~文件吧-_-||
$ find ~ newer Documents/test.c\~

上一篇
下一篇