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 底层目录结构

directory.jpg

系统启动必须:

  • /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
2
3
4
5
6
7
8
9
10
11
文件基本属性 文件数 所属用户 用户组    文件大小 创建时间      文件名
drwxr-xr-x 11 mysql mysql 4096 Mar 12 2018 aria2-1.32.0
-rw-r--r-- 1 root root 3773322 May 26 2017 aria2-1.32.0.tar.gz
drwxr-xr-x 2 root root 4096 Mar 27 2018 Documents
drwxr-xr-x 2 root root 4096 Mar 27 2018 Downloads
drwxr-xr-x 7 root root 4096 Mar 19 2018 oneinstack
-rw-r--r-- 1 root root 237577836 Mar 11 2018 oneinstack-full.tar.gz
drwxr-xr-x 2 root root 4096 Mar 27 2018 Photos
drwxr-xr-x 3 root root 4096 Mar 17 2018 python_spider
-rw-r--r-- 1 root root 40511064 Mar 27 2018 【阅后即瞎】08 其实,你粉了那么久的女明星是个男的……-Lb4o2vH6lDM.mp4

在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件;
  • 若是[ l ]则表示为链接文档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。其中第一个组合指的是文件所有者的权限,第二个组合指的是与所有者同属用户组的用户的权限,第三个组合指的是其他用户的权限。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

更改Linux文件属性

  1. chgrp:更改文件所属用户组

    chgrp [-R] 属组名 文件名

    • -R:递归更改文件所属用户组,就是在更改某个目录文件的所属用户组时,如果加上-R的参数,那么该目录下的所有文件的所属用户组都会更改。
  2. 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
    39
    	   chown [-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文件属性
-rwxrwxrwx 1 root root 10 Jan 18 22:00 test1
root@VM-59-93-debian:
# chmod u=rw,g=r,o=r test1 //更改test1文件属性
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权限
root@VM-59-93-debian:
# ls -l test1 //查看test1的权限
-rw-r–r-x 1 root root 10 Jan 18 22:00 test1

1
2
3
4
5
6
7
8
9

### <font color=#0099ff>Linux 常用命令</font>
* **ls**: 列出目录
`ls [-adl]`
* -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来
* -d :仅列出目录本身,而不是列出目录内的文件数据
* -l :长数据串列出,包含文件的属性与权限等等数据
* **cd**:切换目录
` cd [相对路径或绝对路径]`
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 //

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:# mv ./test3 /data/test3 //把当前目录的test3移动到/data目录
root@VM-59-93-debian:# mv test3 testx //把当前目录的test3改名为testx
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:
# rpm -ivh package //安装一个rpm包
root@VM-59-93-debian:# rpm -Uvh package //升级一个rpm包
root@VM-59-93-debian:
# rpm -q package //查询一个rpm包是否被安装
root@VM-59-93-debian:# rpm -qi package //查询被安装的rpm包的信息
root@VM-59-93-debian:
# rpm -ql package //查询rpm包里有哪些文件
root@VM-59-93-debian:# rpm -V package //校验已安装包
root@VM-59-93-debian:
# rpm -e package //卸载已安装的包


>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服务|