1 Linux简介
1.1 Linux的起源
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
1.2 Linux 的发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
1.3 Linux系统的安装
目前安装操作系统方式有2种:真机安装、虚拟机安装。
- 真机安装:使用真实的电脑进行安装,像安装windows操作系统一样,真机安装的结果就是替换掉当前的windows操作系统;
- 虚拟机安装:通过一些特定的手段,来进行模拟安装,并不会影响当前计算机的真实操作系统。
如果是学习或者测试使用,强烈建议使用虚拟机安装方式。虚拟机目前有2个比较有名的产品:vmware出品的vmware workstation、oracle 出品的virtual Box。关于如何安装虚拟机,以及如何在虚拟机中安装Linux系统,可以参见网上其他文章。
2 Linux系统的文件
2.1 文件与文件夹(目录)
文件:一般都是一个独立的东西,可以通过一些特定的工具进行打开,并且其中不能在包含除了文字以外的东西。
文件夹:可以在其中包含其他文件的东西。
本质上说,文件是数据的实体,而文件夹则是用于组织和管理文件的概念性容器。文件可以存储在文件夹中,而文件夹本身无法存储数据,它只是用来存放和管理文件。文件夹通过文件系统的层级结构来组织文件,使得用户能够更方便地定位和操作文件。
Linux 本身也是一个基于文件形式表示的操作系统。Linux一切皆文件。在windows是文件的,在Linux下同样也是文件;在windows不是文件的,在Linux下也是以文件的形式存储的;
日常学习中和日常工作中,对文件的操作有:创建文件、编辑文件、保存文件、关闭文件、重命名文件、删除文件、恢复文件。
2.2 Linux系统的文件目录结构
Linux 目录结构:
- bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的
- dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)。
- etc:该目录主要存储一些配置文件。
- home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。
- proc:process,表示进程,该目录中存储的是Linux运行时候的进程。 Root:该目录是root用户自己的家目录。
- sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。
- tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
- usr:存放的是用户自己安装的软件。类似于windows下的program files。 Var:存放的程序/系统的日志文件的目录。
- mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。
3 文件与目录基本操作
3.1 目录操作
处理目录的常见命令见下表。
项目 | Value |
---|---|
ls(英文全拼:list files) | 列出目录及文件名 |
cd(英文全拼:change directory) | 切换目录 |
pwd(英文全拼:print work directory) | 显示目前的目录 |
mkdir(英文全拼:make directory) | 创建一个新的目录 |
rmdir(英文全拼:remove directory) | 删除一个空的目录 |
cp(英文全拼:copy file) | 复制文件或目录 |
rm(英文全拼:remove) | 删除文件或目录 |
mv(英文全拼:move file) | 移动文件与目录,或修改文件与目录的名称 |
在介绍上述命令详细用法之前,需要了解一下相对目录和绝对目录。
- 路径可以分为两种:相对路径、绝对路径。
- 相对路径:相对首先得有一个参照物(一般就是当前的工作路径);相对路径的写法:在相对路径中通常会用到2个符号“./”【表示当前目录下】、“../”【上一级目录下】。
- 绝对路径:绝对路径不需要参照物,直接从根“/”开始寻找对应路径;
(1)ls (列出目录)
语法
ls [-aAdfFhilnrRSt] 目录名称
ls [–color={never,auto,always}] 目录名称
ls [–full-time] 目录名称
选项与参数:
- -a :全部的文件,连同隐藏文件( 在Linux中,隐藏文件是以 '. ’ 开头的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
将目录下的所有文件列出来(含属性与隐藏档)
请注意,在Linux中,以“-”开头的都是文件,以“d”开头的都是文件夹。
(2)pwd (显示目前所在的目录)
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。
(3)mkdir (创建新目录)
如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。
mkdir [-mp] 目录名称
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
加了这个 -p 的选项,可以自行帮你创建多层目录
(4)rmdir (删除空的目录)
rmdir [-p] 目录名称
选项与参数:
- -p :从该目录起,一次删除多级空目录
(5)cp (复制文件或目录)
cp 即拷贝文件和目录。
cp [-adfilprsu] 来源档(source) 目标档(destination)
cp [options] source1 source2 source3 … directory
下面为复制一个文件,注意:Linux在复制过程中是可以重新对新位置的文件进行重命名的,但是如果不是必须的需要,则建议保持前后名称一致。
下面为复制一个文件夹,注意:当使用cp命令进行文件夹复制操作的时候需要添加选项“-r”【-r表示递归复制】,否则目录将被忽略
(6)rm (移除文件或目录)
rm [-fir] 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
(7)mv (移动文件与目录,或修改名称)
mv [-fiu] source destination
mv [options] source1 source2 source3 … directory
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
复制一文件,创建一目录,将文件移动到目录中。
注意,文件和文件夹的重命名操作也是 mv 命令。
(8)管道
管道符:|
作用:管道一般可以用于“过滤”,“特殊”,“扩展处理”。
语法:管道不能单独使用,必须需要配合前面所讲的一些指令来一起使用,其作用主要是辅助作用。
案例1:过滤某个文件夹下所有包含“init”字符串的文件或文件夹
案例2:统计当前目录下文档的总个数
3.2 文件操作
Linux系统中使用以下命令来查看文件的内容:
- cat 由第一行开始显示文件内容
- head 只看头几行
- tail 只看尾巴几行
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- nl 显示的时候,顺道输出行号!
- wc 统计文件内容信息(包含行数、单词数、字节数)
(1)cat(直接打开文件)
作用:cat有直接打开一个文件的功能
cat 文件的路径
(2)head (查看一个文件的前n行)
作用:查看一个文件的前n行,如果不指定n,则默认显示前10行。
head -n 文件路径 【n表示数字】
(3)tail(查看一个文件的未n行)
查看一个文件的未n行,如果n不指定默认显示后10行.
tail -n 文件的路径 n同样表示数字
(4)less(查看文件,以较少的内容进行输出)
作用:查看文件,以较少的内容进行输出,按下辅助功能键(数字+回车、空格键+上下方向键)查看更多
less 需要查看的文件路径
(5)wc(统计文件内容信息)
作用:统计文件内容信息(包含行数、单词数、字节数)
wc -lwc 需要统计的文件路径
选项与参数:
- -l:表示lines,行数
- -w:表示words,单词数 依照空格来判断单词数量
- -c:表示bytes,字节数
(6)输出重定向
一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。
输出重定向有两种方式:
- >:覆盖输出,会覆盖掉原先的文件内容
- >>:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
语法:
正常执行的指令 > / >> 文件的路径
注意:文件可以不存在,不存在则新建
使用覆盖重定向,保存ls -la 的执行结果,保存到当前目录下的ls.txt
(7)find(查找)
作用:用于查找文档(其参数有55个之多)
find 路径范围 选项 选项的值
选项:
- -name:按照文档名称进行搜索(支持模糊搜索)
- -type:按照文档的类型进行搜索;文档类型:“-”表示文件(在使用find的时候需要用f来替换),“d”表示文件夹
案例1:使用find来搜索passed
案例2:使用find来搜索/etc下所有的文件夹。
4 用户和用户组管理
Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。
不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。
用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢?
显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。
将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。
在用户和用户组管理当中,需要格外注意三个文件:
- /etc/passwd 存储用户的关键信息
- /etc/group 存储用户组的关键信息
- /etc/shadow 存储用户的密码信息
4.1 用户管理
打开 /etc/passwd ,我们截取最后几行
可以看出,该文件中每行的字段都是用冒号分隔开的,每行的格式为:
用户名:密码:用户ID:用户组ID:注释:家目录:解释器shell
以冒号分隔开的每个字段含义为:
项目 | Value |
---|---|
用户名: | 创建新用户名称,后期登录的时候需要输入; |
密码: | 此密码位置一般情况都是“x”,表示密码的占位; |
用户ID: | 用户的识别符; |
用户组ID: | 该用户所属的主组ID; |
注释: | 解释该用户是做什么用的; |
家目录: | 用户登录进入系统之后默认的位置; |
解释器shell: | 等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核处理; |
(1)su(切换用户命令)
su [用户名] (switch user)
如果用户名不指定则表示切换到root用户。
切换用户需要注意的事项:
- 从root往普通用户切换不需要密码,但是反之则需要root密码;
- 切换用户之后前后的工作路径是不变的;
- 普通用户没有办法访问root用户家目录,但是反之则可以;
但是这里要额外提醒同学们一种情况,在刚装完Linux的虚拟机之后,在终端中输入su命令,按照提示输入密码后,会提示出现鉴定故障,如下图所示。
原因是在安装linux系统时没有给root用户设置密码,重新设置密码即可,输入下面命令:
sudo passwd root
—>如果没有登录密码 则提示输入新密码 + 二次确认输入
这样root账号的密码就设定好了,之后重启终端,su 即可进入root用户。另外,如果要退出root用户,直接exit即可。
提示:所有跟用户操作的命令(除passwd外)只有root超级管理员有权限执行。以下所有的用户操作需要首先切换到root用户下。
(2)useradd(添加用户)
#useradd 选项 用户名
常用选项:
- -g:表示指定用户的用户主组,选项的值可以是用户组的id,也可以是组名。
- -G:表示指定用户的用户附加组,选项的值可以是用户组的id,也可以是组名。
- -u:uid,用户的id(用户的标识符),系统默认会从1000之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义。
- -c:添加注释。
- -m:创建用户的主目录。
案例:创建用户zhangsan,并且创建同名的主目录。
验证用户创建是否成功,可以通过下面两种方式之一。
- 验证/etc/passwd的最后一行,查看是否有zhangsan的信息;
- 验证是否存在家目录(在Centos下创建好用户之后随之产生一个同名家目录);
(3)userdel (删除用户)
userdel 选项 用户名
常用选项:
- -r:表示删除用户的同时,删除其家目录;
案例:删除zhangsan用户
注意:已经登录的zhangsan用户删除的时候提示删除失败,这是需要 kill对应用户的全部进程。
(4)usermod(修改用户)
usermod 选项 用户名
常用选项:
- -g:表示指定用户的用户主组,选项的值可以是用户组的id,也可以是组名
- -G:表示指定用户的用户附加组,选项的值可以是用户组的id,也可以是组名
- -u:uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ的自选靓号情况】
- -l:修改用户名
案例:新建用户李四,将李四的主组改为1000,附加组改为1001。
(5)passwd (设置密码)
Linux不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
#passwd 用户名
案例:设置lisi用户的密码
在设置密码的时候也是没有任何输入提示的,放心输入,确保两次输入的密码一致,按下回车即可。
4.2 用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
文件结构:
用户组名:密码:用户组ID:组内用户名
密码:X表示占位符,虽然用户组可以设置密码,但是绝大部分的情况下不设置密码;
组内用户名:表示附加组是该组的用户名称;
(1)用户组添加
groupadd 选项 用户组名
常用选项:
- -g:类似用户添加里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字,如果自己不指定,则默认从500之后递增;
案例:使用groupadd指令创建一个新的用户组,组的ID为3001,命名为Administrator
(2)用户组编辑
groupmod 选项 用户组名
常用选项:
- -g:类似用户修改里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字
- -n:类似于用户修改“-l”,表示设置新的用户组的名称
案例:修改Administrators用户组,将组ID改为888.
(3)用户组删除
groupdel 用户组名
注意:当如果需要删除一个组,但是这个组是某个用户的主组时,则不允许删除;如果确实需要删除,则先从组内移出所有用户。
5 系统相关命令
(1)hostname
作用:操作服务器的主机名(读取、设置)
hostname 含义:表示输出完整的主机名
#hostname -f 含义:表示输出当前主机名中的FQDN(全限定域名)
(2)id
作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。
#d 默认显示当前执行该命令的用户的基本信息
id 用户名 显示指定用户的基本信息
(3)whoami
作用:“我是谁?”显示当前登录的用户名,一般用于shell脚本,用于获取当前操作的用户名方便记录日志。
whoami
(4)ps -ef
作用:主要是查看服务器的进程信息
选项含义:
- -e:等价于“-A”,表示列出全部的进程
- -f:显示全部的列(显示全字段)
执行结果:
(5)top
作用:查看服务器的进程占的资源(100%使用)
进入命令:top (动态显示)
退出命令:按下q键
输出的结果:
表头含义:
- PID:进程id;
- USER:该进程对应的用户;
- PR:优先级;
- VIRT:虚拟内存;
- RES:常驻内存;
- SHR:共享内存;计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR)
- S:表示进程的状态status(sleeping,其中S表示睡眠,R表示运行);
- %CPU:表示CPU的占用百分比
- %MEM:表示内存的占用百分比
- TIME+:执行的时间
- COMMAND:进程的名称或者路径;
在运行top的时候,可以按下方便的快捷键:
- M:表示将结果按照内存(MEM)从高到低进行降序排列;
- P:表示将结果按照CPU使用率从高到低进行降序排列;
- 1:当服务器拥有多个cpu的时候可以使用“1”快捷键来切换是否展示显示各个cpu的详细信息;
(6)du -sh
作用:查看目录的真实大小
du -sh 目录路径
选项含义:
- -s:summaries,只显示汇总的大小
- -h:表示以高可读性的形式进行显示
(8)ifconfig
作用:用于操作网卡相关的指令。
ifconfig (获取网卡信息)
(9)kill
作用:表示杀死进程(当遇到僵尸进程或者出于某些原因需要关闭进程的时候)
kill 进程PID (语法需要配合ps一起使用)
(10)reboot
作用:重新启动计算机
语法1:#reboot 重启
语法2:#reboot -w 模拟重启,但是不重启(只写关机与开机的日志信息)
(11)shutdown
作用:关机
#shutdown -h now “关机提示”
或者 #shutdown -h 15:25 “关机提示”
(12)man
作用:manual,手册(包含了Linux中全部命令手册,英文)
man 命令 (退出按下q键)
例如,查看cp命令的手册内容。