Linux常用指令
一、GNU/Linux操作系统
1.1 Linux
- 严格来说Linux只是一个内核,没有GNU提供的软件,啥也干不了。
1.2 GNU
- GNU相关概念
- 声卡驱动、网卡驱动、浏览器、多媒体播放器等
- GNU=GNU’s Not Unix
- GCC(GNU编译器套件)
- GNU的协议条款
- GPL:GNU通用公共许可证
- LGPL:GNU较宽松公共许可证
- GFPL:GNU只有文档许可证
1.3 Linux内核版本的命名
命名形式:X.Y.Z
X是主版本号
Y是辅助版本号,奇数为开发版本,偶数为稳定版本
Z是内核修订编号
1.4 Linux相关
1.Linux的优势:可靠性高、彻底的开放性、强大的网络功能。
1.5 Init
sysvinit
- system V 风格的Init
- UNIX Init 系统
sysvint的运行级别
- 通过runlevel来定义,/etc/inittab
0——关机
1——单用户模式
6——重启
二、Shell
2.1 基本概念
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
1. shell的分类
常见的有Bourne Again Shell (简称bash)、Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)。
查看当前使用的shell类型的指令——echo $SHELL,效果如下:
查看当前主机包含哪些类型的shell——cat /etc/shells,效果如下:
2.2 shell命令
shell命令的格式:$ Command Option Arguments
- 选项:是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型。例如:
ls
指令,可列出当前目录中所有文件的名字,而ls -l
指令,加入 -l 选项,将会为每个文件列出一行信息,诸如文件大小以及最后修改的时间。 - 参数:大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如
ls -l text
,将显示text目录下的所有文件及其信息。有些命令可能需要最少数目的参数,比如cp
复制指令,至少需要两个参数。 - 注意:命令行中选项先于参数输入。
命令行特征:
- 一个命令行中可以输入多个命令,用分号将各个命令隔开。
- 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行
2.3 shell中的特殊字符
引号
- 单引号:由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后。也会失去原有意义,而只作为普通字符解释。
- 双引号:双引号中的字符,除$,\,’,和"这几个字符仍作为特殊字符功能外,其余字符作为普通字符。
- $,就是用其后指定的变量的值来代替这个变量和$
- \,转义字符,告诉shell不要对其后的一个字符进行特殊处理,当做普通字符即可。例如
假如在第二个双引号之前不加\,会导致shell认为该指令未完成,直接回车会出现右尖括号,即出现一条指令多行输入的情况。
- 反引号:``,反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。
- 命令置换,即把反引号括起来的执行结果赋值给指定变量。例如
- 嵌套使用。注意,嵌套使用时内层的反引号必须用反斜线\将其转义。
- 命令置换,即把反引号括起来的执行结果赋值给指定变量。例如
- 注释符:#
- 其他:
- 输入/输出重定向与管道的<;、>;、<<;、 >>; 和 |;
- 执行后台命令的&;
- 命令执行操作符&&;和 ||
- 表示命令组的{}
2.4 管道
管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。
我们通过管道符“|”来建立一个管导行。
2.5 命令替换
命令替换和重定向有些相似,但区别自傲与命令替换是将一个命令的输出作为另一个命令的参数。常用命令格式为:
command1 `command2`
其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它包括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如
cd `pwd`
三、Linux系统基本命令
3.1 开关机以及打开关闭终端操作:
- 打开终端——Ctrl + Alt +t
- 退出终端——exit
- 重启计算机——reboot
- 关闭计算机——shutdown / halt
3.2 文件与目录操作
- 列出文件列表(ls)-List
- 切换目录(cd)-Change Directory
cd name 切换到当前目录下的name子目录
cd .. 切换到上一层目录
cd / 切换到系统根目录
cd ~ 切换到用户主目录 - 创建目录(mkdir)
- 删除目录(rmdir)
- 复制文件(cp) -v 显示复制过程; -r 能同时复制目录下的所有文件及主目录
- 删除文件或目录(rm)
rm a.txt 删除a.txt
rm * 删除当前目录下所有文件
rm -f * 强制删除所有文件
rm -r * 输出所有文件(包含所有文件以及所有子目录及子目录下的文件) - 让显示画面暂停(more / less)
这两条命令都是为了避免画面显示瞬间闪过去,让画面在显示某一页时暂停 (按q即可退出)
find /lib/modules/ -name *.ko | more
find /lib/modules/ -name *.ko | less
这两者的区别:
more 没法后退,如果只是向下翻行比较方便
空格:向下翻页
回车:向下翻行
less 支持前后翻滚
PageUp:向上翻页
PageDown:向下翻页 - 连接文件(cat)
这条命令能显示文件的内容,或是将数个文件合并成一个文件。经常和more 或less命令搭配使用,比如:
cat a.txt | more 逐页显示a.txt文件内容
cat a.txt >> b.txt 将a.txt附加到b.txt文件之后
cat a.txt b.txt > c.txt 将a.txt 和b.txt合并成c.txt - 移动或更改文件及目录名称的命令(mv)
- 显示当前所在目录命令(pwd)
- 查找文件的命令(locate)
- 搜索字符串的命令(grep)
- 用来查看可执行文件的位置命令(which)
- 新建文件或是修改文件的时间戳(touch)
比如:
touch a.txt 新建一个名为a.txt的文件
touch -c a.txt 不新建文件,仅更改a.txt的时间戳
touch -t 201401102234.50 a.txt 使用指定的时间戳,作为指定文件相应时间戳的新值 - 数据流重导向(> >>)
Linux系统下数据流重导向是指根据命令的输出,并不打印在屏幕上,
而是直接输入到其他设备中(比如输入到文件中)
这在文本模式下非常重要,特别是如果想要将某些数据储存下来时
比如:
ls -l > a.txt 将ls -l的输出结果写入a.txt中,而不是显示在屏幕上
>>和>的意思相同,如果只是使用>>,假如a.txt已经存在,则将输出结果追加到a.txt后面
比如:
grep -rn “c” . 1> test1.txt 2> test2.txt 将标准输出重定向到test1.txt,将标准错误重定向到test2.txt - 管道符号(|)——左边的输出作为右边的输入
- 显示目录或文件大小(du)
- 在指定路径下查找文件(find)——用于在系统的特定目录下,查找具有某种特征的文件。比如:
find /tmp -name "a.txt" 查找tmp目录下所有的a.txt文件
find . -mtime -5 -print 查找.目录下更改时间在5天以内的文件
find . -size +1000000c -print 查找.目录下文件长度大于1M的文件
- 创建符号链接命令(ln)——不同目录下使用相同的文件时,不需要在每个需要的目录下都存放相同的文件,只需要在固定的目录存放一个,然后在其他目录下用 ln命令链接它就可以了。比如:
ln -s /bin/less /usr/local/bin/less
- 文件比较命令(diff)——逐行比较两个文本文件,列出其中的不同之处。
- Linux打补丁的命令(patch )——patch命令是让用户利用设置补丁的方式,修改更新原始文件。比如:patch -p0 < patch.diff 将刚生成的patch.diff为test1.txt打上补丁。字母p指的是路径,后面的数字表示去掉路径的第几部分,数字0表示全路径。
3.3 xargs简介
xargs 命令
xargs是给命令传递参数的过滤器,同时也是组合多个命令的工具。它能把某个数据流分割成很多足够小的块,从而方便过滤器和命令进行处理。
使用过多参数的命令替换失败时,使用xargs来替换它通常都能成功。通常情况下,xargs从管道或者stdin中读取数据。
比如:find . type f -print | xargs grep "host"
在当前目录下的所有普通文件中搜索“host”
3.4 sed简介
sed
这是一个很好的文件处理工具。它本身是一个管道命令,主要以行为为单位进行处理,它可以将数据进行替换、删除、新增、选取等特定工作。
比如:
1. sed 命令行格式:
sed [-nefri] 'command'
输入文本
2. 删除某行
sed '1d' test.txt
删除test.txt 的第一行
sed '$d' test.txt
删除test.txt 的最后一行
sed '1,2d' test.txt
删除test.txt的第一到第二行
3. 显示某行
sed -n '1p' test.txt
显示 test.txt 第一行
sed -n '$p' test.txt
显示 test.txt 最后一行
sed -n '1,2p' test.txt
显示 test.txt 的第一到第二行
4. 增加一行
sed '1a my lover' test.txt
在第一行后增加一行字符串"my lover"
5. 代替一行
sed '1c replace one line' test.txt
将第一行替换为“replace one line”
6. 替换一行中的某部分
sed -n '/test/p' test.txt | sed 's/test/good/g'
将test替换为good
sed -n '/test/p' test.txt | sed 's/test//g'
删除test