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行)
tail 与head相反,显示后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) 第二列
硬链接数或者子目录数