Linux常见指令
1、ls指令
语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
1.1、ls:列出该目录下的所有文件名,不包含隐藏文件。
1.2、ls -a:列出该目录下的所有文件名,包含隐藏文件。
linux中以.开头的文件为隐藏文件。
1.3、ls -l:列出该目录文件详细信息
列出文件所有信息:包括文件的类型,权限,文件大小,时间,文件名等。
用红色圈起来这一列代表文件的类型,d就是目录文件,-就是普通文件。
多个选项可以搭配一起使用,例如ls -a -l或者ls -al:
这样就可以列出文件的详细信息,同时包含隐藏文件。
linux任何目录下都有两个隐藏文件:.和..
.文件表示当前路径:帮用户定位当前目录下的一个文件。
..文件表示当前路径的上级路径。
例如我们写了一个C程序,编译运行后我们要运行:
我们需要通过./a.out来运行它,不能直接用文件名来运行。
那么我们输入的指令呢?指令本质上也是一个可执行程序,我们输入就可以执行然后返回结果给我们。但是为什么指令不需要加./呢?这是因为指令配置了环境变量,这个我们后面再讲。
另外ll的功能相当于ls -l:
1.4、ls -d 指定目录:将目录像文件一样显示,而不是显示目录下的文件。
1.5、ls -F:在每个文件名后面附上一个字符说明该文件的类型。*表示可执行的普通文件,/表示目录,@表示符号链接。
2、pwd命令
语法: pwd
功能:显示用户当前所在的目录
当前用户路径为/home/zzy,也就是用户家目录。任何用户都有家目录,就是在/home/xxx。
3、cd指令
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
3.1、cd …:修改用户路径为当前路径的上级路径
3.2、cd配合绝对路径和相对路径进行路径切换
linux的目录结构整体是一颗多叉树,它的叶子节点一定是空目录或非空目录文件,路上的节点是一个非空目录。那么我们对linux的目录增删查改本质上就是对这颗多叉树进行增删查改。
linux路径是从/根路径开始的,我们把从根路径/开始定位到指定位置,具有唯一性的路径称为绝对路径。把以当前自己所处的路径为起始参照位置,来进行特定文件的定位称为相对路径。
3.3、cd - :回到用户上一次访问的路径
3.4、cd ~:返回用户家目录
每个用户都有家目录,就是在/home/xxx。
4、touch指令
语法:touch [选项]… 文件…
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
touch 文件名:用来创建普通文件。
如果需要修改文件内容,我们可以使用nano:
下面有对应选项的功能。
5、mkdir指令
语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
5.1、mkdir xxx:创建文件名为xxx的目录
5.2、 mkdir -p x1/x2/x3 :创建一条路径
tree指令可以用来查看linux下的目录结构。
6、rmdir指令和rm指令
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
rmdir只能用来删除空目录。
rm命令可以同时删除文件或目录
语法:rm [-f-i-r-v][dirName/dir]
6.1、rm 文件名:删除文件,可以删除普通文件和空目录
6.2、rm -i:删除文件前进行询问
6.3、rm -f:强制删除文件
6.4、rm -r:递归删除,用于删除含有文件的目录
6.5、rm -rf xxx:递归强制删除普通文件或目录(慎用!!!!!!!!!!!)
7、man指令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man。语法: man [选项] 命令
7.1、man 1 :查看linux指令
7.2、man 2:查看系统调用接口
7.3、man 3 :查看C语言接口
7.4、 man man:查看man指令如何使用
在man指令中退出按q即可。
8、cp指令
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
8.1、cp指令拷贝普通文件
8.2、cp -i:覆盖文件之前询问用户
8.3、cp -f:强制覆盖不询问用户
8.4、cp -r 拷贝目录
9、mv指令
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
9.1、mv对文件进行重命名
9.2、mv对文件进行剪切
9.3、mv对文件进行剪切并重命名
所以可以这样理解:9.1是对文件移动到当前路径下然后重命名为test.txt。9.2是对文件移动到d1,并没有重命名。
10、cat指令
语法:cat [选项][文件]
功能: 查看目标文件的内容
10.1、cat查看文件内容
10.2、cat -n:带行号输出文件信息
10.3、cat -s:不输出多行空行
10.4、cat -b对非空输出行编号
11、重定向
你是如何理解指令的?指令本质上是一个可执行程序,它是在linux中特定路径下存在的:/usr/bin。因为指令配置了环境变量,所以可以直接输入指令然后运行。而我们自己写的程序没有配置环境变量,所以需要./来运行,如果将我们写好的编译好的C程序拷贝到/usr/bin目录下,就可以像指令一样直接运行:
直接使用cat指令,可以从键盘获取数据然后输出:
echo 指令可以将字符串输出到显示器上:
那么你如何理解键盘和显示器呢?数据怎么显示到显示器上的,又是怎么从键盘获取的呢?
本质上键盘、显示器也是文件,向显示器上打印数据就是将数据写入到显示器文件,从键盘获取数据就是从键盘文件中获取数据。linux下一切皆文件。
11.1、输出重定向:
输出重定向:本来应该显示到显示器上的内容,现在写入到文件中。并且每次都是清空文件然后再写入。
11.2、追加重定向:
追加重定向:不清空文件,在文件末尾追加内容。
11.3、输入重定向:
输入重定向:本来应该从键盘文件中读取,现在从指定的文件中读取。
12、more指令
cat指令是不适合看大文本的,适合看小文本。
如果我们要看一个大文本,如项目、日志等。就需要下面的命令。
more:功能类似cat,查看文本信息。
下面我们通过一行命令构建一个大文本:
cnt=1; while [ $cnt -le 10000 ]; do echo "hello linux $cnt"; let cnt++; done > f.txt
more查看文本:
可以通过enter键向后翻,通过q退出more。
13、less指令
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前
不会加载整个文件。
可以通过上下键翻阅,也可以通过jk键进行上下翻阅。q退出。
/:可以向下寻找字符串
?:可以向上查找字符串
14、head指令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
语法: head [参数]… [文件]…
功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
14.1、head查看文本
默认显示前10行
14.2、head -n:显示前n行
15、tail指令
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -
f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.
语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
15.1、tail指令查看文本:默认查看最后10行
15.2、tail -n:查看最后n行
16、管道
现在假设我想查看f.txt文件中的6-10行,该如何实现呢?
方式一:先用head将前10行输出重定向到文件中,然后用tail显示最后5行。
但是这种方式还是比较麻烦,我们可以利用管道:
|就是管道,将head取得的前10行通过管道流向tail。管道是一个内存级的文件。
还可以统计文本行数:
17、时间相关指令
date显示
date 指定格式显示时间: date +%Y:%m:%d
date 用法:date [OPTION]… [+FORMAT]
date +%s:显示时间戳
时间戳:从1970年1月1日午夜开始到现在所经过的秒数。
date -d@时间戳:通过时间戳显示时间信息
18、cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
18.1、cal默认显示当前月份日历
18.2、cal -3:显示当前月份、前一月、后一月日历信息
18.3、cal 年份:显示当年日历,也可以加-y,也可以不加,可以认为默认就是加-y的。
19、find指令
语法: find pathname -options
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:find -name 查找文件名。其他选项可以自行查阅man文档使用。
例如我想查看当前路径下的test.c文件:
例如我想查阅家目录下所有的.c文件:
*是通配符,查找出所有以.c结尾的文件。
使用which可以查看系统指令的位置:在/usr/bin下面找
20、grep指令
grep是行过滤工具
语法: grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
20.1、grep过滤出指定字符串
20.2、grep -n带行号输出
20.3、grep -v:反向匹配,输出不存在给定字符串的数据
20.4、grep -i:忽略大小写
21、zip/unzip指令
zip/unzip是linux用来打包和解包的命令。
使用zip/unzip对普通文件进行打包并解包:
zip打包目录需要带-r:
unzip -d指定解压路径:
22、tar指令
tar指令也是用来打包和解包的。
tar [-cxtzjvf] 文件与目录 …参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
22.1、tar czf:打包
22.2、tar xzf:解包
22.3、-C指定解压路径
-v可以查看压缩或解压的过程。
23、bc指令
bc相当于计算器,使用如下:quit可以退出
搭配echo和管道使用:
24、uname指令
语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
24.1、uname -a:查看主机所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
24.2、uname -r:查看操作系统内核版本
25、几个重要的热键
25.1、ctrl c:可以快速终止程序,例如在运行可执行程序的时候卡死了,可以直接ctrl c结束进程。例如我们输入了一串很长的命令,如果全部删掉要很长时间,可以直接ctrl c。
25.2、ctrl d:退出当前账户
25.3、tab:命令补全
上面输入wh按两下tab可以显示出以wh开头的所有指令。若只有一个指令按tab可以直接补全。
25.4、ctrl r:检索历史命令
下面演示使用ctrl,并输入grep检索之前使用过的命令:
26、其他指令
当我们处于root账户下,可以进行账户的增删改:
26.1、adduser xxx:添加用户,设置密码,并创建家目录。
26.2、passwd xxx:修改用户密码
26.3、deluser:删除用户
26.4、whoami:查看当前用户
26.5、which:查看指令所处位置
26.6、alias:给指令取别名
ll相当于是ls -l的别名,下面我们也可以使用alias取别名:
26.7、exit:用户退出相当于ctrl d的功能
26.8、history:查看历史命令,保存最近一千条
28、命令拓展
安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
29、shell命令以及运行原理
我们先来看命令行:
分别为:用户名、@、主机名、:、当前目录、命令行提示符。
我们输入命令的本质就是输入字符串。而指令的本质就是已经写好编译好的程序,在系统的特定路径下(/usr/bin)存放。
广义上:linux操作系统为shell外壳+linux内核。
狭义上:linux操作系统就指的是linux内核。
我们所有的指令,都要在linux系统内部运行,但是OS使用难度比较高,这是一方面,另一方面为了保护操作系统,我们用户不能直接和OS打交道。所以就有了shell,shell是对命令行解释器的统称,shell将我们输入的命令解析,然后传给OS执行,然后再将结果返回给用户。
命令行解释器存在的意义:
1、对命令进行解释。
2、保护OS,对于用户的非法请求,直接拦截。