Linux应用开发-后端

Posted by Beyonderwei on 2020-03-03
Words 5.5k and Reading Time 20 Minutes
Viewed Times

Linux(林纳斯)

一、简介

1. 主要的应用领域

  • 服务器

    Linux生来就是被设计作为服务器的,众多服务程序均部署在Linux上。

  • 嵌入式系统

    Linux完全开源,可对内核进行裁剪,最小可打到几百kb,常应用于嵌入式系统,如机顶盒、白家电等。安卓的内核也是Linux。

2. 学习阶段

  • ① 基本的操作命令:文件命令、编辑工具、linux用户管理
  • ② 各种配置:环境变量、网络配置、服务配置
  • ③ 搭建开发环境:如Java、python等的运行环境
  • ④ shell脚本: 能对Linux进行维护,编写脚本文件。
  • ⑤ 安全设置: 防止攻击、系统调优。
  • ⑥ Linux内核: 熟练掌握大型网站应用架构的组成,熟练各个环节的部署和维护方法。

二、 Linux基础

1. 介绍

① 特点

  • 免费、开源
  • 安全、高效、稳定(基本半年不用重启)
  • 处理高并发强悍(高并发场景)
  • 企业级项目的部署

② 吉祥物

吉祥物:Tux(企鹅)

③ 发行版本

Linux只是一个内核,在内核的基础上添加应用软件得到发行版本。国内常用Ubuntu 和 CentOS (CentOS属于redhat的免费版)

④ Unix

Linux由Unix演化而来。

Ken tompson

  • 用B语言开发了Unix

Dennis richres

  • 与Ken tompson 设计C语言,重写Unix

Linus

  • 顺应GUN计划,在Unix基础上开发出Linux

三、目录结构

在linux中,一切皆文件

Linux会把所有的东西映射成一个文件来处理,如外接硬盘、cpu、应用程序、内存等。

四、vi vim常用命令

参考:菜鸟教程vi vim

  • yy 复制当前行
  • p 粘贴
  • (n)yy 复制n行
  • G 回到文件末尾
  • gg 回到文件开头
  • :set nu 设置行号
  • :set noun 取消行号
  • n shift+g 去第n行

五、开关机、重启与注销

  • sync 同步内存数据到磁盘(关机前执行
  • shutdwn
    • shutdown -h now 立即关机
    • shutdown -h 1 一分钟后关机
    • shutdown -r now 立即重启
  • halt 关机
  • reboot 重启系统

  • logout 关闭当前用户的连接

六、用户管理

linux是一个多用户多任务的操作系统,想使用系统资源的用户需向管理员root申请一个账号,用来登录系统

1. 基本概念

  • 用户:linux系统的用户,可以有多个,root为管理员用户
  • 用户组:每个用户可以被分配到一个或多个用户组(创建时指定或后期更换)
  • 家目录:/home 每创建一个用户都会在home目录下分配一个子目录作为该用户的家目录,登陆后会进入该目录。

2. 常用命令

  • pwd 查看当前所在的目录

  • useradd [选项] 用户名 添加一个用户

    未指定用户组时会自动创建一个与用户同名的组,并将该用户添加到该用户组中。

    user add -g 用户组名 用户名 添加到

  • passwd 用户名 为用户指定密码

  • userdel 用户名 删除用户(root用户来操作,用户家目录会保留)

  • userde -rl 用户名 删除用户(家目录也会被删掉,不推荐

  • id 用户名 查询用户信息(id和所在组)

    uid->用户id gid->用户组id groups->用户组

  • su - 用户名 切换用户

  • exit 切换到上一个用户

3. 用户组

​ 用户组用于对相同类别的用户进行统一管理,这些用户具有一些共性(如可以访问的文件的权限相同)。

① 用户组命令

  • groupadd 用户组名 添加用户组
  • groupdel 用户组名 删除组
  • usermod -g 用户组 用户名 将用户修改到别的用户组
  • groups 查看当前登录用户组内的所有成员
  • cat /etc/group 查看系统的用户组
  • group 组名 查看该组内的所有成员

② 相关文件

  • /etc/passwd

    保存用户信息的配置文件

    详细内容:用户名:用户口令(加密):用户id:组id::家目录:shell解释器

  • /etc/group

    保存用户组信息的配置文件

    详细内容:组名:组口令(加密):组id

  • /etc/shadow

    口令的配置文件,包含用户的密码和登录信息。

    详细内容:用户名和密码等加密内容。

七. 运行级别

​ 系统运行级别德指定,包含七个运行级别,配置文件在/etc/inittab的id:5:initdefault这一行的数字,常用的运行级别是3和5。

运行级别的指定命令init [0123456]

  • 0:关机
  • 1:单用户【找回丢失密码】
  • 2:多用户状态没有网络服务
  • 3:多用户状态有网络服务(命令行界面)
  • 4:系统未使用,保留给用户
  • 5:图形界面
  • 6: 系统重启

八、root密码找回 (实体机)

进入到单用户模式,这时会以root身份登录系统,这时就可以更改root密码。

  • 开机引导时按:回车键 进入到引导开机前的界面
  • 输入e在booting之前编辑命令
  • 选择kernel 再按e
  • 输入空格1, 回车,告诉内核进入到单用户模式
  • 再输入b,启动boot
  • passwd root 更改用户密码

九、 实用命令

0. 必知指令

  • ln 软连接(link)
    • ln -s 源文件路径/名 软连接名 创建一个软连接,指向某个源文件或路径(之后便可直接对该软连接操作,如cd more等)
    • rm -rf 软连接名 直接删除该软连接(是一个目录时)
  • history 查看历史执行过的指令
    • history n 显示最近执行过的n个指令
    • !n 执行history中的第n条指令

1. 帮助指令

  • man [命令或配置文件] 获取功能描述或帮助信息
  • help 命令 获得shell内置命令的帮助信息

2. 文件目录类

  • pwd 显示当前工作目录的绝对路径

  • ls 【选项】 【目录或者文件】 显示当前目录的信息

    • -a 所有文件
    • -l 以列表的方式显示信息
  • cd 【参数】 切换到指定目录

    • cd ~ 切换到自己的家目录
  • mkdir 创建一个目录

    make -p /xxx/yyy 创建多级目录

  • rm [选项] 目录 删除指定文件或目录

    • -r 递归删除整个文件夹
    • -f 强制删除不提示(不提示是否删除?)

    rm -rf 目录 删除非空的目录

  • touch 文件名 创建一个空文件(可以多个 空格分开)

  • cp 【-r】source dest 将某个文件(文件夹下的所有内容)拷贝到dest路径

    -r:表示遍历

    \cp :表示复制时强制覆盖同名文件。

  • mv 旧文件名 新文件名 重命名文件

  • mv 源文件名(或目录) 新目录 将文件移动到新的目录(剪切)

  • cat 文件名 以只读的方式查看文件内容

    • -n 查看内容的同时显示行号
    • cat 文件名 | more 分页查看文件内容
  • more 文件名 以全屏方式显示文件内容(适合查看小文件

    • 空格:向下翻页
    • 回车:向下翻一行
    • Ctrl+F:向下滚动一屏
    • Ctrl+B:向上滚动一屏
    • =:显示行号
    • :f :输出文件名和当前行号
    • q:立即离开
  • less 文件名 部分加载的方式,分屏查看文件(适合查看大文件

    • 空格:向下翻页
    • pagedown:向下翻页
    • pageup:向上翻页
    • /字符串:向下查找字符串
    • ?字符串:向上搜索字符串
    • q:退出
  • echo: 输出内容到控制台

    • echo $PATH 输出当前的环境变量
  • head 用于显示文件的前n行(默认10行)

    • head -n 20 文件名 显示该文件的前20行
  • tail 用于查看文件的后10行

    • tail -n 20 文件名 查看文件的后20行内容
    • tail -f 文件名 实时监控文件的内容变化(重要:常用日志查看
  • >: 输出重定向

    • ls -l > 文件名 列表内容写到文件中(覆盖写)
    • cat 文件1 > 文件2 将文件1(可带路径)的内容写到文件2(可带路径)
    • echo “内容” > 文件名 将内容写到文件中
  • >> : 追加

    • ls -l >> 文件名 列表的内容追加到文件的末尾
    • echo “内容” >> 文件名 将内容追加到文件中

3. 时间日期类

  • date 显示当前的时间日期(有格式的时候,加号必须有

    • date “+%Y-%m-%d” 显示年月日 用 - 连接 结果:2020-11-07
    • date “+%Y年%m月%d日 %H:%M:%S” 结果:2020年11月07日 12:20:23
  • date -s “2020-11-07 12:20:20” 设置系统时间

  • cal 以日历的方式显示当前时间
    • cal 2020 显示2020年的日历

4. 搜索查找类

① find
  • find 某目录 -name 文件名 按名称查询某个目录下是否有该文件
    • find / -name *.txt 查询根目录下所有的txt文件
  • find 某目录 -size +20M 查询某个目录下大于20M的文件(查找包、日志等大文件使用很方便
    • -20k 查询小于多少k的文件
② locate

​ 运行前要执行updatedb创建locate数据库

  • locate 文件名 查询该文件所在目录
⑤ grep
  • “|” 管道符号,表示将前一个命令的处理结果交给后面的命令处理。
  • grep 【选项】 查找内容或源文件
    • -n 显示匹配行和行号
    • -i 忽略字母的大小写
    • eg:cat test.txt | grep -ni aaa 不区分大小写查询test.txt中的aaa,并显示行号
    • eg:ls -l /home |grep “^-“ | wc -l 统计/home目录下的文件的个数

5. 压缩与解压

① zip/unzip
  • zip -r 压缩文件名 压缩目录 对目录内的文件递归压缩
    • zip -r package.zip /root/ 将root目录下的所有文件打包为package.zip
  • unzip -d /home/ package.zip 将文件解压到指定文件夹
② tar
  • tar 【选项】 xxx.tar.gz 打包内容
    • -c 产生.tar打包文件
    • -v 显示详细信息
    • -f 指定压缩后文件名
    • -z 打包的同时压缩文件
    • -x 解包.tar文件
  • tar -cxvf xxx.tar.gz 要打包的文件(一个或多个) 将文件打包为xxx.tar.gz
  • tar -zxvf xxx.tar.gz -C 目标目录 将xxx.tar.gz 解压到指定目录(目录事先存在)

6. 组管理

​ linux中每个文件都有 所有者、所在组、其他组的概念。

① 所有者
  • ls -ahl 查看文件的所有者和所在组
    • a 隐藏的文件
    • l 列表详细显示(第三列:文件所有者;第四列:文件所在组)
    • h 文件大小便于查看方式(G、K、M)
  • chown 用户名 文件或文件夹 改变文件的所有者(所在组不会变)
  • chown 【选项】 新的所有者:新的所在组 文件名 同时改变文件的所有者和所在组
    • -R 递归更改某个目录下的所有文件的权限(该目录的子目录也会被更改)
② 所在组
  • chgrp 组名 文件名 将文件所在组改为其他组
  • usermod -g 组名 用户名 改变用户所在组
③ 其他组

​ 除所在组的组为该文件的其他组。

7. 权限管理

① 文件详情解析

-rw-rw--r--. 1 sivey root 20 11月 18 19:24 hello.txt

  • 文件类型

    • - :普通文件
    • d :目录
    • l :软连接
    • c : 字符设备【鼠标键盘】
    • b :块文件【硬盘、U盘】
  • 文件权限

    • 前三位 用户对该文件的权限
    • 中间三位 所属组对该文件的权限
    • 后三位 其他组对该文件的权限
  • 文件数 / 硬连接数

    • 文件:1表示硬链接数
    • 目录:1表示目录内文件个数
  • sivey:文件所有者

  • root:文件所在用户组

  • 文件大小:20k

  • 最后修改时间:11月 18 19:24

② rwx文件权限

r = 4, w = 2, x = 1,rwx=4+2+1=7

  • 作用到文件
    • r:可读
    • w:可写(但不代表可以删除,只有对该问价所在目录有写权限才能删除)
    • x:执行
  • 作用到目录
    • r:可读,ls查看目录内容
    • w:可写,可修改目录,可创建、删除、重命名目录
    • x:可执行,即可以进入目录
③ 修改权限
  • 通过 + - = 变更权限
    • chmod u=rwx,g=rx,o=x 文件或目录名 给文件或目录的所有者,所在组,其他组对应权限
    • chmod o+w 文件或目录名 给文件或目录的其他组增加对应权限
    • chmod a-x 文件或目录名 给文件的所有者、所在组、其他组去掉执行的权限
  • 通过数字变更权限
    • chmod 751 文件或目录名 给文件或目录的所有者,所在组,其他组对应权限

十、 任务调度(crond)

​ 定时的执行一些脚本文件,如数据库的数据备份。

  • crontab 【选项】

    • -e 编辑crontab定时任务(简单任务不用写脚本,直接编辑复杂任务要写脚本文件)
    • -l 查询crontab任务
    • -r 删除当前用户所有的crontab任务
  • service crond restart 重启任务调度

  • 举例:执行完crontab -e后输入下面的内容。

    1
    */1 * * * * ls -l /home >> /tmp/to.xtx
  • 时间参数说明

    | 位 | 含义 | 取值范围 |
    | ———- | ————————— | ——————————- |
    | 第1个 | 一小时中的第几分钟 | 0-59 |
    | 第2个
    | 一天当中的第几小时 | 0-23 |
    | 第3个 | 一个月当中的第几天 | 1-31 |
    | 第4个
    | 一年当中的第几月 | 1-12 |
    | 第5个 * | 一周当中的星期几 | 0-7(0和7都是星期日) |

  • 特殊符号

    • * :代表任何时间,比如第一个*就代表一个小时中每分钟都执行一次的意思
    • , :代表不连续的时间,比如”0 8,12,16 *命令”,就代表再每天的8点0分,12点0分,16点0分都执行一次。
    • - :代表连续的时间范围,比如“/10 * 命令”,代表在周一到周六的凌晨5点0分执行命令。
    • /n :代表多久执行一次,比如“\/10 命令”,代表每隔十分钟就执行一遍命令。
  • 特定时间执行的案例

    • 45 22 * 命令 在22点45分执行
  • 0 17 1 命令 每周1的17点0分执行
    • 0 5 1,15 命令 每月1号和15号的凌晨5点0分执行
    • 40 4 1-5 命令 每周一到周五的凌晨4点40分执行命令
    • /10 4 命令 每天的凌晨4点,每隔10分钟执行一次命令
    • 0 0 1,15 * 1 命令 每月的1号和15号,每周1的0点0分都会执行命令。注:星期几和几号最好不要同时出现,因为他们定义的都是天,容易混乱。

1. 任务调度过程

  • 编写xxx.sh脚本文件,路径 /home/xw 文件内容如下

    1
    2
    ls -l /home >> /tmp/to.txt
    date >> /tmp/to.txt
  • 给脚本文件可执行的权限

  • crontab -e

  • /1 * /home/xxx.sh

十一、 磁盘分区与挂载

1. 常用命令

  • lsblk -f 查看系统的分区和挂载情况。带有分区类型
  • lsblk 查看系统的分区和挂载情况。带有分区大小信息

2. Linux的磁盘分区

① 介绍

​ 磁盘分区包括主分区和扩展分区,系统必须装到主分区中,扩展分区还可以分成多个逻辑分区。

​ 对Linux来说无论有几个分区,分给哪一个目录使用,它只有一个根目录,有独立且唯一的目录结构,每个分区都用来组成整个文件系统的一部分。

​ IDE硬盘,驱动器标识为hdx~,hd表示分区所在设备的类型,x:为盘号,

  • 挂载:将一个分区和一个目录联系起来,即将某分区挂载到某个目录,这时要载入的一个分区将使用他的存储空概念在一个目录下获得。
  • 卸载:将一个分区和一个目录取消联系。
② 实例分析

lsblk 命令得到

  • 分区情况:—vda1
  • 分区类型:ext4
  • uuid:4b499d76-769a-40a0-93dc-4a31a59add28
  • 挂载点:/

3. 磁盘情况查询

  • df -lh 查询系统磁盘整体的使用情况
  • du -h /目录 查询指定目录的磁盘占用情况
    • -s 指定目录占用大小汇总
    • -h 带计量单位
    • -a 含文件
    • —max-depth=1 子目录深度
    • -c 列出明细的同时,增加汇总值
  • yum install tree 安装tree指令

十二、网络配置

  • ifconfig 查看网络情况
    • eth0 表示第一块网卡
    • eth1 表示第二块网卡
  • ping ip或域名 查看网络的联通情况
  • /etc/sysconfig/network-scripts/ifcfg-eth0 网卡的配置目录
    • BOOTPROTO=static 以静态的方式获取IP(每次不变)默认none
    • IPADDR 系统的IP地址
    • ONBOOT=yes
  • service network restart 重启网络服务

十三、进程管理

1. 基础知识

  • linux中每一个执行的程序都为一个进程,每一个进程都被分配一个ID(PID)来管理
  • 每一个进程都会对应一个父进程,父进程可以复制多个子进程。linux的总父进程为init.
  • 进程以两种方式存在,前台和后台。
  • 一般系统服务都是以后台进程方式存在,一般都会常驻在系统中,直到关机才结束。

2. 进程查询

①. ps -aux 查看程序
  • -a 显示当前终端的所有进程

  • -u 以用户格式显示进程信息

  • -x 显示后台进程运行的参数

注: bash或/bin/bash表示终端的进程

参数列表:

  • USER 用户名
  • PID 进程ID
  • %CPU CPU占用率
  • %MEM 内存占用率
  • VSZ 虚拟内存占用情况
  • RSS 物理内存占用情况
  • TTY 使用的终端
  • STAT 进程的状态
    • s 休眠
    • r 运行
    • D 短期等待
    • Z 僵死进程
    • T 被跟踪或被停止
  • START 启动时间
  • TIME 占用CPU的总共时间
  • COMMAND 进程执行时的命令行
②. ps -ef 查看进程的同时查看父进程
  • PPID 父进程ID

eg:ps -ef | grep sshd 查看sshd(远程连接服务)进程的父进程

③. pstree 以树状的形式查询进程
  • -p 显示PID
  • -u 显示进程 所属用户

3. 终止进程

  • kill [选项] 进程号
    • kill -9 进程号 强制停止某个进程(如终端进程会忽略kill,需要使用 -9 )
  • killall 进程名称 通过一个进程的名称,将一个父进程及其所有子进程全部终止

4. 服务管理

① 简介

​ 服务本质上就是一个进程,但是是运行在后台的,通常会监听一个端口,通过这个端口等待其他请求的连接。如sshd 防火墙 mysql等,又称守护进程。

② 管理指令
  • centos7.0以前: service 服务名 start stop restart reload status
  • centos7.0以后: systemctl 指令代替 service

eg:service iptables status 查看防火墙(iptables)的状态

③ 查看端口状态
  • telnet ip 端口号 在windos上查看某个ip的端口号是否在监听状态
④ 查看系统的服务
  • setup -> 系统服务 可以看到有哪些系统服务
    • 带有星号的表示自启动的。
  • ls -l /etc/init.d/ 查看有哪些服务
⑤ 开机流程

​ 开机 - BIOS - /boot - init进程1 - 运行级别 - 运行级别对应的服务

每一个进程,针对每一个运行级别都设置了是否自启动。

⑥. 服务自启动(设置级别)
  • chkconfig —list 查看每个服务的各个运行级别设置是否自启动/关闭

  • chkconfig 服务名 —list 查看某个服务的各个运行级别设置是否自启动/关闭

  • chkconfig —level 5 服务名 on/off 为某个服务设置在某个运行级别下是否自启动

5. 监控服务

①. 动态进程监控
  • top [选项] 显示正在执行的进程

    • -d 指定top每隔几秒更新(默认3秒)
    • -i 不显示任何限制或僵死的进程
    • -p 查看指定PID的进程的状态

    交互操作说明:

    • P 以cpu使用率排序(默认)
    • M 以内存使用率排序
    • N 以PID排序
    • u 输入u以后输入用户名回车,查看指定用户的进程
    • k 输入k以后输入进程号,会杀死相应的进程
    • Q 退出
②. 网络状态监控
  • netstat -anp 查看所有的网络服务

    • -an 按一定顺序排列输出
    • -p 显示哪个进程在调用

    eg:

    • netstat -anp |grep sshd 查看sshd服务的网络在那个太
    • netstat -anp |grep 6379 查看6379端口的网络状态

十四、 RPM和YUM

1. RPM

​ 全称:Redhat Package Manager 类似windos的.exe安装包,RPM被redhat、centos等发行版本所使用。

①. 命令
  • rpm -qa 查询已安装的rpm软件

    eg:rpm -qa | grep xxx 查询系统是否安装了xxx

  • rpm -qa 查询已经安装的所有安装包

  • rpm -qi 软件包名 查看安装的rpm软件的详细信息(版本、安装时间等)

  • rpm -ql 软件包名 查看安装的软件安装了哪些文件(安装位置

  • rpm -qf 目录 查看某个目录是属于哪个RPM包的

    eg: rpm -qf /etc/passwd

  • rpm -e 软件包名 删除某个软件包(当该包被其他包依赖时会提示是否强制删除)

  • rpm -ivh 路径/软件包名 安装某个rpm软件包(要先有安装包,才能安装)

    • -i install 安装
    • -v verbose 提示
    • -h hash 进度条

2.YUM(主流)

①. 简介

​ shell前端软件包管理工具,基于RPM包,可以从指定的服务器自动下载rpm包并进行安装,也可以自动处理依赖关系,并且一次性安装所有依赖的软件包。

②. 基本命令
  • yum list | grep 软件包名称 查询远程服务器是否有该安装包
  • yum install 软件包名称 安装某个软件(默认安装最新的,安装后自动删除安装包

本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00