平时捣鼓Linux时总会存在一些问题,因此将问题汇总在这里。

7-17 节的内容参考自尚硅谷 Linux 教程

1. screen -r 出现问题

使用screen -r时经常会出现报错:There is no screen to be resumed matching

问题原因是,出现了重名screen,因此需要先执行分离操作,再恢复screen

解决方法是:screen -d -r [id]

2. tar解压缩

tar格式很多,但v1.15版本以上的tar只需要tar -xvf命令即可自动完成识别,并进行解压

tar -xvf filename.tar.gz
tar -xvf filename.tar.bz2
tar -xvf filename.tar.xz
tar -xvf filename.tar.Z

3. 进程后台运行

3.1 当前shell中将进程放入后台运行

进程开始时可以采用(cmd &)的方法后台运行。但已经开始的进程如何转入后台呢?其实很简单

ctrl + z
# 将已经执行的进程放到后台挂起
jobs
# 查看任务,返回任务状态及编号
bg %n
# 将编号为n的任务放到后台继续执行
fg %n
# 将编号为n的任务放到前台继续执行
kill %n
# 杀死编号为n的任务

3.2 断开shell后保持进程后台运行

ctrl + z的方法只能在当前shell中放入后台运行,但关闭shell后,进程会中断

查阅网上各种资料,有介绍各种方法的。其实采用screen方法更加简单

screen -S abc
# 新建窗口
Ctrl + A + D
# 退出窗口
screen -r abc
# 返回窗口

4. 无法安装vim等软件

配置新电脑ubuntu环境时,发现无法安装vim等软件,显示如下问题

image-20201027102444278

解决方法是换源。那么,如何在没有vim的情况下换源呢?终端输入如下命令即可

$ sudo gedit /etc/apt/sources.list

将源替换成阿里云源后,Ctrl+s存储文件,在终端输入

$ sudo apt-get update

随后即可安装vim等软件

5. 配置环境变量

ubuntu的环境变量存储在~/.bashrc中。export添加指定路径后,不要忘记添加:$PATH

$ vim ~/.bashrc
# 在最后一行添加如下命令
export PATH=~/anaconda3/bin:$PATH
# 修改时不要忘记后面添加一个:$PATH

6. Anaconda常用命令

之前总是现查Anaconda不常用的相关命令,现在记录一下

6.1 升级相关命令

$ conda update conda
# 基本升级
$ conda update anaconda
# 大升级
$ conda update anaconda-navigator
# navigator升级

6.2 环境相关命令

$ conda create -n [name] python=[pythonVersion]
# 创建环境
$ conda remove -n [name] --all
# 删除环境
$ conda env list
# 查看环境列表(推荐)
$ conda info --envs
# 同样是查看环境列表

6.3 包相关命令

$ anaconda show [packageName]
# 查找指定包版本信息
$ conda install --channel [url]
# 利用anaconda show获得的网址下载指定版本的包

6.4 其他命令

$ conda clean -p
# 删除没有用的包
$ conda clean -t
# 删除tar

7. Unix 和 Linux 关系

image-20210104081326231

8. Linux 目录结构

Linux 一切皆为文件。

Linux 重要的目录内容包括:

  • /bin :存放最常使用的命令。
  • /home :存放普通用户的主目录。Linux 每个用户都有一个主目录,以账号名命名。
  • /root :系统管理员目录,超级权限者目录。
  • /boot :启动 Linux 核心文件,包括连接文件和镜像文件。
  • /media :存放外设连接文件。
  • /mnt :外部存储设备接入,外部设备的文件会出现在这里。
  • /usr/local :存放通过编译源码方式安装的新程序。/opt 也是。
  • /var :存放不断扩展的文件。可以将日志等文件放在这里。

9. Linux 开机关机及重启

Linux 开机关机及重启指令包括:

  • shutdown:关机指令。
    • shutdown -h now:现在关机。
    • shutdown -h 1:一分钟后关机。
    • shutdown -r now:现在重启。
  • halt:关机指令。
  • reboot:重启指令。
  • sync:内存数据同步到磁盘中。对于关机和重启,都应该先 sync 操作。

10. Vim 快捷键

Vim 快捷键包括:

  • yy:拷贝当前行。5yy:拷贝前5行。
  • dd:删除当前行。5dd:删除前5行。
  • p:粘贴。
  • /关键字:查找关键字。
  • :set nu:显示行号。
  • :set nonu:不显示行号。
  • G:切换到最末行。
  • gg:切换到首行。
  • u:撤回操作。
  • 20 + SHIFT + G:切换到第20行。

11. Linux 用户管理

Linux 系统是多用户多任务操作系统,任何用户要使用系统资源,都要先从系统管理员处申请一个账号。

11. 1 用户管理命令

用户管理命令包括:

  • useradd [OPTION] 用户名:新建用户。
    • -d 指定目录:给新创建的目录指定家目录。
    • -g 用户组:新建用户时将用户加入到用户组。
  • passwd 用户名:指定密码。
  • userdel [OPTION] 用户名:删除用户。
    • -r:删除用户和家目录。
  • id 用户名:查询用户。
  • su 用户名:切换用户。
    • exit:返回原用户。
  • groupadd 组名:增加用户组。同理,有 groupdel
  • usermod -g 用户组 用户名:将用户修改到指定组。

11. 2 用户管理文件

用户管理文件包括:

  • /etc/passwd:用户配置文件,记录用户各种信息。
  • /etc/shadow:口令配置文件。
  • /etc/group:组文件。

12. Linux 实用指令

Linux 有很多实用指令,包括:

12.1 通用指令

  • init 运行级别:切换运行级别。比如 5 是图形界面。

    • image-20210107104012395
    • 例如:如何找回 root 密码?
    • 思路:切换到单用户模式 init 1,然后修改 root 密码
  • man 命令或配置文件:查看帮助。
  • help 命令:获得 shell 自带的帮助。
  • pwd:显示当前绝对目录。
  • ls [OPTION] 目录或文件:显示内容。

    • -a:显示所有文件,包括隐藏文件。
    • -l:以列表形式显示信息。
  • cd [OPTION] 目录:切换位置。

12.2 增删改指令

  • mkdir [OPTION] 目录:创建目录。

    • -p:一次性创建多级目录。
  • rm [OPTION] 文件或目录:删除文件或目录。

    • -f:强制删除文件。
    • -r:删除目录。常常 -rf 连起来用。
  • touch 文件:创建空文件。
  • cp [OPTION] 源文件 目录:复制文件到目录中。

    • -r:复制文件夹。
  • mv 文件 文件:移动文件,或者重命名。

12.3 查看指令

  • cat [OPTION] 文件:查看文件内容,以只读方式打开。cat 文件 | more:分页显示。

    • -n:显示行号。
  • more 文件:全屏按页显示文件。支持快捷键。

    • image-20210107105412778
  • less 文件:比 more 更好的文件查看器。也支持快捷键。

    • image-20210107105450254
  • 文件 A > 文件 B:文件 A 覆盖文件 B。
  • 文件 A >> 文件 B:文件 A 追加到文件 B 尾部。
  • echo [OPTION] 内容或变量:输出内容到控制台。
  • head [OPTION] 文件:显示文件前面的内容。tail 命令同理。

    • -n 数量A:显示文件前 A 行内容。
  • history:显示历史指令。
  • data [OPTION]:显示时间。

    • date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒。
    • -s 字符串时间:设置时间。
  • cal [OPTION]:显示日历。

12.4 查找指令

  • find [搜索范围] [OPTION]:查找内容。

    • -name:查找指定文件名的文件。
    • -user:查找指定用户的所有文件。
    • -size:查找指定大小的文件。
  • locate 文件:在 locate 数据库中快速查找文件。必须先使用 updatedb 指令创建 locate 数据库。

  • grep [OPTION] 查找内容 源文件:过滤查找。

    • -n:显示匹配的行及行号。
    • -i:忽略字母大小写。
  • | :管道符,将前一个命令的处理结果传递给后面的命令处理。

    • grep 和 | 经常配合使用。例如,查找 hello.txt 文件中 yes 所在的行:

    • cat hello.txt | grep -n yes
      cat hello.txt | grep -ni yes

12.5 压缩指令

  • zip [OPTION] 压缩文件 源文件:压缩文件。

    • -r:压缩目录。
  • unzip [OPTION] 文件:解压缩文件。

    • -d 目录:指定文件解压后的存放目录。
  • tar [OPTION] 压缩文件 源文件:打包为 .tar.gz。

    • image-20210107115743775

    • 例如,将 /home/a1.txt 和 a2.txt 压缩为 a.tar.gz,将 a.tar.gz 再解压到 /opt:

    • tar -zcvf a.tar.gz a1.txt a2.txt
      tar -zxvf a.tar.gz /opt

13. Linux 组管理

Linux 需要对用户及对应组进行管理,这涉及到一系列命令,包括:

  • chown 用户名 文件名:修改文件所有者。
    • ls -l 可以查看文件及所有者。
  • groupadd 组名:创建一个组。
  • chgrp 组名 文件名:修改文件所在组。
  • usermod -g 组名 用户名:修改用户组。
  • usermod -d 目录名 用户名:修改用户登录的初始目录。
  • chmod [OPTION] 文件目录名:变更权限。
    • r:读权限,w:写权限,x:执行权限。
    • u:所有者,g:所有组,o:其他人,a:所有人。
    • 例子1:chmod o=r,g=rw temp.txt。
    • 例子2:chmod a+r temp.txt。给所有人增加读权限。同理还有减号。
    • 例子2:chmod 751 temp.txt。相当于 chmod u=rwx,g=rx,o=x temp.txt。r=4,w=2,x=1。

Linux 组管理实例:

image-20210108152927147

image-20210108153641231

image-20210108153653388

14. Linux 任务调度管理

Linux 任务调度,常常使用 crontab。crontab 可以设定某个时间执行某个命令或脚本文件。

  • crontab [OPTION]:定时执行某命令或脚本。
    • -e:编辑任务。
    • -l:查询任务。
    • -r:删除当前用户所有 crontab 任务。
  • service crond restart:重启任务调度。

设置 crontab 的方法如下:

  • 设置任务调度文件:/etc/crontab。

  • 编辑任务: crontab -e。

  • 输入任务到调度文件。

  • 任务设置语法:

    image-20210108154512685

    image-20210108154547693

    image-20210108154604664

任务调度案例包括:

  • 案例一:每隔一分钟,将当前日期加入到 /tmp/mydate 文件。

  • touch /tmp/mydate
    chmod 744 /home/mytask1.sh
    crontab -e
    */**** /home/mytask1.sh
  • 案例二:每天凌晨 2:00 将 MySQL 数据库 testdb 备份到 mydb.bak 文件。

  • touch /tmp/mydb.bak
    chmod 744 /home/mytask2.sh
    crontab -e
    0 2 * * * /home/mytask2.sh

15. Linux 分区及挂载管理

Linux 涉及到分区、磁盘以及相关常用的指令。

15.1 分区指令

  • lsblk [OPTION]:查看分区情况。
    • -f:显示分区哈希值。
    • image-20210108160949538

为 Linux 系统添加一块新硬盘,需要经历如下步骤:

  • 添加硬盘。

  • 对硬盘进行分区。fdisk 分区名。随后按照提示操作即可。

  • 格式化。mkfs [OPTION] 分区名。

    • -t 格式名:按照指定格式进行格式化。
  • 挂载。mkdir 目录,为目录构建地址。随后挂载操作 mount 分区名。

  • 设置可以自动挂载。编辑 /etc/fstab,修改后 mount -a。确保系统重启时,仍然保持挂载。

  • fdisk /dev/sdb
    mkfs -t ext4 /dev/sdb1
    mkdir /home/newdisk
    mount /dev/sdb1 /home/newdisk
    vim /etc/fstab
    /dev/sdb1 /home/newdisk ext4 defaults 0 0 # 加入的内容
    mount -a

15.2 磁盘指令

Linux 查看磁盘整体使用情况命令,包括:

  • df [OPTION]:查看磁盘使用情况。
    • -lh:查看所有分区及使用情况。一般都是用这个 df -lh。
    • image-20210108163859602
  • du [OPTION] 目录:查看指定目录的磁盘占用情况。
    • -h:带计量单位。一般用 du -h 目录。
    • -a:含文件。
    • --max-depth=1:子目录深度。
    • -c:带汇总。

15.3 常用指令

Linux 磁盘操作最常用的指令,包括:

  • 统计文件夹下文件的个数:

    • ls -l /home | grep "^-" | wc -l
  • 统计文件夹下目录的个数:

    • ls -l /home | grep "^d" | wc -l
  • 统计包括子文件夹的文件个数:

    • ls -lR /home | grep "^d" | wc -l
  • tree:树状显示目录结构。

16. Linux 进程管理

16.1 进程管理命令

进程管理常用命令,包括:

  • ps [OPTION]:查看进程。一般是 ps -aux,或 ps -ef。
    • -a:显示所有进程。
    • -u:用户格式。
    • -x:显示后台参数。
    • -e:显示所有进程。
    • -f:全格式。
  • ps [OPTION]|grep 相关内容:查看是否有相关服务。
  • ps 命令显示的部分属性包括:
    • %CPU:占用 CPU 百分比。
    • %MEM:占用内存百分比。
    • VSZ:占用虚拟内存大小(KB)。
    • RSS:占用物理内存大小(KB)。
    • TT:终端名称。
    • STAT:进程状态。S:睡眠。s:先导进程。N:低优先级。R:正在运行。D:等待。Z:阻塞。T:跟踪或停止。
    • STARTED:启动时间。
    • TIME:持续时间。
  • kill [OPTION] 进程号:杀死进程。
    • -9:强制立即停止。
  • killall [OPTION] 进程号:杀死所有符合的进程。
  • pstree [OPTION]:更直观显示进程。
    • -p:显示进程号。
    • -u:显示进程所属用户。
  • top [OPTION]:查看进程,可以更新显示。
    • -d 秒数:每隔几秒更新。
    • -i:不显示停止或阻塞进程。
    • -p 进程号:查看指定进程。
    • k:杀死指定进程。

16.2 服务管理命令

服务,本质是进程,但是是运行在后台的,通过监听某个端口,等待其他程序请求,因此又叫守护进程

服务管理常用的命令,包括:

  • service 服务名 [start | stop | restart | reload | status]:管理服务。

    • 部分系统使用的不是 service 关键字,而是 systemctl。
  • ls -l /etc/init.d/:查看所有服务名称。

  • netstat [OPTION]:查看系统网络服务。

    • -an:按顺序排列输出。

    • -p:显示调用服务的进程。

    • 例子:查看系统所有网络服务:

    • netstat -anp | more
    • 例子:查看服务名为 sshd 的服务的信息:

    • netstat -anp | grep sshd
  • chkconfig [OPTION]:查看并设置服务运行级别。

  • 服务运行级别:

  • image-20210110120006238

17. Linux Shell 编程

17.1 Shell 介绍

Shell 是一个命令行解释器,为用户提供了一个向 Linux 内核发送请求运行程序的界面系统。

Shell 可以启动、挂起、停止、编写程序。

17.2 Shell 脚本

Shell 脚本的要求包括:

  • 脚本以 #!/bin/bash 开头。
  • 脚本需要提供可执行权限。

脚本常用执行流程包括:

  • chmod 744 脚本名称:提供所有者执行权限。
  • 脚本路径:执行脚本。

另一种脚本执行流程,不推荐使用:

  • sh 脚本路径:直接执行脚本。不提供执行权限。

17.3 Shell 变量

Shell 变量的内容包括:

  • Shell 变量包括:

    • 系统变量。$HOME, $PWD, $SHELL, $USER 等。
    • 用户自定义变量。
  • 变量 = 值:定义变量。

  • unset 变量:撤销变量。

    • readonly 变量:声明静态变量。
  • 命令返回值赋值:有两种方法实现将命令的返回值赋给变量,包括:

    • 反引号命令赋值。

    • $() 命令赋值。

    • A = ls -la
      A = $(ls -la)
  • export 变量:设置环境变量。

  • source 配置文件:生效配置信息。

  • echo $变量:查询环境变量值。

17.4 Shell 参数变量

Shell 脚本可以定制参数信息,包括:

  • $n:第 n 个参数。
  • $*:所有参数。
  • $@:所有参数。
  • $#:所有参数的个数。
  • $$:当前进程号。
  • $!:最后一个进程号。
  • $?:最后一次命令的返回状态。可以用于判断是否上个命令正确执行,正确则为 0,否则不正确。

17.5 Shell 算数运算

Shell 脚本可以执行算数运算,包括:

  • $[运算式]:执行运算。
  • $((运算式)):执行运算。
  • expr 运算式:执行运算。

17.6 Shell 条件判断

Shell 脚本执行条件判断的命令,包括:

  • [ 条件 ]:条件判断。注意,条件前后要有空格。
    • 条件成立则返回 true,可以用 $? 验证,为 0 则为 true,否则为 false。
  • -lt:小于。
  • -le:小于等于。
  • -eq:等于。
  • -gt:大于。
  • -ge:大于等于。
  • -ne:不等于。
  • -r:有读权限。同样的有 -x、-w。
  • -f:文件存在,且是常规文件。
  • -e:文件存在。
  • -d:文件存在,且是一个目录。

实例:

if [ 23 -gt 22 ]
then
    echo "大于"
fi

17.7 Shell 流程判断

Shell 流程判断语法包括:

  • if [ 条件 ]
    then 内容
    elif [ 条件 ]
    then 内容
    fi
  • case $变量名 in
    "值1")
    内容
    ;;
    "值2")
    内容
    ;;
    *)
    内容
    ;;
    esac
  • for 变量 in "值"
    do 内容
    done
    
    for ((初始值;循环控制条件;变量变化))
    do 内容
    done
  • while [ 条件 ]
    do 内容
    done

17.8 Shell 控制台读取输入

Shell 从控制台读取输入命令包括:

  • read [OPTION] [参数]:控制台读取参数。
    • -p:指定读取时的提示符。
    • -t:指定读取等待时间。
    • 参数:指定读取值的变量名。

17.9 Shell 函数

Shell 和其他语言一样,也可以编写函数。系统函数包括:

  • basename 文件地址 [后缀]:返回文件名。指定后缀后可以去除后缀。
  • dirname 文件地址:返回文件名前面的目录。

自定义函数:

  • 语法:

  • [ function ] funcname[()] {
    内容;
    [return int;]
    }
  • 调用:

  • funcname [值]

18. Vim 下复制粘贴

vim 下复制可以使用:

:set mouse=c

19. Vim 撤回和恢复

可以命名模式下通过 u 实现退回。

可以 CTRL + R 实现恢复。

20. Bash 快速操作

有时 Bash 输入栏里有太多内容,而我们想对内容进行快速处理,或者快速移动光标,或者查看历史命令,这时就可以使用这些技巧了。

# 光标移动到行首
CTRL + A
# 光标移动到页尾
CTRL + E
# 删除光标前的文字
CTRL + U
# 删除光标后的文字
CTRL + K
# 搜索历史命令
CTRL + R

参考内容

  1. [linux 命令行 光标移动技巧等](