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
则:
- 先备份以前的文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 在清华镜像中找到相应的文件:
找到对应的版本,本文中用的是Ubuntu20.04 - 打开list文件:
sudo gedit /etc/apt/sources.list
或者:
sudo vim /etc/apt/sources.list
- 将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文件如下:
- 更新
sudo apt update
- 权限不够报错
出现以下报错:
WARNING: Running as a non-root user. Functionality may be unavailable.
则切换root超级用户:
su
然后输入密码,即可切换到root超级用户
若出现认证失败:
则使用以下命令:
sudo passwd root
然后设置新密码
再次使用su切换到root超级用户:
- 退出root
exit
- 权限不够
出现以下一类报错时:
在原命令前加上sudo即可:
sudo <原命令>
- 打开文件
一、使用gedit:
sudo gedit <文件地址与文件名>
如:
sudo gedit /etc/apt/sources.list
二、使用vim:
sudo vim <文件地址与文件名>
如:
sudo vim /etc/apt/sources.list
- 没有公钥导致update失败
进行update等操作时出现以下报错:
这是一个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
以下是当前使用的所有端口:
查看具体端口,其中,XXX为具体端口。LISTEN表示该端口已经被占用,最后一列显示被占用的服务名称。
sudo netstat -anp |grep XXX
如,查看端口2000:
方法二:【lsof】
XXX为具体端口
sudo lsof -i:XXX
其中,
command:进程名称;
PID:进程标识符;
USER:进程所有者
FD:文件描述符,应用程序通过文件描述识别该文件。如cwd, txt
TYPE:文件类型,如DIR,REG
DEVICE:制定磁盘名称
SIZE:文件大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
- 网页观看视频
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,在文件夹右上角菜单处,选择显示隐藏文件即可。
复制id_rsa.pub内容
进入github,点击设置(settings),在左侧栏找到SSH and GPG keys,点击New SSH key,给title随便取一个名字,然后将id_rsa.pub的内容粘贴在Key中即可,完成Add SSH Key
在终端输入:
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创建、退出
- 安装conda,在anaconda官网,下载linux-ubuntu版本
- 创建新环境:
conda create -n 环境名称 python=3.7
创建后,进入环境:
conda activate 环境名称
- 退出环境
若进入特定环境,要退出:
conda deactivate 环境名称
在终端退出conda:
conda deactivate
未退出时为:
## - 请把标有“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
查看这些进程的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几大特色
- 会话与窗口解绑,终端执行的任务不再因为关闭窗口而中断
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