首页 > 技术文章 > Ubuntu使用Tips集锦

grainrain 2020-06-20 16:54 原文

 *自定义终端字体颜色显示简书

 

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

 

*建立软链接

sudo ln -s full_source_path /usr/lib # 注意源路径写完整的,不以“/”结尾
sudo ldconfig               # 使生效

ll /usr/lib                # 查看相关链接
sudo rm -rf /usr/lib/xxx        # 删除某个链接,不影响源目录
sudo rm -rf /usr/lib/xxx/        # 删除源目录下的文件,链接不受影响
** 即 target是软链接,target/ 是链接指向的内容

** Ubuntu中的链接的特点  ——参考

  链接分为软链接和硬链接,都是使用ln命令生成的,,无论是软链接还是硬链接,文件都保持同步变化

软链接会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间;

硬链接会在你选定的位置上生成一个和源文件大小相同的文件。

ln [-s] source target    # 在target出建立一个source的链接;软链接需要-s参数,硬链接不用

## source和target必须为绝对路径,命令才能有效
rm -rf path/to/target    # 删除软链接,注意:target不能以斜杠'/'结尾  ——参考

 

 ** 终端警告/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

 

 

图一与详细命令参考,图二参考

推荐阅读