二十五. Linux

295 阅读16分钟

1 基础篇章

1.1介绍

  • linux是一个开源,免费的操作系统,其稳定性,安全性,处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/python/java/go) 都会部署到linux/unix系统上.
  • linux的吉祥物是企鹅Tux
  • linux之父Linus Torvalds, Git创作者,世界著名黑客,小伙伴可以看看linux0.01版源码.
  • Linux主要的发行版: Ubuntu,RedHat,CentOS,Debain,Fedora,SuSE,OpenSUSE

1.2 应用领域

  • 服务器领域
  • 嵌入式领域: 主要应用有机顶盒,数字电视,网络电话,程控交换机,手机,PDA,智能家居,智能硬件等

1.3 Linux和Unix的关系

  • ...

2 安装

2.1 Virtual Machine和 Centos

  • 安装虚拟机VMWare, 要先开启CPU虚拟化
  • Linux操作系统的安装
  • 1G的 boot分区
  • 2G的 swap分区,交换分区, 临时充当内存
  • 17G的 / 根分区

2.2 网络连接的三种模式

  • 桥接模式: 虚拟系统可以和外部系统直接通讯, 但是容易造成ip冲突
  • NAT模式, 网络地址转换模式,不造成ip冲突
  • 主机模式: 独立的系统,不能与外界联系

2.3 虚拟机克隆

  • 如果你已经安装了一台linux操作系统, 你还想再要更多的,没有必要重新装,你只需要克隆就可以了.
  • 方式1: 直接拷贝一份安装好的虚拟机文件
  • 方式2: 使用vmware的克隆操作, 注意克隆时需要先关闭linux系统.

2.4 虚拟机快照

  • 如果你在使用虚拟机系统的时候(比如linux), 你想回到原先的某一状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,VMWare也提供了这样的功能, 就叫快照管理.

2.5 虚拟机迁移和删除

  • 我在前面讲过,虚拟系统linux安装好了,它的本质就是文件(放在文件夹的).因此虚拟系统的迁移很方便,你可以把安装好的虚拟系统(这个文件夹整体)拷贝或者剪切到另外位置使用. 删除也很简单,用VMware进行移除,直接文件删除也行.

2.6 安装vmtools, 与母机共享文件夹

  • vmtools安装后,可以让我们在windos下更好的管理VMWare虚拟机
  • 可以设置windows和centos的共享文件夹
(1) 弹出cenos的光驱, 安装gcc
(2) 点击"虚拟机" --> 安装VMware,   在桌面重新生成了一个光盘.打开,将tar.gz文件复制到opt目录下
(3) 解压这个压缩包, 进入到解压之后的文件夹中, 执行./vmware-install.pl 来安装这个文件.
(4) 当你看到 'the VMware team' 这时vmtools就安装好了

(5) 右击虚拟机名--->设置--> 选项 ---> 共享文件夹 ---> 总是启用 ---> 添加 ---> 主机路径 ---> 启用此共享 ---> 完成 ---> 确定

(6) 在/mnt/hgfs 目录下可以找到这个共享文件夹

注意: 这种传输 linux系统 与 windows系统是在同一个电脑上的.

3. linux目录结构

  • 在Linux世界里,一切皆文件
    (1) / 
        这是根目录.
    (2) /root 
        这是系统管理员的 用户目录.
    (3) /bin   (/usr/bin,  /usr/local/bin)
        这里存放了标准的linux的工具, 比如 ls vi more 等等,通常来说这个目录已经包含在你的path系统变量里面了.   
        功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令. 作为基础系统所需要的最基础的命令就是放在这里,但不用与基本的启动.
        
        /sbin 
        s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序.
        大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的;我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。
        
    (4) /etc
        这里主要存放了系统配置方面的文件. 举个例子: 你安装了samba这个套件, 当你想要修改samba配置文件的时候,你会发现他们(配置文件)就在 /etc/samba
    (5) /dev
        这里主要存放了与设备(包括外设) 有关的文件 (unix和linux系统均把设备当成文件). 想连接打印机吗? 系统就是从这个目录开始工作的. 另外还有一些包括磁盘驱动 USB驱动等都放在这个目录.
    (6) /home
        这里主要存放你的个人数据. 具体每个用户的设置文件,用户的桌面文件夹,还有用户的数据都放在这里. 每个用户都有自己的用户目录,位置为: /home/用户名.  当然root用户除外
    (7) /tmp
        这是临时目录.对于某些程序来说,有些文件被用了一次两次之后,就不会再被用到,像这样的文件就放在这里.有些linux系统会定期自动对这个目录进行清理,因此,千万不要把重要的数据存放在这里
    (8) /usr
        在这个目录下,你可以找到那些不适合放在/bin 或 /etc目录下 的 额外的工具. 比如像游戏啊,一些打印工具等等. 用户安装的一些程序等等.
        /usr目录饱含了许多子目录.  
        /usr/bin 目录用户存放程序
        /usr/share 用户存放一些共享数据, 比如音乐文件或者图标等等.
        /usr/lib 目录用于存放那些不能直接运行的, 但却是许多程序运行所必需的一些函数库文件.
        /usr/local 这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。
    (9) /opt
        这里主要存放那些可选的程序,存放下载好的软件安装包.你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
    (10) /boot
        Linux的内核 及 引导系统程序 所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
    (11) /mnt
        这个目录一般是用于存放 挂载储存设备的挂载目录的(过载外部母机的文件系统),比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎 么定义了;比如光驱可以挂载到/mnt/cdrom 。
    (12) /proc
        操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。
    (13) /lib
    系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件. 几乎所有的应用程序都需要用到这些共享库.
    (14) /var/log 系统日志存放,分析日志要看这个目录的东西;
    (15) /lost+found 
         这个目录一般情况下是空的,当系统非法关机后,这里就存放一些文件
    (16) /srv
         service缩写,该目录存放一些服务启动之后需要提取的数据.
    (17) /sys
         这是linux2.6内核的一个很大的变化.该目录下安装了2.6内核中新出现的一个文件系统sysfs
    (18) /var
         这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下. 包括各种日志文件.
    (19) /selinux[security-enhanced linux]
         SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置.

4. 实操

4.1 远程登录

  • ifconfig查看自己的ip地址, ping此ip地址可以ping通
  • xshell, 新建会话,输入IP地址, 双击进入远程控制
  • xftp
  • reboot是重启

4.2 Vi 和 Vim

  • 在Linux内部会内置文本编辑器Vi, 这个vi有点类似于windows的记事本

  • Vim具有程序编辑的能力,可以看到是Vi的增强版本,字体颜色和语法有区别,自动补全等等

  • Vim的三种模式:

  • 正常模式(在这个模式中你可以使用上下左右键,还可以删除修改复制粘贴)

  • 插入模式(按i I o O a A r R就可以进入这个模式)

  • 命令行模式, 在这个模式中,可以提供你相关指令,完成读取,存盘,替换,离开,显示行号等等. (:wq :q :q! /wq)

  • Vi 和 Vim快捷键

    (1) 拷贝当前行 正常模式yy, 拷贝当前行向下的5行 5yy 粘贴p
    (2) 删除当前行 正常模式dd, 删除当前行向下的5行 5dd
    (3) 在文件中查找某个单词 [命令行模式 /关键字, 回车查找, 输入n就是查找下一个]
    (4) 设置文件的行号 命令行模式 :set nu, 取消文件的行号 :set nonu
    (5) 编辑 /etc/profile 文件, 使用快捷键到该文档的最末端 正常模式G, 最行首gg
    (6) 在一个文件中输入"hello", 然后又撤销这个动作, 正常模式u
    (7) 编辑 /etc/profile文件, 并将光标移动到20, 正常模式输入20 shift+g
    (8) ...

4.3 开机 重启 用户登录注销

  • 开关机
    shutdown -h now     立刻关机
    shutdown -h 1       1分钟之后关机
    shutdown -r now     现在重新启动计算
    halt                立刻关机
    reboot              现在重新启动计算机
    sync                把内存的数据同步到磁盘
    注意细节: 不管是重启系统还是关闭系统,首先要运行sync命令.
  • 用户登录和注销
    (1) 登录时尽量少用root账号登录, 因为他是系统管理员,最大的权限,避免操作失误
        可以用普通用户登录, 登录之后再用 su-用户名 命令来切换成系统管理员身份
    (2)在提示符下输入logout即可注销用户, 既可以退回到普通用户
    (3)

5 用户管理

5.1 增删改查用户和切换用户

  • useradd jack, 默认在/home/jack下,默认被分配到的组也是Jack

  • useradd -d /home/test jack 指定目录

  • passwd jack 改密码

  • userdel jack 删除用户,保留家目录

  • userdel -r jack 删除用户,不保留家目录

  • id jack 查看这个用户

  • su - 用户名 切换用户 权限高的用户切换到权限低的用户, 不需要密码.

  • who am i 查看登录者的信息

  • pwd 显示当前用户所在的目录

5.2 用户组

  • 类似于角色,系统可以对有共性的多个用户进行统一的管理
  • groupadd 组名
  • groupdel 组名
  • useradd -g 组名 用户名, 新增一个用户直接将其分配到某个组
  • 如果增加一个用户不指定组,默认创建一个组,并且组名与用户名相同
  • 将某个用户切换到另外一个组 usermod -g 组名 用户名

5.3 用户和组相关的文件

(1) /etc/passwd 文件, 用户(user)的配置文件,记录用户的各种信息
用户名:口令密码:用户标识号(uid):组标识号(gid):注释性描述:主目录(用户组的家目录):登录Shell

(2) /etc/shadow 文件, 口令的配置文件
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动的时间:失效时间:标志

(3) /etc/group 文件,  组的配置文件
组名:口令密码: 组标识号: 组内用户列表

6 实用指令

6.1 指定运行级别

0: 关机
1: 单用户(找回丢失密码)
2: 多用户状态没有网络服务
3: 多用户状态有网络服务
4: 系统未使用保留给用户
5: 图形界面
6: 系统重启
常用运行级别是3和5,也可以指定默认运行级别

应用实例: 
命令:init3 或 init5 应用案例: 通过init来切换不同的运行级别,然后关机


指定运行级别:
在centos7以前,/etc/inittab文件中.进行了简化 如下:
multi-user.target:analogous to runlevel 3
graphical.target: analogous to runlevel 5


# 获取当前默认级别:
systemctl get-default
# 设置默认级别: 
systemctl set-default graphical.target

6.2 如何找回root密码

  • centos7.6 找回root密码
启动系统, 进入开机界面,按e 进入编辑界面
找到Linux16开头的这行,在该行最后输入: init=/bin/sh
按ctrl + x进入单用户模式
输入: mount -o remounnt, rw /
输入: passwd
输入新密码: 
touch /.autorelabel
exec/sbin/init

6.3 帮助指令

(1) man 获得帮助信息
基本语法: man [命令或配置文件] (功能描述: 获得帮助信息)
案例: 查看ls命令的帮助信息 man ls
在linux下,隐藏文件是以 . 开头, 选项可以组合使用
比如 ls-al,  ls -al/root
(2) help指令
基本语法: help命令 (功能描述: 获得shell内置命令的帮助信息)

6.4 文件目录类

  • pwd指令
  • ls指令 -a查看所有 -l以列表的方式 h表示人性化
  • cd指令
cd ~  或者 cd  回到自己的家目录
cd.. 回到上级目录
  • mkdir指令
mkdir [选项] 目录名,  来用于创建目录
-p代表创建多级目录

  • rmdir指令
rmdir [选项] 要删除的空目录, 如果目录下有内容则无法删除

rm -rf /home/animal 删除非空目录

  • touch指令
touch 文件名,  来创建空文件

  • cp指令
cp [选项] aaa.txt source /home
-r 递归复制整个文件夹
\cp [选项] aaa.txt source   /home,   强制覆盖
  • rm指令
rm [选项] 文件或目录
-r: 递归删除整个文件
-f: 强制删除不提示
  • mv指令
相同目录,就是重命名:  mv /home/cat.txt /home/pig.txt
不同目录,就是剪切到另外目录: mv /home/pig.txt  /root/pig.txt   剪切的同时也可以进行重命名

移动目录: mv /root/bbb  /home/bbb
  • cat指令
cat [选项] 要查看的文件

-n 显示行号

管道: more:
    回车
    空格
    q 是退出
    Ctrl+F 向下滚一屏
    Ctrl+B 向上滚一屏
    =   输出当前的行号
    :f  输出文件名和当前行号

  • more指令也可以独立使用

  • less指令

功能和more类似但是功能强大

空格
pagedown 向下一页
pageup   向上一页
/字符串   n向下查找,N向上查找
?字符串   n向上,   N向下
q   退出
  • echo指令
输出内容到控制台
echo [选项] [输出内容]

echo $PATH  
echo $HOSTNAME

  • head 和 tail 和 >
head  aaa.txt   (默认显示出文件的前10行)
head  -n 5 aaa.txt (查看前5行)


tailhead相反,显示后10行,  -f 选项实时的追踪该文档的所有更新.

echo "hello"  > /home/bbb.txt 把hello写入到bbb.txt中

> 是覆盖
>> 是在末尾追加

cal是显示当前日历信息
  • ln指令
类似于快捷方式
在/home 目录下创建一个软链接myroot,连接到/root目录
ln -s /root /home/myroot

  • history指令
查看执行过的历史命令
history 
history 10    最近10条
!5    我要执行曾经执行过的 第五条命令

6.5 时间日期指令

date 
date +%Y
date +%m
date +%d
date +%Y-%m-%d %H:%M:%S 

date -s "2030-11-03 20:02:10" 把你写的这个时间设置成当前系统时间

cal 2030   就把2030年的所有的都展示出来了

6.6 搜索查找的指令

(1)find [搜索范围] [选项]

-name 文件名
-user 用户名
-size 文件大小

find /root -name he.txt
find /root -user root
find /root -size +200M    加号代表大于200 减号代表小于200 不写代表等于  单位有K M G

(2) locate指令
可以快速定位文件路径
由于locate指令基于数据库进行查询, 所以第一次运行前,必须使用updatedb指令创建locate数据库.

先执行 updatedb
locate aaa.txt

(3) which指令, 可以查看某个指令在哪个目录下
which ls 

(4) grep 过滤查找
grep [选项] 查找内容  源文件
-n 显示行号
-i 忽略字母大小写


cat a.txt | grep "hello"   只保留有hello的行
grep -n "yes" /home/a.txt

6.7 压缩和解压

(1) 压缩文件
gzip 压缩文件/目录
gunzip 解压文件/目录

(2)
zip -r myhome /home   (-r 递归压缩)

unzip -d /opt/tmp myhome (目录不写 代表当前)

(3) tar指令
-c 压缩
-v 显示详细信息 
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压


tar -zcvf pc.tar.gz  /home/ddd.txt /home/ccc.txt
tar -zxvf /home/pc.tar.gz  -C /root      -C 写入要解压的目录

7 组管理和权限管理

7.1 组管理

  • 在linux中的每个用户 必须属于某个组,不能独立于组外. 在linux中每个文件有 所有者,所在组,其它组的概念
(1)
所有者
所在组
其他组
改变用户所在的组

ls -ahl 查看文件的所有者
修改所有者 chown tom aaa.txt    将aaa这个文件的所有者,改成tom

修改所在组 chgrp  group123  aaa.txt   但是不会更改文件的所有者

(2)其它组
除了文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组.

改变用户所在组
usermod -g 组名 用户名
usermod -d 目录名 用户名 改变该用户登陆的初始目录   (前提:该用户 有该目录的权限,才能设置)

7.2 权限

-rwxrw-r--  1   root   root  1213   Feb   2 09:39  abc

(1) 第一列
0位: 文件类型: l是链接, d是目录, c是字符设备文件 鼠标键盘, b是块设备,-是文件
1到3位: 文件的所有者对该文件的权限  r可读w可写x可执行 r用4表示,w用2表示,x用1表示, 所以rwx可以用7表示
4到6位: 文件的所属组对该文件的权限
7到9位: 其他用户拥有该文件的权限
(2) 第二列
硬链接数或者子目录数