Ubuntu使用Tips集锦
*自定义终端字体颜色显示: 简书
1. 使用apt autoremove很可能将很多库认做不需要的卸载掉了,最好不要用。积累到一定程度后,我只好选择重装系统
2. 若系统卡死(如程序死循环),鼠标和键盘都基本上没反应(还是有一点反应)(假死),可尝试
$ ctrl + alt + t # 打开Terminal,虽然窗口无法移动,但可以键盘输入,kill进程
或
$ ctrl + alt + f1 # 进入tty1界面,kill卡死的进程,或注销桌面,或者尝试重启
或
$ alt + sysrq + r/e/i/s/u/b # sysrq是系统请求,直接请求Linux内核;这几个字母可以按序全部按一遍(即逆序的busier)
# r : unRaw, 从X server那里夺回键盘控制权
# e : tErminate, 给所有进程发送SIGTERM信号,让它们自己解决善后
# i : kIll, 给所有进程发送SIGKILL信号,强制马上关闭
# s : Sync, 将所有数据同步至磁盘
# u : Unmount, 将所有分区挂载为只读模式
# b : reBoot, 重启
3. error: The following signatures couldn’t be verified: NO_PUBKEY XXXXXXXXXXXX
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXXXXX
4. $ touch filename #可以在当前文件下创建文件 filename
5. gedit的设置(preference)在左上角Activities旁边的正在活动的应用那里(比如我现在是Chrome),点一下有向下的箭头,下拉菜单里有preference
6. 双系统时,挂载Windows中的盘为读写盘
$ sudo umount /dev/sda4 # /dev/sda4是D盘 $ sudo ntfsfix -d /dev/sda4 # 执行后D盘就可以在Ubuntu中读写了;临时性的,关机后要重新执行
7. 查看文件数目
$ ls -l example | grep "-" | wc -l # 查看当前目录下example文件夹下的文件数目
$ ls -l | grep "-" | wc -l # 查看当前目录下的文件数目(不含子目录内的文件)
$ ls -l | grep "^d"| wc -l # 查看当前目录内的文件夹数目
** 查看文件大小 ——参考
df -h # 查看目前所有文件系统的可用空间及使用情形 du # 循环列出当前目录下所有文件夹 使用的空间 du -sh * # 查看当前目录下 各个文件及文件夹 占用空间大小,不会递归进入目录下的文件夹;‘*’指定 目标目录 为当前目录 du -h --max-depth=1 /home # 列出home目录下面所有的一级文件夹大小 du -h --max-depth=1 /home/* # 列出home下面一级文件夹、文件和二级文件夹大小
** 查看CPU指令信息 ——参考博客
cat /proc/cpuinfo |grep -i 'flags' # 查看所有指令 cat /proc/cpuinfo |grep -i 'avx2' # 查看是否有avx2
8. 关闭蓝牙开机自启动 ——链接
9. 多版本gcc管理
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 9 # 9表示更高的优先级,所以gcc-7是默认gcc $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 1
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
** 终端警告/sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link
解决: 查看目录/usr/local/cuda-10.2/targets/x86_64-linux/lib/,其中有 .so.8文件和 .so.8.3.1文件,是同大小的,把 .8建为 .8.3.1的软链接 ——参考博客
sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8.3.1 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8
10. 添加新用户 ——参考(不必给sudo权限)
sudo useradd -r -m -s /bin/bash username sudo passwd username
参数含义如下:
-r:建立系统账号
-m:自动建立用户的登入目录,即/home/username
-s:指定用户登入后所使用的shell
su username # 切换到用户username
** 权限管理 ——参考博客
drwxr-xr-x 这样的字段中第一段 'd'表示是文件夹,第二段 'rwx' 为文件拥有者的权限,中间的 'r-x' 为文件所属组(group)的权限,最后一段 'r-x' 是其它用户的权限。
r、w、x分别表示读、写、执行,均有0或1两种状态,100即4为只有读权限,101即5为有读和执行。所以有
sudo chmod 700 path/of/directory
表示设置为只有拥有者有所有权限(如果少了x权限,也是无法进入目录的),其它用户无法访问
11. kill批量终止同名进程
killall -15 name # 注意name的唯一性,不要误伤其它进程(这个很可能误伤) kill -9 pid # 强制关闭某进程
下面是根据PID进行kill的方法 参考
ps -ef | grep stress | grep -v grep | cut -c 9-15 | xargs kill -9 # "ps -ef":查看所有进程。这时检索出的进程将作为下一条命令"grep stress"的输入(“|”是管道符)
# "grep stress" :得到所有含有关键字"stress"的进程 # "grep -v grep":在列出的进程中去除含有关键字"grep"的进程 # "cut -c 9-15":截取输入行的第9个字符到第15个字符,这正好是进程号PID # "xargs kill -9":xargs 命令把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令
12. iproute2使用
iproute2是用于替换旧的工具集net-tools的,在较新版本中没有默认安装net-tools,但是默认自带了iproute2工具集
图在文章末尾
13. 无法ping通域名(如 www.baidu.com),但可以ping通域名对应的IP(110.242.68.4)
解决:修改/etc/resolv.conf中不合适的项(vim中会标红),添加DNS服务器如下
sudo vim /etc/resolv.conf
nameserver 8.8.8.8 # google的域名解析服务器 nameserver 114.114.114.114 # 联通的域名解析服务器
/etc/resolv.conf只是给软链接,上面的修改在下次开机或重启后就将失效。要达到长期有效的结果,参考博客(或者参考博客2),可以做如下修改:
sudo vim /etc/resolvconf/resolv.conf.d/head,并添加DNS服务的配置:nameserver xx.xx.xx.xx 即可,一个ip一行。
14. 日志文件message的生成控制
Ubuntu默认不生成/var/log/message日志,要进行设置 ——参考
sudo apt install rsyslog # 安装工具 sudo vim /etc/rsyslog.d/50-default.conf # 修改配置文件 service rsyslog stop service rsyslog start # 重启syslog进程,过一会就可以看到message日志文件了
15. service状态查询、开启与关闭 ——参考
systemctl is-enabled servicename.service # 查询服务是否开机启动 systemctl enable *.service # 开机运行服务 systemctl disable *.service # 取消开机运行 systemctl start *.service #启动服务 systemctl stop *.service #停止服务 systemctl restart *.service #重启服务 systemctl reload *.service #重新加载服务配置文件 systemctl status *.service #查询服务运行状态
16. 添加国内源 ——参考
在 /etc/apt/sources.list 中添加如下条目,之后再 apt update 更新一下
# 添加阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
* 163云
17. 安装报错 —— opencv安装过程中出现libjasper-dev报错:unable to locate package libjasper-dev ——参考
18. 脚本执行
脚本grain.sh
#!/bin/bash # 在第一行开头的’#’不是注释,’#!’组成了一个特别的‘幻数’ cd /home/ # 和普通的shell命令一样 ls
Ubuntu中bash,sh,source都可以用于执行脚本。sh软链接到bash,比bash功能稍弱。 ——参考博客
bash grain.sh # 产生一个子进程shell,在子进程shell中执行脚本中的命令,执行完毕后返回当前父进程shell ==》 当前shell只能获得脚本执行的的输出,cd等命令的实质效果不会对当前shell生效 sh grain.sh ./grain.sh # 只有grain.sh有执行权限时,才可以这样执行
source grain.sh # 读入脚本命令,在当前shell执行脚本中的命令,当前shell会进入/home目录 . grain.sh # 同source
==》含有alias命令的脚本只能用source执行,本shell的alias命令不会复制到子进程shell