Linux - 稳定、安全、多并发

section1:

**内容介绍

***基础:    - 入门、vm和Linux安装、目录结构;    - Linux Shortcut keys:        -- CTRL+A/E行首行尾;        -- ctrl+U/k:擦除光标到行首/行尾;        -- CTRL+Y:回退擦除的文本;***实际操作:    - 远程登录(xshell xftp)|vi和vim编辑器|开机、重启、用户登录注销|用户管理    - 实用指令|定时任务调度|磁盘分区、挂载|网络配置|进程管理|RPM和YUM***python定制    - python专业开发平台Ubuntu、python开发环境、APT软件管理和远程登录

**学习方向

***Linux运维工程师***Linux嵌入式工程师-驱动开发***Linux下开发项目:Java、python、bigdata、PHP、c/c++

**应用领域

***个人桌面领域***服务器领域***嵌入式领域

**进阶之路

***基本操作命令:文件操作(rm,mkdir,chmod,chown)、vi/vim使用、Linux用户管理***linux各种配置:环境变量、网络配置、服务配置;***搭建相关语言的开发环境(java、python);***shell脚本编写,Linux服务器维护;[必会]***安全设置,防止攻击,保障运行,系统调优;√***深入了解Linux系统[对内核有研究],熟练大型网站应用架构组成,熟悉各环节的部署和维护;√

**学习方法

***高效愉快学习;***先整体框架,再细节;***指令;***"know how,know why"***"做中学"***适当囫囵吞枣***重点实际操作

section2:Linux基础

** Linux介绍

***操作系统,免费,开源,安全,高效,稳定,处理高并发强悍,企业级项目部署到Linux/Unix服务器运行;***创始人:Linus Torvalds - Linux kernel;吉祥物:企鹅 - Tux;***主要发行版:内核基础上包装定制,Centos、Redhat[Redhat公司]|Ubuntu|Suse、openSuse[欧洲]|红旗Linux***主要操作系统:Windows、Android、iOS、macOS、车载系统、Linux等***Linux和Unix:    - Ken Tompson|Dennis Richres 贝尔实验室 > B语言|C语言|Unix > Minix > Linux[GNU计划的一部分]    - Richard Stallman:GNU计划 --- 人机互动 > application > GNU shell > OS[linux kernel] > hardware    - Linux:GNU/Linux < Minix

**VM和Linux(CentOS)的安装

 *** virtual machine,vm12; *** Linux(CentOS、Ubuntu); *** 原理:Windows[local] > VM > CentOS[文件,可移植]    - vm:通过VM创建一个虚拟机空间(CentOS);再空间内安装操作系统;    - vm installation:去BIOS修改设置开启虚拟化设备支持(F2/F10);安装vm;    - centos installation:相关软件和服务选择,例如开发工具、办公套件等;    - booting > kdump:内核崩溃转储机制    - terminal and link network;*** Network conf:    - 桥接:直连物理网络,Linux可以和其他的系统通信,但是可能造成IP冲突;    - NAT:网络地址转换方式;Linux可以访问外网,不会造成IP冲突;但是同一网络内的Windows无法访问到vm;    - 主机模式:Linux是一个独立的主机,不能访问外网;***vmtools:宿主机和vm之间直接复制粘贴命令;设置共享文件夹;

**linux目录结构:

***windows: 平行的C盘、D盘***Linux:/根目录 > boot/;bin/;home/;root/;    - 只有一个根,采用层级式的树状目录结构;    - “在Linux世界中,一切皆文件”;包括硬件管理:例如:/dev管理设备;/media;etc/配置文件;bin/命令;home/家;lib/动态库;*** Linux的目录中有且仅有一个根目录:/*** Linux各个目录存放的内容是提前规划好的,不能乱发文件;*** Linux是以文件的形式管理我们的设备,因此Linux系统,一切皆文件;*** Linux各个文件目录下存放什么内容,必须清楚知晓;

section3:Linux实际操作

**sshd服务:

***远程连接:xshell;mobaxterm;***远程文件传输:sftp; - scp;***前提:sshd服务开启    - sudo apt-get update    - sudo apt-get install openssh-server    - sudo /etc/init.d/ssh start    - sudo service ssh status

**ftp服务:基于Windows平台的SFTP、FTP文件传输工具;

    - xftp:sftp协议;port:22;

**vi/vim编译器

*** vi:所有Linux系统内建的文本编译器;*** vim:程序编辑能力,vi的增强版本;字体颜色、代码补全;*** 模式:一般模式、插入模式、命令行模式*** 快捷键:    - copy/paste:yy/p,5yy;    - delete: dd,5dd;    - find:/hello > n;    - line num: :set nu;    - 文档首行/尾行:一般模式下执行gg/G;    - 撤销:一般模式下输入u;    - 编辑:光标移动到指定行:1,:set nu;2,input 20;3,shift + g;

**开机/重启/同步/用户登录注销

*** shutdown:    - shutdown -h now:立即关机;    - shutdown -h 1:1分钟后关机;    - shutdown -r now:立即重启;*** halt:关机;*** reboot:重启计算机;*** sync:关机或重启之前运行,把内存的数据同步到磁盘;*** 登录尽量少用root账号,权限不足时用“su - username”切换*** logout:注销用户;图形运行级别无效,在“运行级别”3一下有效;

**用户管理

***Linux用户管理规则:    - Linux:多用户多任务的操作系统;任何一个要使用系统资源的用户,都必须向系统管理员申请一个账号,然后以个人账号进入系统;    - 用户、用户组;每个用户至少属于一个组;    - 用户家目录:/home/该目录下有各个创建的用户对应的家目录,用户登录时自动进入到自己的家目录;*** 添加用户:useradd [选项] username;    - 创建用户成功后,自动创建和用户同名的家目录;    - useradd -d 指定[目录] username;    - Ubuntu系统创建用户时必须带-m参数,否则不会创建用户家目录;*** 设置/修改用户密码:    - passwd username:;*** 删除用户:    - userdel username:删除用户,但保留家目录;    - userdel -r username删除用户已经用户主目录;    - 工作中一般保留家目录,可能存在代码或文档;*** 查询用户信息:    - id username;    - uid=0(root) gid=0(root) groups=0(root)     - 用户id 用户组id 组名称*** 切换用户:su - username    - 高权限用户切换到低权限用户,不需要密码;反之需要;    - 返回原用户,exit;*** 查看当前用户/登录用户    - whoami*** 用户组    - 类似于角色,系统可对拥有共性的多个用户进行管理    - groupadd 组名:增加组;    - groupdel 组名:删除组;    - useradd -g 用户组 用户名:增加用户时直接加上组;        -- useradd -m -g wds zwj [ubuntu]    - usermod -g 用户组 用户名:修改用户组;*** 用户和组相关的权限:    - /etc/passwd:用户配置文件,用户信息;    - /etc/group:组配置文件,组信息;    - /etc/shadow:口令配置文库(密码和登录信息,加密)

** 实用指令:

*** 运行级别    - linux系统共7个运行级别:0-关机,1-单用户(找回丢失密码),2-多用户无网络服务;3-多用户网络服务;4-保留级别;5-图形界面;6-重启;    - 常用运行级别:3和5;    - 系统的运行级别配置文件:/etc/inittab [Ubuntu无该文件]    - 切换到指定运行级别的指令: init [0/1/2/3/4/5/6]*** 如何找回root密码?    - 进入到单用户模式,然后修改root密码;因为进入单用户模式,root不需要密码就可以登录。    - sudo passwd root > sudo 输入当前用户密码*** 帮助指令:man/--help    - man: [命令或配置文件];    - help:help cd;*** 文件目录类:    - cd:change directory > cd ~    - pwd:当前工作目录的绝对路径    - ls/ll:ls -a/-l    - mkdir/rmdir[空目录]/rm - r:-p递归创建/-rf:非空目录强制删除    - touch/cp:创建空文件/拷贝(-r 递归cp) > \cp -r:强制覆盖    - mv/rm:移动或重命名文件/删除 > -r[递归]\-f[强制]    - 绝对路径/相对路径:从/home根目录开始定位/从工作目录定位需要去的目录    - cat/more/less:        -- cat:查看文件[不能修改],-n:显示行号;> 配合 | more:分页显示;> cat -n test.txt | more        -- more:文本过滤器,全屏分页显示文本内容;> space/enter/q/ctrl+F/ctrl+B/=/           -- less:分屏查看文件内容,比more强大;根据显示需要加载内容,对大文件比较友好;-N/pgup/pgdn;    - > / >>:输出重定向[覆盖]/输出追加重定向    - echo/head/tail:        --echo:echo $PATH;echo "hello";        --head:head -n 5 test/log.txt;默认显示10行;        --tail: -n 指定尾部5行内容;-f:实时追踪文档的更新;    - ln:软链接,类似于Windows快捷方式;> ln -s [源文件或目录] [软链接名]    - history:查看/执行历史指令        -- history 10;!178:执行历史编号为178的历史指令;*** 时间日期类    - date:        -- 查看日期:date "+%Y/%m/%d/%Y-%m-%d %H:%M:%S"        -- 设置日期:date -s 字符串时间 > "2018-7-28 16:36:45"    - cal:        --cal 2020*** 搜索查找类    - find: find [搜索范围] [选项] > -name/-user/-size:-size +20M(-20k/=20k)    - locate:速度快,使用事先建立的系统中所有文件和路径的locate数据库实现快速定位文件,无须遍历整个文件系统;为了保证准确率,必须定期更新locate时刻;        -- 第一次执行前,必须使用updatedb指令创建locate数据库;        -- locate 路径 文件    - grep和|:        -- |:将前面指令的结果输出传递给后面的指令;        -- grep [-n行号/-i忽略大小写] 查找内容  源文件;> cat /home/lindToScott/test/log.txt | grep -n "2019";*** 压缩和解压类:    -gzip/gunzip:        -- gizp:压缩文件,源文件消失;test.txt => test.txt.gz        -- gunzip:解压缩    --zip/unzip:        -- zip [选项-r] xxx.zip 路径或文件        -- unzip:-d     - tar:打包指令        -- tar -zcvf xxx.tar.gz 文件或目录        -- tar -zxvf tar包 -C 目标目录*** 组管理和权限管理    - Linux中每个用户必须属于一个组;每个文件有所有者、所在组、其他组的概念;    - 文件:所有者[一般是文件的创建者]、所在组、其他组    - groupadd police > useradd -g police -m tom > passwd tom    - 修改文件所有者:su - root > chown user_name file_name    - 修改文件所在组:chgrp group_name file_name    - 其他组:除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组;        -- usermod -g group_name user_name        -- usermod -d 目录名 用户名 改变该该用户登录的初始目录    - chmod:        -- l rwx rwx rwx  1 root  root     16 7月  28 15:27 lindToScott -> /home/scott/code/            >> l:文件类型:-[普通文件]/d[文件夹]/l[软链接]/c[字符设备]/b[块文件,硬盘]            >> u:文件所有者权限;g:文件所在组的用户权限;o:文件其他组用户的权限;a:所有用户            >> 1如果是文件,表示硬链接数,如果是目录,表示该目录的子目录数;            >> 文件大小            >> 文件最后修改时间        -- 目录文件大小全部是4096            > chmod u+[-]r/w/e            > chmod u=rwx,g=rx,o=r abc            > 4 2 1    - 修改文件所有者        -- chown newowner file_name        -- chown newowner:newgroup file_name        -- chown -R user_name directory_name:目录,递归更高子文件或子目录    - 修改文件所在组:chgrp        -- chgrp [-R] newgroup file_name*** crond任务调度    - crontab:进行定时任务的设置;系统在某个时间执行特定的命令或者程序:    - 任务调度分类:        -- 系统工作:某些重要的工作周而复始的执行,如病毒扫描;        -- 个别用户工作:如MySQL数据库备份;    - crontab:        -- -e:编辑crontab定时任务 >> CTRL+O:写入;> enter > CTRL+x退出        -- -i:查询crontab任务        -- -r:删除当前用户所有的crontab任务 r=remove        -- -l:列出当前有哪些任务调度        -- service crond restart:重启任务调度    - 参数说明        -- * * * * *:分、时、天、月、周;        -- *:一小时中每分钟执行一次;        -- ,: 0 8,12,16 * * * > 每天的8点0分、12点0分、16点0分执行一次;        -- -:0 5 * * 1-6 > 周一到周六五点0分执行一次;        -- */n:每隔n分钟/时/天/月/周执行一次;

** 磁盘分区和挂载

*** 分区    - 分区方式:        -- 1.mbr分区:            --- 最多支持四个主分区;            --- 系统只能安装在主分区;            --- 扩展分区要占一个主分区;            --- MBR最大支持2TB,但拥有最好的兼容性;        -- 2.gtp分区            --- 支持无限多个主分区(但操作系统限制,Windows下最多128个分区);            --- 最大支持18EB的大容量(EB=1024PB,PB=1024TB);            --- windows7 64位以后支持gtp;    - linux分区        -- 无论几个分区,只有一个根目录,一个独立且唯一的文件结构;Linux每个分区都是用来组成整个文件系统的一部分;        -- Linux ”载入“的处理方法,整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来;            - mount/unmount        -- 磁盘[硬盘] > 分区 --- mount/unmount > Linux文件系统        -- linux对硬盘的分区如何标识?            --- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本都是SCSI硬盘;            --- IDE:驱动器标识符为"hdx~"; "并口"; > hda3 = 第一个(a)IDE硬盘的第三个分区;            --- SCSI:"sdx~"; "串口";*** lsblk -f:查看系统的分区和挂载的情况*** 如何给vm增加一块硬盘?并挂载到Linux的文件结构中?    - 虚拟机添加硬盘; vm >> settings    - 分区;   >> fdisk /dev/sdb >> 按照提示操作    - 格式化; >> mkfs -t ext4 /dev/sdb1    - 挂载; >> mkdir /home/newdisk >> /home/newdis [mount 设备名 挂载点]    - 设置可以自动挂载;>> vim /etc/fstab >> add dev/sdb1相关信息 >> mount -a >> [不执行该步骤,重启后,挂载关系消失]    - 解除挂载关系: umount /dev/sdb1 / umount /home/newdisk*** 磁盘情况查询    - 查询系统整体磁盘使用情况:df -h    - 查询指定目录的磁盘占用情况:du -h /目录 >> du -ach --max-depth=1 目录    - 磁盘情况-实用指令:        -- 统计文件夹下文件的个数:ls -l 目录 | grep "^-" | wc[统计] -l         -- 统计目录的个数:ls -l | grep "^d" | wc -l        -- 统计文件夹下文件的个数,包含子文件夹:ls -lR | grep "^-" | wc -l  -R:递归        -- 统计目录的个数,包含子目录:ls -lR | grep "^d" | wc -l        -- 树状显示目录结构:tree  >> CentOS需要安装:yum install tree

** 网络配置

*** NAT模式网络环境:    - *** 桥接模式:为什么Linux ping不通Windows的ip?    - 查看使用的网卡VMnet8/VMnet1;*** 查看网络IP和网关    - vm查看虚拟网络编辑器    - 修改IP地址(修改虚拟网络的ip)    - 查看网关*** linux网络环境配置    - 通过系统的网络连接设置网络ip,linux启动后自动获取IP,但是每次自动获取的IP可能不一样,不适用于服务器.    - 指定固定ip:直接修改配置文件来指定IP,并可以连接到外网.        -- CentOS: vim /etc/sysconfig/network-scripts/ifcfg-eth0;        -- Ubuntu:/etc/network/interfaces;        -- 将IP地址配置为静态的;

**进程管理

*** 进程介绍:    - linux中每个执行的程序都成为一个进程;每个进程都分配一个id号;    - 每个进程都对应一个父进程,而这个父进程可以复制多个子进程;    - 每个进程都可能以2种方式存在,前台和后台 - 用户屏幕是否可操作;    - 一般系统的服务都以后台进程的方式存在,一般常驻系统中;*** ps: PID、TTY、TIME、CMD    - ps -a:显示当前终端的所有进程信息;    - ps -u: 以用户的格式显示进程信息;    - ps -x: 显示后台进程运行的参数;    - ps -ef|more: 查看父进程;*** kill(pid)/killall(pname)    - -9:强制*** pstree: -p | -u > 查看进程树*** 服务(service)管理    - service本质就是进程,运行在后台,通常监听某端口,等待其他程序的请求,如mysql;    - 通常称为守护进程,如防火墙:iptables    - service 服务名 start|stop|restart|reload|status ||| systemctl > chkconfig    - telnet:检查Linux的某个端口是否在监听,并且可以访问; > telnet ip port    - setup > 系统服务;|||  /etc/init.d/;    - 服务运行级别[runlevel]:开机>BIOS>/boot>init进程1>运行级别>运行级对应的服务;    - chkconfig:可以给每个服务的各个运行级别设置自启动/关闭;        -- chkconfig --list|grep xxx;        -- chkconfig 服务名 --list;        -- chkconfig --level 5 服务名 on/off***动态监控进程:top*** 监控网络状态:netstat -an:按顺序排列输出;-p:显示哪个进程调用;

section4:RPM和YUM

**rpm:redhat package manager,软件包管理工具; - suse|centos|redhat使用;

*** centos:RPM包;ubuntu:deb包;*** rpm -qa|grep firefox;*** rpm -qi firefox;*** rpm -ql firefox;*** rpm -qf /etc/passwd;*** rpm -e rpm_name:删除;*** rpm -ivh rpm_name:安装;

**yum:

*** shell前端软件包管理器,基于rpm包管理,能够从指定服务器自动下载日拍卖包并安装,可以自动处理依赖关系;*** 前提:联网;*** yum list|grep xxx:软件列表;*** yum install xxx:安装;*** yum -e xxx:卸载;

**apt:Advanced Packaging Tool

***软件管理:软件包的安装、删除、清理等;*** /etc/apt/sources.list:指定官方的软件仓库地址;*** echo '' > sources.list:清空文件*** example:    - sudo apt-get remove vim    - sudo apt-get install vim    - sudo apt-cache show vim    - sudo apt-get update*** ubuntu默认没有安装sshd服务:    - sudo apt-get install openssh-server;    - service sshd restart;