乐趣区

Linux常用指令以及入门介绍

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;
退出移动版