Ubuntu 一些常用命令总结


目录

  • Ubuntu 一些常用命令总结
  • - 查看磁盘空间
  • - 下载安装包等失败
  • - 权限不够报错
  • - 退出root
  • - 权限不够
  • - 打开文件
  • - 没有公钥导致update失败
  • - 使用yum报错-没有已启用的仓库。 执行 “yum repolist all“ 查看您拥有的仓库。
  • - 查看版本
  • - 安装软件方法
  • - 无法获取dpkg前端锁
  • - 无法定位软件包
  • - 查看word文档
  • - 运行python文件
  • - 检查端口使用情况
  • - 网页观看视频
  • - 执行git clone 命令失败
  • - 文件夹有锁
  • - 压缩与解压
  • - conda创建、退出
  • - 安装谷歌
  • - 文件/文件夹解锁
  • - kill defunct进程(僵尸进程)
  • - 终端分屏(tmux)
  • 安装:
  • 开启tmux
  • prefix前缀键(ctrl+b)
  • session(会话)
  • 临时退出session
  • 回到已存在的session
  • 回到上一个session
  • 查询当前session列表
  • 切换session
  • 结束session
  • 窗口
  • 新建窗口
  • 切换窗口
  • 窗格
  • 创建新的窗格
  • 关闭窗格
  • 切换窗格
  • 调整窗格大小
  • 查看版本
  • 切换鼠标模式
  • -进入conda环境失败
  • 参考文献


- 查看磁盘空间

df命令是Linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令:
查看磁盘剩余空间

df -hl

查看每个根路径的分区大小

df -h

返回该目录的大小

du -sh [目录名]

返回该文件夹总M 数

du -sm

- 下载安装包等失败

若出现以下报错:

正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
没有可用的软件包XXX,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到

可通过执行:

sudo apt update

更新后再次下载

若出现以下报错:

正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
E: 无法定位软件包 ros-noetic-desktop-full

则:

  1. 先备份以前的文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  1. 清华镜像中找到相应的文件:
    找到对应的版本,本文中用的是Ubuntu20.04
  2. 打开list文件:
sudo gedit /etc/apt/sources.list

或者:

sudo vim /etc/apt/sources.list
  1. 将list文件中的内容全部删除,然后在第一行输入:
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

在此行后,将前面找到的清华镜像的内容复制在list文件中(此处为20.04版本):

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

得到list文件如下:

仓库没有release文件 本地源 没有已启用的仓库_仓库没有release文件 本地源

  1. 更新
sudo apt update

- 权限不够报错

出现以下报错:

WARNING: Running as a non-root user. Functionality may be unavailable.

则切换root超级用户:

su

然后输入密码,即可切换到root超级用户

若出现认证失败:

仓库没有release文件 本地源 没有已启用的仓库_安装软件_02

则使用以下命令:

sudo passwd root

然后设置新密码

仓库没有release文件 本地源 没有已启用的仓库_安装软件_03

再次使用su切换到root超级用户:

仓库没有release文件 本地源 没有已启用的仓库_ubuntu_04

- 退出root

exit

- 权限不够

出现以下一类报错时:

仓库没有release文件 本地源 没有已启用的仓库_git_05

在原命令前加上sudo即可:

sudo <原命令>

- 打开文件

一、使用gedit:

sudo gedit <文件地址与文件名>

如:

sudo gedit /etc/apt/sources.list

二、使用vim:

sudo vim <文件地址与文件名>

如:

sudo vim /etc/apt/sources.list

- 没有公钥导致update失败

进行update等操作时出现以下报错:

仓库没有release文件 本地源 没有已启用的仓库_ubuntu_06

这是一个GPG错误,说明在使用apt-get更新软件包列表时,无法验证下载的软件包是否来自信任的源。错误中提到了缺少公钥的问题,则需要添加下载软件包所需的公钥。

这种情况下,缺少的公钥是:7EA0A9C3F273FCD8 (与报错中对应),这是Docker的官方软件包签名密钥。

由于没有公钥,无法验证下列签名: NO_PUBKEY 7EA0A9C3F273FCD8
命中:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
命中:5 http://security.ubuntu.com/ubuntu focal-security InRelease
正在读取软件包列表… 完成
W: GPG 错误:https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 7EA0A9C3F273FCD8
E: 仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease” 没有数字签名。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。

解决方法:

cd /etc/apt/sources.list.d/
sudo rm -f docker.list
sudo rm -f docker.list.save
sudo apt update

若此方法仍报错,可尝试以下方法:
添加密钥:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7EA0A9C3F273FCD8

然后重新运行apt-get更新命令。

- 使用yum报错-没有已启用的仓库。 执行 “yum repolist all“ 查看您拥有的仓库。

使用yum下载时,若出现以下报错:

没有已启用的仓库。
执行 “yum repolist all” 查看您拥有的仓库。
您可以用 yum-config-manager–enable <仓库名> 来启用仓库

这是因为yum在Centos中使用才可以,ubuntu默认的软件包管理器是dpkg,安装软件时使用apt-get,则将

sudo yum install <软件名>

修改为:

sudo apt-get install <软件名>

即可。

- 查看版本


nvidia-container-cli -k -d /dev/tty info

uname -a

nvidia-smi -a

docker version

dpkg -l '*nvidia*'

rpm -qa '*nvidia*'

nvidia-container-cli -V

- 安装软件方法

.deb
在.deb所在文件夹处打开terminal:

sudo apt-get install ./<软件名>.deb

.rpm
在.rpm所在文件夹处打开terminal:

- 无法获取dpkg前端锁

使用apt install 安装软件时,出现报错:

E: 无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 34038(apt)持有
N: 请注意,直接移除锁文件不一定是合适的解决方案,且可能损坏您的系统。
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?

这是因为在用apt-get安装软件时,在没有完成的情况下将terminal关闭,而apt-get进程没有结束。再次运行apt-get install 命令安装软件时,会出现这种错误,此时资源会被锁。
解决方法:
方法一:使用ps查看apt-get的进程ID,使用kill命令将该进程杀死
方法二:

sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock  
sudo rm /var/lib/dpkg/lock
- 无法定位软件包

方法一:

sudo apt-get update   #(更新目录)
sudo apt-get upgrade #(更新文件)
sudo apt-get dist-upgrade #(更新依赖关系)

方法二:
更换源

- 查看word文档

下载软件:

sudo apt update
sudo apt install libreoffice

在libreoffice中打开文档,文件路径包括路径与文件名称:

libreoffice --writer <文件路径>

在terminal中显示文档:

cat <文件路径>

- 运行python文件

python3 <文件名>.py

- 检查端口使用情况

方法一:【netstat】
查看已使用的端口:

sudo netstat -nultp

以下是当前使用的所有端口:

仓库没有release文件 本地源 没有已启用的仓库_linux_07

查看具体端口,其中,XXX为具体端口。LISTEN表示该端口已经被占用,最后一列显示被占用的服务名称。

sudo netstat -anp |grep XXX

如,查看端口2000:

仓库没有release文件 本地源 没有已启用的仓库_git_08


方法二:【lsof】

XXX为具体端口

sudo lsof -i:XXX

其中,

command:进程名称;

PID:进程标识符;

USER:进程所有者

FD:文件描述符,应用程序通过文件描述识别该文件。如cwd, txt

TYPE:文件类型,如DIR,REG

DEVICE:制定磁盘名称

SIZE:文件大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

仓库没有release文件 本地源 没有已启用的仓库_linux_09

- 网页观看视频

 

sudo apt-get install -y ffmpeg

重启系统

sudo reboot

- 执行git clone 命令失败

执行git clone 命令失败,出现以下报错:

git@github.com: Permission denied (publickey). fatal: 无法读取远程仓库。

解决方法:
生成密钥,XXX为邮箱号,一直回车即可生成ssh key

ssh-keygen -t rsa -C "xxxx@qq.com"

在/home/.ssh下找到id_rsa.pub并打开,若在home下未找到.ssh,在文件夹右上角菜单处,选择显示隐藏文件即可。

仓库没有release文件 本地源 没有已启用的仓库_linux_10

复制id_rsa.pub内容

进入github,点击设置(settings),在左侧栏找到SSH and GPG keys,点击New SSH key,给title随便取一个名字,然后将id_rsa.pub的内容粘贴在Key中即可,完成Add SSH Key

仓库没有release文件 本地源 没有已启用的仓库_ubuntu_11

仓库没有release文件 本地源 没有已启用的仓库_仓库没有release文件 本地源_12

仓库没有release文件 本地源 没有已启用的仓库_ubuntu_13

在终端输入:

ssh -T git@github.com

若显示下面内容,则说明问题解决了

You’ve successfully authenticated, but Github does not provide shell access.

 

- 文件夹有锁

在该文件夹上一层打开终端,输入:

sudo chmod 777 XXX

其中,XXX为被锁文件夹名称

- 压缩与解压


# 仅打包,并非压缩
tar -xvf FileName.tar         # 解包
tar -cvf FileName.tar DirName # 将DirName和其下所有文件(夹)打包

# .gz
gunzip FileName.gz  # 解压1
gzip -d FileName.gz # 解压2
gzip FileName       # 压缩,只能压缩文件

# .tar.gz 和 .tgz
tar -zxvf FileName.tar.gz               # 解压
tar -zcvf FileName.tar.gz DirName       # 将DirName和其下所有文件(夹)压缩
tar -C DesDirName -zxvf FileName.tar.gz # 解压到目标路径

# mac和linux并没有自带rar,需要去下载
rar x FileName.rar      # 解压
rar a FileName.rar DirName # 压缩

- conda创建、退出

  1. 安装conda,在anaconda官网,下载linux-ubuntu版本
  2. 创建新环境:
conda create -n 环境名称 python=3.7

创建后,进入环境:

conda activate 环境名称
  1. 退出环境
    若进入特定环境,要退出:
conda deactivate 环境名称

在终端退出conda:

conda deactivate

仓库没有release文件 本地源 没有已启用的仓库_git_14

未退出时为:

仓库没有release文件 本地源 没有已启用的仓库_git_15

## - 请把标有“Ubuntu 20.04.1 LTS Focal Fossa - Release amd64 (20200731)”的盘片插入驱动器“/cdrom/”再按「回车」键”

安装软件时失败,提示为
更换介质:请把标有“Ubuntu 20.04.1 LTS Focal Fossa - Release amd64
(20200731)”的盘片插入驱动器“/cdrom/”再按「回车」键

解决方法:

sudo gedit /etc/apt/sources.list

注释第一行,保存并退出

- 安装谷歌

记录一下,因为从网页加载谷歌官网太慢了,容易加载不出来

下载deb文件包:

wget "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" -O google.deb

安装

sudo dpkg -i google.deb

- 文件/文件夹解锁

给某一个文件/文件夹解锁

sudo chmod 777 文件/文件夹路径

给某一个文件/文件夹及其内部所有文件解锁

sudo chmod -R 777 文件/文件夹路径

- kill defunct进程(僵尸进程)

在Linux系统中,当一个进程结束后,但是他的父进程没有等待他,那么子进程将变成一个僵尸进程,用ps命令观察进程状态时,该子进程的状态栏为defunct,他在进程表(process table)中仍占了一个位置(slo 

ps -A|grep defunct

仓库没有release文件 本地源 没有已启用的仓库_仓库没有release文件 本地源_16


查看这些进程的ID及其父进程的ID:

ps -ef | grep defunct | more
UID PID PPID
=====================================================================================
1018     2075483 2075419  0  2023 ?        00:00:00 [sh] <defunct>
1018     2075780 2075761  0  2023 ?        00:00:00 [sh] <defunct>
1018     2076002 2075974  0  2023 ?        00:00:00 [sh] <defunct>
1018     2077250 2077225  0  2023 ?        00:00:00 [sh] <defunct>
1018     2077253 2077225  0  2023 ?        00:00:00 [rg] <defunct>
1006     2087830 2087802  0  2023 ?        00:00:00 [sh] <defunct>
yourname 3576338 3576330  2 21:36 pts/246  00:00:02 [dreamview] <defunct>
yourname 3577346 3562361  0 21:37 pts/246  00:00:00 grep --color=auto defunct

其中,
UID:用户ID
PID:进程ID
PPID:父进程ID

若直接kill子进程(PID为进程ID,带入对应ID值):

kill -9 PID

查看defunct进程:

ps -A|grep defunct

输出为:

1018     2075483 2075419  0  2023 ?        00:00:00 [sh] <defunct>
1018     2075780 2075761  0  2023 ?        00:00:00 [sh] <defunct>
1018     2076002 2075974  0  2023 ?        00:00:00 [sh] <defunct>
1018     2077250 2077225  0  2023 ?        00:00:00 [sh] <defunct>
1018     2077253 2077225  0  2023 ?        00:00:00 [rg] <defunct>
1006     2087830 2087802  0  2023 ?        00:00:00 [sh] <defunct>
yourname 3576338 3576330  0 21:36 pts/246  00:00:02 [dreamview] <defunct>
yourname 3580625 3562361  0 21:43 pts/246  00:00:00 grep --color=auto defunct

发现进程仍在,没有kill成功
要成功杀死该进程,需对其父进程(PPID)执行kill命令(PPID为对应父进程ID)

kill -9 PPID

查看defunct进程:

ps -A|grep defunct

输出为:

2075483 ?        00:00:00 sh <defunct>
2075780 ?        00:00:00 sh <defunct>
2076002 ?        00:00:00 sh <defunct>
2077250 ?        00:00:00 sh <defunct>
2077253 ?        00:00:00 rg <defunct>
2087830 ?        00:00:00 sh <defunct>

可见,该进程(dreamview)消失

- 终端分屏(tmux)

 

Linux终端共享分屏神器tmux
tmux几大特色

  1. 会话与窗口解绑,终端执行的任务不再因为关闭窗口而中断
    2. 会话共享,tmux的会话可以被多人共享,同时操作,方便异地操作
    3. 支持窗口被水平垂直任意分割

安装:

Ubuntu

apt install tmux

CentOS

yum install tmux

开启tmux

从终端Terminal进入tmux界面

tmux

prefix前缀键(ctrl+b)

为了区分输入和快捷键,tmux设置了一个前缀组合键Ctrl+B,按下前缀组合键后松开,再按下快捷键操作,我们将这个组合键称作prefix,尝试使用prefix+%在当前window创建一个panel

session(会话)

新建一个session

mux new -s session_name

session_name是自定义的会话的名字,通过tmux命令直接建立的session的名字会默认以数字0,1,…开始命名

临时退出session

临时退出的session会在后台进行

tmux detach

快捷键prefix+D

回到已存在的session

tmux a -t session_name

回到上一个session

tmux a

tip:

  • 尝试在tmux中执行程序,并利用tmux的detach功能让其在后台运行。
  • 尝试在不同电脑上同时连入一个session进行操作

查询当前session列表

tmux ls

切换session

tmux switch -t session_name

结束session

结束当前session

快捷键prefix+:

输入命令:

kill-session

结束所有session
快捷键prefix+:

输入命令:

kill-server

结束指定session

tmux kill-session -t session_name

窗口

同一个session可以有多个窗口,这些窗口就像多个桌面一样

新建窗口

快捷键prefix+C

切换窗口

切换到下一个窗口
快捷键prefix+N切换到上一个窗口
快捷键prefix+P切换到指定窗口
快捷键prefix+窗口编号

窗格

窗格为我们同时提供了多个界面,方便了需要多个界面同时显示的操作

创建新的窗格

上下分屏

tmux split-window

快捷键prefix+"左右分屏

tmux split-window

快捷键prefix+%

关闭窗格
exit

快捷键prefix+X

切换窗格

快捷键prefix,再按 键切换

调整窗格大小

快捷键prefix,再按 ctrl,同时按键切换

查看版本

不同的版本,tmux的设置和快捷键可能有所不同

tmux -V
切换鼠标模式

开启鼠标模式
快捷键prefix+: 输入命令:

set mouse on

关闭鼠标模式
快捷键prefix+: 输入命令:

set mouse no

开启模式

关闭模式

鼠标左键

点击可以切换panel

可以选定文本

鼠标中键滚轮

滑动可以只针对当前panel

滑动会对当前窗口

鼠标右键

无反应

终端的右键选项窗口

使用过后明显感觉到,开启模式下,虽然对panel的操作更友好了,但是复制文本的时候就变的麻烦了,只要长按shift键,就会发现鼠标临时回到了关闭模式下的操作。
其余用法可参考:
1、 Tmux使用手册 2、 技术|Tmux速成教程:技巧和调整

-进入conda环境失败

尝试使用命令:

conda active my_conda_name

时(my_conda_name为conda的名字),出现报错:

CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate’.
To initialize your shell, run

$ conda init <SHELL_NAME>

Currently supported shells are:

  • bash
  • fish
  • tcsh
  • xonsh
  • zsh
  • powershell

See ‘conda init --help’ for more information and options.

IMPORTANT: You may need to close and restart your shell after running ‘conda init’.

报错原因:当前的shell没有配置好conda activate,需运行conda init初始化shell
解决方法:
一、根据提示运行conda init,重启shell后可正常使用conda activate激活虚拟环境指令

# 如使用 zsh,则
conda init zsh
# 如果使用 bash,则
conda init bash

二、首次激活conda虚拟环境,可用source activate激活

# 首次使用 source activate 命令激活虚拟环境 my_conda_virutal_environment
source activate my_conda_virutal_environment
# 退出虚拟环境
conda deactivate
# 以后使用 conda activate 命令激活虚拟环境
conda activate my_conda_virutal_environment