目录
0、前言
操作系统是一款做软硬件管理的软件,操作系统的核心工作是通过对下管理好软硬件资源,达到对上提供良好的、稳定的、快速的、安全的操作或者使用环境。
计算机软硬件体系结构图:
从图中可以看到,操作系统是上层软件和底层硬件的的桥梁。实际上,我们所有的软件行为,全部都要自上而下贯穿计算机的软硬件结构。
设备驱动就是各种硬件对应的驱动程序,是用来驱动硬件的。
操作系统的操作方式一般有两种,比较古老的是使用命令行的方式,比较新的方式是使用图形化界面的方式操作。无论是图形化界面还是命令行其本质是一样的。使用命令行来操作,一般不如图形化界面操作方便,但是可以更加贴近系统。无论是命令行还是图形化界面都是操作计算机的方式。
接下来我们将使用命令行来操作Linux系统。
1、Linux环境的安装
Linux环境的安装有三种方式:
1、虚拟机(不太推荐:虚拟机安装麻烦,实验不方便)
2、双系统(特别不推荐)
3、云服务器(特别推荐:不需要安装,便于操作和实验,环境也是统一的)
在这里,我选择的是使用云服务器。使用的商业版本是CentOS7.6。
其实对于个人学习来讲对于选择什么什么版本并不重要,因为本质都是一样的,学会使用一种商业版本,也就能很快上手另一个商业版本。
2、使用Xshell远程登陆云服务器
XShell 是一个远程终端软件,我们使用xshell来远程操作云服务器。
首先要想登录云服务器需要使用命令:
ssh 云服务器的用户名@云服务器的地址
然后输入密码就可以成功登录,不再过多介绍。除了这种登录方式,还有其他更便捷的登录方式,但这不是主题,想要了解的可以自行搜索。
XShell 下的复制粘贴:
复制: ctrl + insert
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的
Xshell下的自动全屏和取消全屏:alt+Enter
3、基础指令
指令是很多的,很难一次性的说完所有的指令,一般我们也不需要学会所有的指令,也不会把一个指令的所有选项说完,只需要了解常用的指令以及对应的选项,还有未来工作或者学习会用到的指令即可。
3.1、ls命令
语法:ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 也就是显示目录或者文件自己的属性。
-l 列出文件的详细信息。
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表 示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。什么都没有带的就表示普通文件。
注意:在Linux中是可以多个选项连用的,比如:
ls -a -l
是等价于:
ls -al
或者
ls -la
在Linux中以.开头的文件是隐藏文件。
Linux的任何一个目录下都有两个隐藏文件,分别是一个.和..,这两个文件的作用分别是:
.表示当前路径,用于定位当前目录的下一个文件。
..表示当前路径的上一级路径,用于返回上级路径。
3.2、pwd命令
语法:pwd
功能:显示用户当前所在的目录,也就是显示当前所在的路径。
3.3、cd命令
语法:cd 路径(可以是绝对路径也可以是相对路径)
功能:改变工作目录,将当前的工作目录改变到指定的目录下。
Linux系统中,磁盘上的文件和目录被组成一颗目录树(本质是一颗多叉树,他的叶子节点一定是空目录或非目录文件,路径上一个节点一定是一个非空目录),每个节点都是目录或者文件。
例如:
/:是Linux的根目录。
Linux的路径分隔符一般使用/(Windows一般使用的路径分割符是\)。
所以我们对文件或者目录的增删查改,本质上都是对这颗多叉树进行增删查改。文件=文件内容+文件属性。所以对文件的操作就=对文件内容的操作+对文件属性的操作。
例如:
cd ..
可以返回上级目录。
cd ~
可以用来返回用户的家目录。
cd -
用来返回上一次访问的目录,类似于撤销,退回上一步。
在CentOS中一般root用户登录后默认会在/root这个路径下,普通用户登陆后会在/home中,用户登陆后所在的默认路径称为该用户的家目录。
3.4、clear命令
语法:clear
功能:清除终端命令行界面的内容,本质上只是将光标移动到屏幕的顶部。
3.5、touch命令
语法:touch [选项]... 文件...
功能:新建一个不存在的文件。
3.6、mkdir命令
语法:mkdir [选项] dirname...
功能:创建一个目录。
选项:
-p:-p后面可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
3.7、tree命令
语法:tree 路径
功能:将对应的目录结构以树的形式给呈现出来。
比如:
tree .
是指以当前路径开始,呈现整个目录结构。
注意:tree命令是需要下载的,默认是没有的,要使用:
yum install -y tree
进行下载,直接在命令行输入即可,但要注意的是要在root账户上进行操作,未来等学习sudo命令后才可以使用普通用户进行下载(后面讲)。
3.8、rmdir命令
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法::rmdir 目录名
功能:删除空目录(注意不是空目录是没办法进行删除的。)
3.9、rm命令
语法:rm [选项] dirName/dir
功能:删除文件或目录
选项:
-f 即使文件属性为只读(即写保护),亦直接删除。(权限问题后面再提)
-i 删除前逐一询问确认(确认删除使用y或者yes,拒绝删除使用n或者no)。
-r 删除目录及其下所有文件(rm不能直接删除目录,要带上该选项才行)。
注意:使用该命令是比较危险的,要谨慎的使用该命令及其选项,因为删除后就没办法恢复,不像Windows里面有一个回收站。(补充:Windows中常称为的文件夹和Linux中的目录是一个东西)
通配符(*)
通配符*可以表示任意数量的任意字符。
例如:
ls *.c
表示列举出所有以.c为后缀的文件。
ls test.*
表示列举出所有的test.什么的文件。
再比如:
rm * -rf
表示删除掉该目录下的所有文件。
另外要注意的是:rm这个命令的选项可以在操作对象的右边,但是一般不建议这么做,因为有些情况可能对此并不支持。
3.10、whoami命令
语法:whoami
功能:显示当前登录用户的用户名。
3.11、man命令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法:man [选项] 查找的东西
功能:查看对应的解释手册。
选项:num 只在第num章节找(下面列举出了所有的章节)。
解释一下,手册分为8章:
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread(主要是C语言的)
4 是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
例如:
man 3 printf
表示在第三章寻找C语言的printf函数。
注意:man命令不加选项默认是从手册的第一章开始一章一章向下查的,直到找到或者找不到。
3.12、echo命令
语法:echo 字符串
功能:将后面的字符串原封不动的显示到标准输出文件(也就是显示屏)。
例如:
echo "hello"
打印出hello
重定向
>:这个符号就叫输出重定向,可以将原本输入的内容进行重定向,输入到另一个文件。
在这里进行补充一下,Linux中一切皆文件的思想(具体内容后面再讲),大体意思就是,在Linux中一切都是文件,比如显示屏是一个文件,键盘也是一个文件。
例如:
echo "hello world" > test.txt
表示将内容输入到test.txt文件。这个写入分为两步:首先清空文件内容,然后写入新内容,这就是输出重定向的特点。
例如:可以使用>来清空文件内容
> test.txt
如果不想要在写入前清空文件,可以使用追加重定向。
>>:和上面的输出重定向的唯一区别就是写入前不对文件进行清空。
除了上面讲的两个重定向,还有一个输入重定向:
<:这个符号就是输入重定向表示从某个文件里面读。
例如:(cat命令后面提到了)
cat < test.txt
指本应该从键盘文件读变成了从指定的test.txt文件读。
注意:无论是输出重定向还是追加重定向,如果后面的文件不存在的话,都会直接创建出来一个。
所以可以使用:
> 文件名
来创建一个文件。
printf命令
语法:printf 字符串
功能:向标准输出文件(也就是显示屏)打印字符串。
也是可以和上面的输出和追加重定向结合使用的,和上面的区别是使用printf写入的内容不会自动进行换行。
3.13、cp命令
语法::cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
选项:
-f :强制模式,覆盖已存在的目标文件。
-i :覆盖文件之前先询问用户
-r:递归处理,将指定目录下的文件与子目录一并处理。(cp不能直接拷贝目录,要加上-r选项)。
注意:在不同的环境下,指令可能会出现细小的差异。
3.14、mv命令
语法: mv [选项] 源文件或目录 目标文件或目录
功能:mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。
选项:
-f :强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在时,就会询问是否覆盖!
例如:
mv 文件 目录
移动文件到目录中,再比如:
mv 文件1 目录/文件2
移动文件1到目录并改名为文件2。
注意:当有些时候,因程序或者命令异常,而导致我们没办法进行指令输入,就可以使用Ctrl+c来强制终止异常的程序或者命令。
3.15、which命令
语法:which 命令
功能:用来查看对应命令所在的路径。
在这里我们要重新了解一下命令了:
命令本质上是一个可执行程序,在执行命令前,操作系统肯定是要查找对应的命令(关于查找是要利用环境变量进行查找到,后面讲),然后再进行执行,这些命令就在/usr/bin/目录下。
3.16、alias命令
语法:alias name='command'
功能:用来给别的起别名的。
例如:
alias cmd='ls -a -l'
结果就是在命令行输入cmd时,就相当于执行ls -a -l这个命令。
注意:并不建议弄一些自己起别名的命令,因为容易搞混,时间久了就分不清是自己弄的命令还是系统自带的命令。
如果想要取消别名,可以把他置空,可以输入:
alias cmd=''
也可以使用unalias命令来取消别名
unalias name
新创建的别名在当前shell会话中有效。如果想让其在每次启动新会话时都生效,可以将别名添加到您的shell配置文件中(感兴趣的可以自行查阅)。
之前我们学习过rm命令,但是rm命令比较危险,删除后没办法复原,在这里,我们就可以使用mv这个命令重写一下rm这个命令,搞一个类似于Windows的回收站。(感兴趣的可以自行查阅)。
3.17、cat命令
语法:cat [选项][文件]
功能:查看目标文件的内容
选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
cat命令默认是从输入设备读,写入显示设备,也就是说直接在命令行输入cat后面不加任何东西,向输入设备里面写的东西,都会被写入显示设备。
注意:cat不适合看大文本,只适合看小文本。
3.18、more命令
语法:more [选项][文件]
功能:more命令,功能类似 cat
操作:
q键: 退出more。
b键:返回上一页。
回车键:向下滚动一行。
空格键:查看下一页内容。
注意:相对来说,more更适合读大文本。
3.19、less命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
语法: less [参数] 文件
功能:less与more类似。
选项:
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
q:退出less
使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件。
3.20、head命令与tail命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示文档开头至标准输出中,而 tail 想当然就是看文档的结尾。
语法:head [参数]... [文件]...
功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
-数字(或者-n数字):表示从开始向下显示几行。
语法: tail [参数] [文件]
功能: 用于显示指定文件末尾内容,常用来查看日志文件。默认tail命令打印其相应文件的结尾10行。
-数字(或者-n数字):表示从结尾向上显示几行。
日志:程序运行到自己的每一个重要时刻都要自己打日志。日志包括时间、日志等级、日志具体信息、其他信息等等;这些信息会被放到一个文件里面,这个文件就叫日志文件。
管道文件
管道文件(|)不会放在磁盘中,而是放在内存中,作用是充当一个临时的文件,一般用完就销毁了。(关于管道文件,后面还会再讲,这里简单提一下)
例如:
head -n50 test | tail -n1
这个就表示从test文件中拿到前50行输入给管道文件,然后再从管道文件中提取最后一行。
3.21、date命令
语法:date [OPTION]... [+FORMAT]
功能:使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H : 小时
%M : 分钟
%S : 秒
%d : 日
%m : 月份
%Y : 年份
例如:
date +%H:%M:%S
表示显示时:分:秒。
还可以
date +%Y-%m-%d
显示年-月-日
时间戳
时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
当前时间转化为时间戳:date +%s
时间戳转化为时间:date -d@时间戳(也是可以指定格式展示的,例如:date +%Y-%m-%d -d@1234567)。
3.22、cal命令
cal命令可以用来显示公历(阳历)。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,是以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
语法:cal [参数][月份][年份]
功能:用于查看日历等时间信息,如只有一个参数,则表示年份,如有两个参数,则表示月份和年份
选项:-3 显示系统前一个月,当前月,下一个月的月历。
3.23、whereis命令
语法:whereis 查阅的东西
功能:用于查找指定命令的二进制文件、源代码和手册页的位置。这个命令通常用于帮助用户快速找到某个程序的安装位置。
3.24、find命令
Linux下find命令提供了相当多的查找条件,功能很强大。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间
语法:find [路径] 选项 名称
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
选项:-name 按照文件名查找文件。
例如:
find ~ -name test.c
从用户的家目录开始查找test.c文件。
注意:find可以查任何文件,但是which只能查命令。
3.25、grep命令
语法:grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
例如:
grep "hello world" test
表示从test文件中搜索字符串hello world,并将找到的行打印出来。
补充:grep本质上是行文本过滤工具,读取的行如果包含字符串,则进行显示打印。
3.26、zip命令与unzip命令
语法:zip 压缩文件.zip 目录或文件
功能:将目录或文件压缩成zip格式
选项:
-r : 递归处理,将指定目录下的所有文件和子目录一并处理
打包:也就是把所有的东西装起来。
压缩:就是把所有的东西装在一起的东西按某种算法合理的摆放,从而实现空间的充分利用。
例如:
zip -r test.zip test
将test压缩成zip格式文件
语法:unzip 压缩文件.zip
功能:将zip格式的压缩包进行解压。
选项:
-d:该选项后面跟上路径,可以用来指定解压缩后的内容放置的路径。
例如:
unzip otherProgram.zip -d ..
表示解压到上级路径。
注:打包压缩的方案有很多,上面是.zip的压缩方案。
注意:这个zip/unzip可能是默认没有的命令,要想使用这个命令可能需要下载,在root用户下使用如下命令:
yum install -y zip unzip
即可安装成功。
3.27、tar命令
语法:tar [选项] 文件与目录
功能:进行打包/解包。
选项:
-c
:创建一个新的归档文件。
-x :解压归档文件
-t :列出归档文件的内容。
-z :使用 gzip
压缩归档文件。
-f <file>
:指定归档文件的名称(必须放在选项列表的最后)。
-C <directory>
: 解压到指定目录
补充:.tar是打包的后缀;.gz是压缩后缀。这两个可以连起来写成.tgz表示打包压缩后缀(当然也可以写成.tar.gz表示打包压缩后缀)。
注意:一般选项是支持前面带-的,但是有些情况tar命令的选项前面不支持带-,具体情况具体分析。
例如:
tar czf test.tar.gz test d.txt
表示将test和d.txt打包压缩成test.tar.gz。
tar tzf test.tgz
表示进行预览test.tgz。
tar xzf xxx.tgz
表示解压解包。加上-C选项就可将压缩包解压到指定路径,例如:
tar xzf xxx.tgz -C 路径
3.28、bc命令
语法:bc
功能:输入bc就可以进入计算器。
除了直接输入bc进入计算器计算外,还可以使用下面的方式进行计算:
echo "12+12" | bc
通过管道传递表达式。计算结果为24
若想要退出计算器,可以输入quit。
3.29、uname命令
语法:uname [选项]
功能:用来获取电脑和操作系统的相关信息。补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
选项:
-r :显示内核版本号。
-a :显示全部的信息,包括内核名称、主机名、操作系统版本、处理器类型和硬件架构等。。
3.30、history命令
语法:history
功能:可以查看历史上使用过的命令。Linux默认记录的是最新的1000条命令。
3.31、logout命令
语法:logout
功能:结束当前会话并退出系统。
3.32、exit命令
语法:exit
功能:用于退出终端。
4、创建和删除普通用户以及修改密码
建议创建普通用户来使用,而不是直接使用root账号。除root账号外,其他的账号都是普通账号。
ssh是用来登录远程服务器的,格式为:
ssh user@remote
其中user是用户名,remote是远程服务器的地址。可以使用exit退出当前的用户登录。
adduser是用来创建普通用户的,格式为:
adduser username
username表示用户名。
passwd是用来修改用户登录密码的,格式为:
passwd username
userdel是用来删除普通用户的,格式为
userdel -r username
5、热键
热键是指经常使用的按键。
[Tab]按键:具有命令补全和档案补齐的功能
[Ctrl]+c按键:让当前的程序停掉
[Ctrl]+d按键:通常代表着:键盘输入结束的意思;另外,他也可以用来取代exit。可以退出登录,也可以退出xshell。
[Ctrl]+r按键:历史命令搜索,使用Ctrl+c退出。
6、关机
一般情况下,Linux服务器永不关机,直到报废。
语法:shutdown [选项]
功能:用来关机。
选项:
-h: 将系统的服务停掉后,立即关机。
-r: 在将系统的服务停掉之后就重新启动。
-t sec:-t 后面加秒数,亦即过几秒后关机的意思。
注意:shutdown命令普通用户是不能随便用的,要root用户或者普通用户使用sudo命令(后面讲)。
7、扩展
◆ 安装和登录命令: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。
感兴趣的话可以去了解上面很多没提到过的命令,命令是很难一次性讲完的,更多的指令将会在后面穿插讲到。