Linux相关教程(经验版)

110 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、参考资料

Linux官方教程

二、重要技巧

2.1 Ubuntu清理硬盘空间

Ubuntu系统释放磁盘空间的7种简单方法

2.2 ubuntu系统U盘只读

  1. 查看系统日志

    tail -f /var/log/syslog
    
  2. 查看U盘所在的文件系统

    df -h
    
  3. 卸载U盘

    umount /media/sinkdream/DA18-EBFA 
    
  4. 修复U盘文件系统

    sudo dosfsck -v -a /dev/sda1
    

2.3 /home扩容

使用gparted工具,给 /home 分区扩容即可

2.4 硬盘测速

固态硬盘的速度

yoyo@ubuntu:~$ sudo hdparm -t /dev/loop0

/dev/loop0:
 Timing buffered disk reads: 1476 MB in  3.01 seconds = 489.69 MB/sec

机械硬盘的速度

yoyo@ubuntu:~$ sudo hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 338 MB in  3.22 seconds = 104.99 MB/sec

2.5 缺少 libxxx.solibxxx.so.1 库文件

/usr/bin/ld: cannot find -lxxx 的解决办法

编译c/c++程序的时候报错。

/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find -lltdl
/usr/bin/ld: cannot find -lXtst
`lxxx` means `lib + lib-name + .so`

lc means libc.so, 
lltdl means libltdl.so, 
lXtst means libXts.so

说明:

-lxxx 表示 lib + lib-name + .so。例如,-lhdf5 表示 libhdf5.so

/usr/bin/ld: cannot find -lhdf5

# 这表示找不到库文件 libhdf5.so
# 若是其它库文件,则是 cannot find -lxxx ,其中 xxx 是库文件的名字。

2.5.1 查找 .so 文件

ld -lxxx --verbose

gcc -lxxx --verbose
locate libiconv.so

2.5.2 情况一

能找到 .so 文件。

  1. 查找 .so 文件

    locate libiconv.so
    
    $ locate libiconv.so
    /home/user/anaconda3/lib/libiconv.so   # <-- right here
    /home/user/anaconda3/lib/libiconv.so.2
    /home/user/anaconda3/lib/libiconv.so.2.5.1
    /home/user/anaconda3/lib/preloadable_libiconv.so
    /home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so
    /home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so.2
    /home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so.2.5.1
    
  2. 创建软连接

    Link it to the right place, usually it is /lib64 or /usr/lib64

    $ sudo ln -s /home/user/anaconda3/lib/libiconv.so /usr/lib64/
    

2.5.3 情况二

能找到 .so 文件。

ln -s libasound.so.2 libasound.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1 /usr/lib/libboost_filesystem.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.65.1 /usr/lib/libboost_system.so

2.5.4 情况三

需要用户编译生成的 .so 文件。

When you compile your program you must supply the path to the library; in g++ use the -L option:

编译c/c++程序,需要添加 -L 选项,才能生成 lib 链接库。

# c程序
g++ -L/path/foo/bar myprogram.cc -lxxx -o myprogram
# c++程序
g++ -L/home/user/myDir myprogram.cpp -lxxx -lxxx -o myprogram

2.5.5 情况四

如果找不到 .so 文件,则下载安装。

  • google下载;
  • 百度下载;
sudo apt-get install libfoo-dev
# 如果apt-get安装失败,先添加apt源再安装
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

2.5.6 其他情况

如果以上的情况都无法解决,按照以下方法:

  1. 更新 /etc/ld.so.conf 配置文件。将库文件所在的路径加入到 /etc/ld.so.conf 尾部,并使之生效:

    #libhdf5.so 在路径 /opt/biosoft/hdf5-1.8.15-patch1/lib/ 下,将该路径加添加到配置文件中
    $ sudo echo '/opt/biosoft/hdf5-1.8.15-patch1/lib/' >> /etc/ld.so.conf
    
    # 使配置生效
    $ sudo ldconfig
    
  2. 修改环境变量

    # 添加环境变量 LD_LIBRARY_PATH
    $ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/biosoft/hdf5-1.8.15-patch1/lib/' >> ~/.bashrc
    
    # 使配置生效
    $ source ~/.bashrc
    
    # 若修改环境变量 LD_LIBRARY_PATH 不奏效,则修改变量 LIBRARY_PATH
    $ export LIBRARY_PATH=/opt/biosoft/hdf5-1.8.15-patch1/lib/:$LIBRARY_PATH
    

2.6 shell日志

cmd 1 > info.log 2 > error.log &
1 表示标准输出;
2 表示错误输出;
> 表示重定向;
& 表示后台运行;

如果想将2中的日志和1中的日志写入同一个文件中,则命令如下:

cmd 1 > info.log 2 > &1 &

其中2 > &1的&符号表示错误输出重定向到标准输出。

2.7 nohup

2.7.1 相关介绍

nohup,即 no hang up 的缩写,是指不间断,不挂断,不断地运行。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。

默认情况下,原程序的的标准输出被重定向到当前目录下的 nohup.out 文件,起到了log的作用。

2.7.2 2>&1

以python环境不间断的运行my.py脚本,并且将脚本输出的错误和标准输出都重定向到my.log中(>>意为追加,如果用>会让其中的内容清空)。

nohup python my.py 1>> /usr/local/python/xxf/my.log 2>&1 &

等价于

nohup python my.py 1>> /usr/local/python/xxf/my.log & 
nohup python my.py 2>> /usr/local/python/xxf/my.log &
  • 0 表示stdin标准输入,用户键盘输入的内容;
  • 1 表示stdout标准输出,输出到显示屏的内容;
  • 2 表示stderr标准错误,报错内容;
  • 2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中;
  • & 表示后台运行;
# 将错误和标准输出全部丢入/dev/null中,全部销毁。
nohup tomcat.sh 1 > /dev/null 2>&1 &

关闭输出缓冲

默认情况下,python的输出有缓冲,导致不能马上输出到nohup.out。

-u 参数,使得python不启用缓冲。

nohup python -u my.py 1> /usr/local/python/xxf/my.log 2>&1 &

2.7.3 nohup挂起运行

在nohup执行成功后直接点击关闭程序按钮关闭终端,会断掉该命令对应的session,导致nohup对应的进程被通知一起shutdown。所以在使用nohup命令后台运行命令之后,需要==使用 exit 正常退出当前账户,这样才能保证命令一直在后台运行。==

遇到的问题:
在使用xshell执行完nohup命令后,直接关闭窗口后并没有后台挂起运行。

解决的方法:
在xshell执行完nohup命令后,需要再执行一次exit才能正常使用

2.7.4 通过python 执行 nohup 不生效的解决

三、常用指令

# 查看内存
free -m

# 查看端口占用
lsof -i :5001

# 查找进程
ps -aux | grep xjserver

# 查找进程
ps -ef | grep xjserver

# 杀死进程
kill -9 PID

# 杀进程
killall -9 xjserver

# 启动服务,打印详细信息
./xjserver -l4

# 查看当前文件夹大小
du -sh 

# 查看指定文件大小
du -sk filename 
df -h

# 下载服务器文件
scp -r 用户名@服务器IP地址:服务器文件路径 本地路径

# 上传文件到服务器
scp local_file remote_username@remote_ip:remote_file

# nohup防止进程退出
在指令前加上 nohup 指令

四、可能出现的问题

4.1 缺少symbolic link软链接

/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link
错误原因:
缺少软连接

解决办法:
创建软连接

sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.7.0.5 /usr/local/cuda/lib64/libcudnn.so.7

4.2 找不到libxxx

unable to locate libjasper-dev
# 解决办法:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" 
sudo apt update 
sudo apt install libjasper1 libjasper-dev