Linux运维系列教程(一):Linux基础知识讲解
Linux 基础知识讲解
Linux 简介
Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等
Linux具有如下优点:
- 稳定、免费或者花费少
- 安全性高
- 多任务,多用户
- 耗资源少
- 由于内核小,所以它可以支持多种电子产品,如:Android手机、PDA等。
目前Linux服务器一般使用lnmp(Linux+nginx+mysql+php)或lamp(Linux+nginx+mysql+php)
Linux 实用知识
Linux 登陆
Linux系统中是通过ssh服务实现的远程登录功能,默认ssh服务端口号为 22
Windows上的Linux登陆软件有SecureCRT, Putty, SSH Secure Shell,Xshell等
想要进行Linux上的文件可视化管理可以使用WinSCP
Linux 底层目录结构
系统启动必须:
/boot:
存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。/etc:
存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。/lib:
存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。/sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
/bin:
存放着最常用的程序和指令/sbin:
只有系统管理员能使用的程序和指令。
####外部文件管理:
/dev :
Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。/media:
类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。/mnt:
临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。/lost+found:
一般情况下为空的,系统非法关机后,这里就存放一些文件。/tmp:
这个目录是用来存放一些临时文件的。
账户:
/root:
系统管理员的用户主目录。/home:
用户的主目录,以用户的账号命名的。/usr:
用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。/usr/bin:
系统用户使用的应用程序与指令。/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。/usr/src:
内核源代码默认的放置目录。
运行过程中要用:
/var:
存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。
扩展用的:
/opt:
默认是空的,我们安装额外软件可以放在这个里面。/srv:
存放服务启动后需要提取的数据(不用服务就是空)
Linux 文件属性
Linux 文件属性解读
1 | 文件基本属性 文件数 所属用户 用户组 文件大小 创建时间 文件名 |
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。其中第一个组合指的是文件所有者的权限,第二个组合指的是与所有者同属用户组的用户的权限,第三个组合指的是其他用户的权限。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
更改Linux文件属性
chgrp:更改文件所属用户组
chgrp [-R] 属组名 文件名
- -R:递归更改文件所属用户组,就是在更改某个目录文件的所属用户组时,如果加上-R的参数,那么该目录下的所有文件的所属用户组都会更改。
chown:更改文件所有者,也可以同时更改文件所属用户组
[–R] 所有者名 文件名 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39chown [-R] 所有者名:用户组名 文件名```
3. **chmod**:更改文件权限
在使用**chmod**更改文件属性时有两种方法:符号法和数字法
**我们先介绍数字法:**
Linux文件的权限有三种:read(r)/write(w)/execute(x) 在Linux中我们用三个数字来表示他们
* r:4
* w:2
* x:1
* -:0
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要按次序累加的,例如当权限为
[-rw-r--r--]时,他们的数字代表分别是:
* owner: rw-:4+2+0 = 6
* goup: r--: 4+0+0 = 4
* others: r--: 4+0 +0 =4
所以这个文件的权限就是 644,如果我们需要用数字法更改权限,其语法如下:
`chmod [-R] xyz 文件或目录`
* -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
* xyz :要更改的目标权限的数字代表
**接下来介绍符号法**:
Linux中文件有三种身份的权限,我们这里用三个字符来分别代表他:
* user:u
* group:g
* others:o
* all:a (代表全部身份)
三项权限依旧用w,r,x来表示。那么符号法的使用方法就如下表所示
|命令|用户身份|权限操作|目标权限|目标文件|
|:--|:--|:--|:--|:--|
|chmod|u|=(设定)|w|文件或目录|
||g|+(增加)|r||
||o|-(减少)|x||
||a||||
如果我们需要将文件权限设置为 [-rw-r--r-- ],可以使用 `chmod u=rw,g=r,o=r 文件名` 来设定:
root@VM-59-93-debian:# ls -l test1 //查看test1文件属性# chmod u=rw,g=r,o=r test1 //更改test1文件属性
-rwxrwxrwx 1 root root 10 Jan 18 22:00 test1
root@VM-59-93-debian:
root@VM-59-93-debian:~# ls -l test1 //查看更改后的文件属性
-rw-r–r– 1 root root 10 Jan 18 22:00 test1
1 | 如果我们只需要需要增加文件的权限,也可以用`+`来更改: |
root@VM-59-93-debian:# chmod o+x test1 //给others增加execute权限# ls -l test1 //查看test1的权限
root@VM-59-93-debian:
-rw-r–r-x 1 root root 10 Jan 18 22:00 test1
1 |
|
root@VM-59-93-debian:/data/wwwroot# cd /root
root@VM-59-93-debian:~# pwd //显示当前目录
/root
1
2
3
4
* 绝对路径:由根目录 / 写起,例如: /root 这个目录
* 相对路径:不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man
* **pwd**:显示目前的目录
root@VM-59-93-debian:~# pwd
/root
1
2
3
4
* **mkdir**:创建一个新的目录
`mkdir [-mp] 目录名称`
* -m :配置文件的权限
* -p :递归创建目录
root@VM-59-93-debian:~# mkdir study //创建一个叫“study”的目录
root@VM-59-93-debian:~# mkdir study/study1/study2 //递归创建一个/study/study1/study2的目录(未使用-p参数)
mkdir: cannot create directory ‘study/study1/study2’: No such file or directory //无法创建
root@VM-59-93-debian:~# mkdir -p study/study1/study2 //递归创建一个/study/study1/study2的目录(使用-p参数)
root@VM-59-93-debian:~# mkdir test2 //创建一个test2目录
root@VM-59-93-debian:~# ls -al test2 //查看权限
total 8
drwxr-xr-x 2 root root 4096 Jan 18 22:32 .
drwx------ 17 root root 4096 Jan 18 22:32 ..
root@VM-59-93-debian:~# rm -rf test2 //删除test2
root@VM-59-93-debian:~# mkdir -m 777 test2 //创建一个test2的目录并指定权限为777
root@VM-59-93-debian:~# ls -al test2 //查看权限
total 8
drwxrwxrwx 2 root root 4096 Jan 18 22:34 .
drwx------ 17 root root 4096 Jan 18 22:34 ..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
```
* **rmdir** :删除空的目录
` rmdir [-p] 目录名称`
* -p :连同上一级『空的』目录也一起删除
* **cp**: 复制文件或目录
`cp [-adfilprsu] 来源档(source) 目标档(destination)`
* -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明
* -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
* -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
* -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行;
* -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
* -p:连同文件的属性一起复制过去,而非使用默认属性;
* -r:递归持续复制,用於目录的复制行为;
* -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
* -u:若 destination 比 source 旧才升级 destination !
root@VM-59-93-debian:# cp ./test3 /data/wwwroot/default/test4 //把当前目录的test3文件复制到/data/wwwroot/default/目录并改名为test4 //# mv ./test3 /data/test3 //把当前目录的test3移动到/data目录
1
2
3
4
5* **rm**: 移除文件或目录
` rm [-fir] 文件或目录`
* -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
* -i :互动模式,在删除前会询问使用者是否动作
* -r :递归删除
rm /data/wwwroot/default/test4 //删除之前创建的test4
1
2
3
4
5
6* **mv**: 移动文件与目录,或修改文件与目录的名称
`mv [-fiu] source destination`
* -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
* -i :互动模式,在删除前会询问使用者是否动作
* -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
root@VM-59-93-debian:
root@VM-59-93-debian:# mv test3 testx //把当前目录的test3改名为testx# rpm -ivh package //安装一个rpm包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### <font color=#0099ff>Linux 软件安装</font>
#### <font color=MediumOrchid> RPM(deb)安装</font>
在 Linux 操作系统下,几乎所有的软件均通过RPM(redhat package manager) 进行安装、卸载及管理等操作。RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下软件包的软件。RPM 有五种操作模式,分别为:安装、卸载、升级、查询和验证。
`rpm [-参数] package`
* -a :所有套件
* -e: 删除指定的套件
* -i:安装指定的套件档
* -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户
* -U:升级指定的套件档
* -v:显示指令执行过程
* -p:查询指定的RPM套件档
* -h:套件安装时列出标记
* -V:验证
root@VM-59-93-debian:
root@VM-59-93-debian:# rpm -Uvh package //升级一个rpm包# rpm -q package //查询一个rpm包是否被安装
root@VM-59-93-debian:
root@VM-59-93-debian:# rpm -qi package //查询被安装的rpm包的信息# rpm -ql package //查询rpm包里有哪些文件
root@VM-59-93-debian:
root@VM-59-93-debian:# rpm -V package //校验已安装包# rpm -e package //卸载已安装的包
root@VM-59-93-debian:
>Debian,Ubuntu等采用的是deb包的安装方法,和rpm安装类似。相关内容就不再重复了。
>需要注意的是,我们可以采用alien将rpm转化为deb包再使用**dkpg**命令来安装
#### <font color=MediumOrchid> 软件包管理器安装</font>
在Linux的发行版中,几乎每种版本都内置了前端的软件包管理器(与Fedora,Centos和Redhat中是YUM,与Ubuntu和debian中是apt-get)。使用他们可以快速的进行安装所需要的软件,并自动安装锁依赖的包,解决RPM安装所面临依赖关系。
**以yum为例**
`yum [options] [command] [package]`
* options:可选参数,常用的有-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)
* command:需要进行的操作命令
* package:包名
yum常用命令
* 列出所有可更新的软件清单命令:`yum check-update`
* 更新所有软件命令:`yum update`
* 仅安装指定的软件命令:`yum install <package_name>`
* 仅更新指定的软件命令:`yum update <package_name>`
* 列出所有可安裝的软件清单命令:`yum list`
* 删除软件包命令:`yum remove <package_name>`
* 查找软件包 命令:`yum search <keyword>`
* 清除缓存命令:
`yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers`
### <font color=#0099ff>Linux 定时任务</font>
Linux crontab是用来定期执行程序的命令。
crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
我们可以在以下文件夹内找到相关配置文件:
* /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
* /etc/crontab 这个文件负责调度各种管理和维护任务,一般不在此文件安装自己的任务
* /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
* etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly,其中文件每小时/天/星期、月执行一次。
`crontab [-u user] file`
`crontab [ -u user ] { -l | -r | -e }`
* file:命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab
* -u user 是指设定指定 user 的时程表.如果不使用 -u user 的话,就是表示设定当前用户的时程表。
* -l : 列出目前的时程表
* -r : 删除目前的时程表
* -e : 执行文字编辑器来设定时程表,若没有时程表则自动创建。
时程表的格式如下
`f1 f2 f3 f4 f5 program`
* 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的命令
* *表示每该单位时间需要执行该任务 `* 5 5 * * program`表示每月5号的5点每分钟执行一次该任务
* a-b表示该段时间内需执行该任务 `10-20 5 5 * *` 表示每月5号的5点10分至20分执行一次该任务
* */n 表示每隔n个该单位时间需执行一次该任务`* */1 * * * *`表示每隔一小时执行一次该任务
* 可以使用","添加多个时间 `1,2 * * * *`表示每小时的第一第二分钟需要执行该任务。
**crontab 使用实例**
|格式|说明|
|:--|:--|
|`*/1 * * * * service httpd restart`|每一分钟 重启httpd服务|
|`0 */1 * * * service httpd restart`|每一小时 重启httpd服务|
|`30 21 * * * service httpd restart`|每天 21:30 分 重启httpd服务|
|`26 4 1,5,23,28 * * service httpd restart`|每月的1号,5号 23 号 28 号 的4点26分,重启httpd服务|
|`26 4 1-21 * * service httpd restart`|每月的1号到21号 的4点26分,重启httpd服务|
|`*/2 * * * * service httpd restart`|每隔两分钟 执行,偶数分钟 重启httpd服务|
|`1-59/2 * * * * service httpd restart`|每隔两分钟 执行,奇数 重启httpd服务|
|`0 23-7/1 * * * service httpd restart`|每天的晚上11点到早上7点 每隔一个小时 重启httpd服务|
|`0,30 18-23 * * * service httpd restart`|每天18点到23点 每隔30分钟 重启httpd服务|
|`0-59/30 18-23 * * * service httpd restart`|每天18点到23点 每隔30分钟 重启httpd服务|