Linux 学习笔记

141 阅读11分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

本文是作者在学习 Linux 时做的笔记,一些重要和基本的命令均有涉及,可供今后查阅使用

一、Linux入门

1. Linux、Ubuntu 和 CentOS 之间的关系?

Linux 是其各发行版的内核,即 Ubuntu 和 CentOS 是以 Linux 为内核的加强版操作系统。

2. Linux 和 Unix 的关系?

Linux 是在 Unix 的基础上发展而来。

3.VMware 和 CentOS7 的安装

4.网络连接的三种方式?

  1. 桥接模式(直接连接物理网络):虚拟系统获得一个与宿主机同一网段的 IP 地址。
  • 优点:该虚拟系统可以与和宿主机在同一网段内的所有主机直接通信。
  • 缺点:多个虚拟系统采用该方式容易造成 IP 冲突。
  1. NAT ( Network Address Translation )(用于共享主机的 IP 地址) :虚拟系统获得一个与宿主机不在同一网段的 IP 地址。
  • 优点:与宿主机同网段主机间接通信,解决了 IP 冲突。
  • 缺点:外部主机不能直接向虚拟系统发起通信。
  1. 主机模式(与主机共享的专用网络):独立的系统。

5.虚拟机的克隆?

优势:快速构建集群。

方法:1. 直接复制一份(一个虚拟机在宿主机上的存在形式就是一个文件夹)。 2. 利用 VMware 的克隆功能

6.虚拟机的快照?

提供了整个虚拟机的版本控制功能。

7.VMware Tools

作用:与宿主机共享文件夹

如果共享文件夹突然看不到了,禁用再重启试试!

二、Linux 基础

1. 目录结构

※2. 远程登录、远程文件传输

image.png ifconfig 查看虚拟机 IP,用于远程登录虚拟机或与虚拟机互发文件

  1. Xshell 用于远程登录,只能对远程服务器进行命令行操作。
  2. Xftp 用于远程文件传输。

3. Vi / Vim

  1. 三种模式的切换
  2. 常用快捷键

4. 关闭 / 重启虚拟机(shutdown、poweroff、halt 和 reboot 命令)

常用 shutdown -h now 关机,reboot 重启。

※5. 用户管理指令 (Linux 是多用户多任务操作系统)

  1. 用户
  • useradd
  • passwd
  • userdel (默认保留家目录,-r 表示同时删除家目录)
  • logout 注销用户
  • /etc/passwd 中查看所有用户
  • su - 切换用户,由高权限用户切换到低权限用户不需要输入密码,反之需要。可以通过 exit / logout 这两个命令退回到刚才的用户。
  • id 用户信息
  • who am i 登录用户信息
  • whoami 操作用户信息
  1. 用户组
  • groupadd
  • cat /etc/group 查看所有用户组
  • groupdel
  • useradd -g 组名 用户名 在某组添加用户
  • usermod -g 组名 用户名 修改用户所属组

6. 运行级别

可以利用 init 指令切换运行级别。

  • 0 - 关机
  • 3 - 多用户状态有网络服务
  • 5 - 图形界面
  • 6 - 系统重启

在图形界面使用 init 3 指令可以切换到命令行级别,再使用 init 5 可切回图形界面运行级别。

在 CentOS7 之后,可以使用命令查看和切换运行级别:

  1. systemctl get-default 查看当前运行级别
  2. systemctl set-default TARGET.target 切换到指定运行级别

7. 修改 root 用户密码

8. 帮助命令

  1. man
  2. help

※9. 文件目录指令 (-r 表示 recursion 即递归操作,-f 表示 force)

  • pwd 绝对路径
  • ls
  • cd
  • mkdir
  • rmdir 删除空目录,同 rm -r
  • rm
  • touch 创建空文件
  • cp 复制
  • mv 重命名 / 移动文件
  • cat
  • more 分屏显示内容,比 cat 更人性化
  • less 动态加载,分屏显示,适合读大文件
  • echo
  • head 查看文件开头内容
  • tail 查看文件结尾内容
  • > 覆盖
  • >> 追加
  • ln 软链接(快捷方式)
  • history
  • ! 执行指定编号的历史指令

10. 时间日期指令

  • date
  • cal

※11. 查找指令

  • find (-name -user -size)
  • locate 基于数据库查询,在第一次使用前需要使用 updatedb 创建数据库
  • which 返回指令所在位置
  • grep 过滤查找内容

12. 压缩 / 解压指令

  • gzip / gunzip 只适用于普通文件
  • zip / unzip 使用 -r 或 /* 进行递归压缩
  • tar -zcvf 压缩 -zxvf 解压

三、组/权限管理

1. 文件/目录所有者/所在组

  • ll 查看文件详情时,可以看到文件/目录所有者/所在组

  • chown 修改文件/目录所有者

    chown newowner 文件 / 目录(-R 递归修改)

    chown newowner : newgroup 文件 / 目录 (-R 递归修改)

  • chgrp 修改文件/目录所在组

2. 使用 ll 命令后,每行内容解析

-rwxrw-r-- 1 root root 1213 6月 26 11:03 abc.txt 为例:

  1. 前十位
  • 第一位代表文件类型 - 代表普通文件 d 代表文件夹
  • 2 - 4 位代表所有者的权限
  • 5 - 7 位代表所在组的权限
  • 8 - 10 位代表其他组的权限
  1. 1 代表这是一个普通文件,空文件夹是 2 , 非空文件夹是文件夹里项目数
  2. 第一个 root 代表该文件 / 文件夹的所有者是 root
  3. 第二个 root 代表该文件 / 文件夹的所在组是 root
  4. 1213 代表文件的大小。若为文件夹则为一个默认值

3. 文件夹的 rwx

  • x 获得 x 权限才能进入该文件夹
  • r 获得 r 权限可以看到文件里有什么,但是不影响用户对其中文件进行操作
  • w 删除、添加和修改文件名的权限

※4. 修改权限 chmod

  1. + - = 方式
  • u - user
  • g - group
  • o - others
  • a - all
  1. 数字方式

chmod u=rwx,g=rw,o=x a.txt 等价于 chmod 761 a.txt

四、定时任务调度 | 磁盘分区、挂载 | 网络配置

一、定时任务调度

1. crontab 多次定时任务

  • -e 编辑 crontab 定时任务

    1. 从前到后五个位置 分别代表分钟、小时、天、月、星期几

    2. * 代表任何时间

    3. , 代表不连续的时间

      0 8,12,16 * * * 命令 代表每天 8:00 12:00 16:00 都执行一次命令

    4. - 代表连续的时间范围

      0 5 * * 1-6 命令 代表周一到周六的 5:00 执行命令

    5. */n 代表每隔多久执行一次

      */10 * * * * 命令 代表每隔 10 分钟执行一次命令

  • -l 列出正在运行的定时任务

  • -r 终止所有正在运行的定时任务

2. at 单次定时任务

使用 at 前确保 atd 进程正在运行,查找指定进程的方式:ps -ef | grep atd

  • at

    例如:一分钟后将 date 输出到 /root/tmp/mydate.txt 中

    at now + 1 minutes 回车进入 at 命令行,输入 date >> /root/tmp/mydate.txt 命令后按两次 Ctrl + D退出。

  • atq 查询 at 定时任务

  • atrm 删除 at 定时任务

二、磁盘分区、挂载

1. 分区、挂载

  • lsblk

    查看磁盘分区和挂载情况。sda 磁盘有三个分区,各分区挂载点如下图 MOUNTPOINT 所示。

image.png

  • 为虚拟机增加一块硬盘并分区、挂载的流程:

    1. 增加硬盘 2. 分区 3. 格式化 4. 挂载 5. 设置自动挂载

2. 磁盘使用情况查询

  • df -h

    查看系统整体磁盘使用情况

  • du -h

    查询指定目录的磁盘占用情况

    -a 含文件

    --max-depth 子目录深度

3. 如何统计某目录下的文件或文件夹数目?

  • 统计文件数

    ll | grep "^-" | wc -l

    ll -R | grep "^-" | wc -l

  • 统计文件夹数

    ll | grep "^d" | wc -l

    ll -R | grep "^d" | wc -l

4. tree 命令

若没有 tree 命令,需使用 yum install tree 安装指令。

三、网络配置

1. NAT 网络配置原理图

image.png

2. 指定 IP

引入:虚拟机每次启动后 IP 地址不定,导致 XShell 需要再输入 IP地址等重新登陆,如何使虚拟机 IP 地址固定?

方法:

  1. 修改 /etc/sysconfig/network-scripts/ifcfg-ens33 文件
  • dhcp 改为 static
  • IPADDR = 192.168.100.100
  • GATEWAY = 192.168.100.2
  • DNS1 = 192.168.100.2

至此,Linux 虚拟机的 IP 修改完毕,为了实现与 vmnet8 的通信,需要修改 vmnet8 的 IP。

  1. 在虚拟网络编辑器中修改子网 IP 和 网关 IP

image.png

image.png 3. 重启虚拟机,指定 IP 流程完成。XShell 就可以愉快的锁定 192.168.100.100 这个 IP 啦!

3. 主机名

  • hostname 查看主机名
  • 在 /etc/hostname 中修改主机名,重启生效

4. Hosts 映射

  • Windows

    "C:\Windows\System32\drivers\etc\hosts" 在该文件下(需要勾掉只读,以管理员身份修改),添加 192.168.100.100 fanhaolinux 即可完成 fanhaolinux 和 IP 192.168.100.100 的映射,相当于为 IP 起了个别名。

  • Linux

    给 /etc/hosts 文件添加 192.168.100.100 fanhaowindows,即完成映射。

五、进程管理

1. ps 指令

  • -a 显示当前终端所有进程信息
  • -u 以用户格式显示进程信息
  • -x 显示所有进程,包括所有用户的进程

在使用时,通常采用 -aux

  • -ef 可以查看进程的父进程 PPID

  • pstree 进程树

    -p 显示 PID

    -u 显示 USER

2. 终止进程

  • kill 进程号
  • killall 进程名称
  • -9 强制终止

3. 服务管理

  • setup 管理系统服务、

  • service 和 chkconfig 在 CentOS7 之后,两个命令被 systemctl 替代,只有对 network 操作时还有用

  • systemctl

    1. systemctl [start | stop | restart | status] 服务名
    2. systemctl list - unit - files 查看所有服务的开机启动状态
    3. systemctl enable / disable 服务名 修改服务开机启动状态
  • firewall

    firewall-cmd --query-port=端口/协议 查询端口是否开放 netstat -anp 可以看到端口对应的协议

    firewall-cmd --permanent --add-port=端口/协议 打开防火墙端口

    firewall-cmd --permanent --remove-port=端口/协议 关闭防火墙端口

    firewall-cmd --reload 重新载入才能使端口的打开/关闭操作生效

4. top 指令

动态监视进程

  • 参数选项

    -d 秒数 指定更新时间,默认为 3s

  • 运行时交互

    P 以 CPU 占用率排序,默认如此

    M 以内存占用率排序

    N 以 PID 排序

    u 监视特定用户的进程

    k 杀死进程

    q 退出

5. 监控网络状态

  • netstat -anp
  • ping

六、RPM / YUM

1. rpm

  1. 查询
  • -q 查询软件包是否安装
  • -qa 查询安装的所有 rpm 软件包
  • -qi 查询软件包的详细信息
  • -ql 查询软件包包含的文件
  • -qf 查询文件所属的软件包
  1. 删除
  • -e
  • -e --nodeps 强制删除,忽略依赖关系
  1. 安装

-ivh rpm 包路径

2. yum

rpm 安装需要把 rpm 包先下载下来,yum 直接从远程服务器下载并安装软件,从而简化 rpm 安装。

  • yum list | grep xxx
  • yum install xxx

七、Shell

1. 执行方式

  • !/bin/bash 开头,脚本需要有 x 权限
  • sh + 脚本 快速执行脚本,省去添加 x 权限过程

2. 变量

  • 系统变量

    $HOME$PWD 等。

    使用 set 查看所有系统变量。

    可以在 /ect/profile 文件中通过 export 指令声明系统变量,然后使用 source /etc/profile使系统变量立即生效,在其他程序中就能开始使用

  • 用户自定义变量

    定义变量:变量=值 = 左右不能有空格;变量名一般大写

    撤销变量:unset 变量

    静态变量:readonly 变量 不能撤销

    命令返回值赋给变量:1.反引号 A=date 2. A=$(date)

  • 位置参数变量

    命令后可加多个参数

    $n $0 代表命令本身,$1 代表第一个参数,以此类推,第十个开始要用大括号括起来,如 ${10}

    $* 所有参数 (整体,合为一份数据)

    $@ 所有参数 (仍为多份数据,可遍历)

    $# 参数个数

  • 预定义变量

    $$ 当前进程的 PID

    $! 后台运行的最后一个进程的 PID

    $? 最后一次执行的命令的返回状态,0 - 正确执行

3. 运算式

最方便的写法: $[运算式]

4. 条件判断式(适用于 if 和 while)

格式:[ 条件 ] 中括号和条件间要求有一个空格

特殊真假:[ xxx ] 为真( xxx 为非判断语句,如一个字符串),[ ] 为假

判断语句分类:

  • 字符串比较
  • 整数比较
  • 文件权限判断
  • 文件类型判断

5. 流程控制

  • if 单分支判断

    if [  ]
    then
    #逻辑代码
    fi
    
  • if 多分支判断

    if [  ]
    then
    #逻辑代码1
    elif [  ]
    then
    #逻辑代码2
    fi
    
  • case

    case $变量名 in
    "值1")
    #逻辑语句1
    ;;
    "值2")
    #逻辑语句2
    ;;
    *)
    #其它情况
    ;;
    esac
    
  • for 循环

    • 格式:for 变量 in 值1 值2 ...
    #借此探究 $* 和 $@ 的区别,注意要加引号,否则均为 $@ 的效果
    for i in "$*"
    do
    echo "i=$i"
    donefor j in "$@"
    do
    echo "j=$j"
    done
    
    • for ((初始值;条件;执行语句)) 这里的条件可以用 > / < 等判断符号,if 语句若使用 6 > 5这类语句,则默认为真
  • while 循环

    格式:while [ 条件 ] 这里 while 右边,以及条件两边都需要空格

    这里的条件与 if 的要求一样,只有第二类 for 循环的判断条件特殊

6. 获取控制台输入

read -t 10 -p "请输入X的值:" X
echo "您输入的X = $X"
  • -t 等待输入的最长时间
  • -p 提示信息

7. 函数

系统函数

  • basename

    #截取文件名
    basename /root/test.sh              -> test.sh
    basename /root/test.sh .sh          -> test
    
  • dirname

    #截取路径名
    dirname /root/test.sh               ->/
    

自定义函数

function getSum(){
    echo "SUM=$[$A + $B]"
}
​
...