linux学习1-基础知识
1.输入一行字跳到行头 ctrl+a;跳到行尾 ctrl+e;
2.一次创建多个文件
touch love_{1..10}_linux.txt
touch love_{1,3,5}_linux.txt
3.Shell 常用通配符:
字符 | 含义 |
---|---|
* |
匹配 0 或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配 list 中的任意单一字符 |
[!list] |
匹配 除list 中的任意单一字符以外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c1..c2} |
匹配 c1-c2 中全部字符 如{1..10} |
4.查看当前用户
root:当前伪终端用户
pts :表示是伪终端
pts/6:表示当前伪终端是第6个伪终端
时间:当前伪终端的启动时间
who
命令其它常用参数
参数 | 说明 |
---|---|
-a |
打印能打印的全部 |
-d |
打印死掉的进程 |
-m |
同am i ,mom likes |
-q |
打印当前登录用户数及用户名 |
-u |
打印当前登录用户登录信息 |
-r |
打印运行等级 |
5.删除用户
userdel user
默认不删除用户home目录,如果希望同时删除home目录需要:
userdel user -r
6.新建用户
useradd user
一些linux系统默认不同时创建home目录,保险起见应该
useradd user -m
7.目录
可能你还是不太明白,比如第一项文件类型和权限那一堆东西具体指什么,链接又是什么,何为最后修改时间,下面一一道来:
8.linux系统目录结构
9.目录省略符
使用 cd
命令可以切换目录,在 Linux 里面使用 .
表示当前目录,..
表示上一级目录(**注意,还记得我们上一节介绍过的,以 .
开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a
命令查看隐藏文件), -
表示上一次所在目录,~
通常表示当前用户的"home"目录。使用 pwd
命令可以获取当前所在路径(绝对路径)。
10.批量重命名
要实现批量重命名,mv 命令就有点力不从心了,我们可以使用一个看起来更专业的命令rename
来实现。不过它是要用 perl 正则表达式来作为参数,关于正则表达式我们要在后面才会介绍到,这里只做演示,你只要记得这个rename
命令可以批量重命名就好了,以后再重新学习也不会有任何问题,毕竟你已经掌握了一个更常用的mv
命令。
# 使用通配符批量创建 5 个文件
$ touch file{1..5}.txt
# 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件
$ rename 's/\.txt/\.c/' *.txt
# 批量将这 5 个文件,文件名改为大写
$ rename 'y/a-z/A-Z/' *.c
简单解释下上面的命令,rename
是先使用第二个参数的通配符匹配所有后缀为.txt
的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的.txt
后缀替换为.c
,这一点在我们后面学习了sed
命令后,相信你会更好的理解。
11.查看文件-使用cat
,tac
和nl
命令查看文件
这两个命令都是用来打印文件内容到标准输出(终端),其中cat
为正序显示,tac
倒序显示。
标准输入输出:当我们执行一个 shell 命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),默认对应终端的键盘;标准输出文件(stdout)和标准错误输出文件 (stderr),这两个文件都对应被重定向到终端的屏幕,以便我们能直接看到输出内容。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准 输出文件,而将错误信息送到标准错误文件中。
cat -n file 打印file内容并添加行号
nl file 添加行号并打印
这里简单列举它的常用的几个参数:
-b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)
12.查看文件-分页查看more、less
打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter
键向下滚动一行,使用Space
键向下滚动一屏,按下h
显示帮助,q
退出。
13.环境变量
环境变量
简单理解了变量的概念,就很好解释环境变量了,环境变量就是作用域比自定义变量要大,如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。 Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。
通常我们会涉及到的环境变量有三种:
- 当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
也有三个与上述三种环境变量相关的命令,set
,env
,export
。这三个命令很相似,都可以用于打印相关环境变量,区别在于涉及的是不同范围的环境变量,详见下表:
命令 | 说明 |
---|---|
set |
显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境 |
14.生效环境变量
如何让环境变量立即生效
在上面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的.zshrc
),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source
命令来让其立即生效,如:
$ source .zshrc
source
命令还有一个别名就是.
,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.
的方式就该是
$ . ./.zshrc
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
15.查找文件
与搜索相关的命令常用的有如下几个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
列出用户家目录下比Code文件夹新的文件:
$ find ~ -newer /home/shiyanlou/Code