linux基础知识之常用命令[深度学习版](二)

Linux系统的文件

(一) 编辑器中的行号

  1. 设置行号:在vi或者vim编辑器的命令模式下,输入set number,按下回车就显示行号了
:set number
  1. 关闭行号:在vi或者vim编辑器的命令模式下,输入set nonumber,按下回车就关闭行号了。
:set number
  1. 永久性的显示行号:在/etc/vimrc(/etc/virc)文件中修改一下:
#vim /etc/vumrc

可以看到都是一些配置vim环境的数据,我们只需要在行首或者行尾新建一行然后写入:set number ,接下来,输入esc退出,通过:wq保存,即可退出vim。后续的编辑器就会显示行号了。

(二)文件内容搜索

  1. 在没有打开文件之前,可以用"cat <文件名> | grep <关键字>"
  2. 打开的话,可以输入"/<关键字>"查找

(三)查看 文件/文件夹 的修改时间

  1. 使用stat filename 命令来查看文件
[ashan@localhost code]$ stat Test02/
  File: ‘Test02/’
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 805h/2053d	Inode: 12345678    Links: 4
Access: (0775/drwxrwxr-x)  Uid: ( 1037/ashan)   Gid: ( 1038/ashan)
Access: 2019-04-24 16:07:13.890862137 +0800
Modify: 2019-04-24 14:50:21.439702961 +0800
Change: 2019-04-24 14:50:21.439702961 +0800
 Birth: -

解释一下:

  • Access简写为atime,表示文件访问时间,当文件内容被访问时,更新这个时间。
  • Modify简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  • Change简写为ctime,表示文件的状态时间,当文件的状态权限被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
  • File:显示文件名
  • Size:显示文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)
  • Device:设备编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid、Uid:文件所有权的Gid和Uid

python中的库

(一)查看python中库的版本及其安装路径

举个例子,查看tensorflow的版本及其安装路径:

'''进入命令模式'''
python #进入python环境
import tensorflow as tf
tf.__version__ #查看tensorflow的版本
tf.__path__ #查看tensorflow的安装路径

磁盘空间(df、du)

(一)查看磁盘空间使用情况

1. 举个例子

#在linux命令行下输入:
df -hl
#显示格式
文件系统		容量		已用		可用		已用%		挂载点
FileSystem	Size	Used	Avail	Use%		Mounted on
/dev/hda2              45G   19G   24G 44% /
/dev/hda1             494M   19M 450M   4% /boot
/dev/hda6             4.9G 2.2G 2.5G 47% /home
/dev/hda5             9.7G 2.9G 6.4G 31% /opt
none                 1009M     0 1009M   0% /dev/shm
/dev/hdb2              75G   75G     0 100% /

以上面的输出为例,表示的意思为:
HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用0G,因此利用率是100%,被挂载到根分区目录上(/)。
可以通过df --helpdu --help查看更多功能,下面是一些常用命令。

2. 常用命令

df -hl #查看磁盘剩余空间
df -h #查看每个根路径的分区大小
du -sh [目录名] #返回该目录的大小
du -sm [文件夹] #返回该文件夹总M数
du -h [目录名] #查看指定文件夹下的所有文件大小(包含子文件夹)
sudo fdisk -l #查看硬盘的分区
sudo hdparm -i /dev/hda #查看IDE硬盘信息
#查看STAT硬盘信息
sudo hdparm -I /dev/sda 
sudo apt-get install blktool
sudo blktool /dev/sda id
sync fuser -km /media/usbdisk #u盘无法卸载

3. df和du的区别

  • df:列出文件系统的整体磁盘使用量,由于df主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要在Superblock内的信息,所以这个命令显示结果的速度非常快速。
df [-ahikHTm] [目录或文件名]
#选项与参数
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示个文件系统
-h:以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示
-H:以M=1000K取代M=1024K的进位方式
-T:连同该分区的文件系统名称(例如ext3)也列出
-i:不用硬盘容量,而以inodes的数量来显示
  • du:评估文件系统的磁盘使用量(常用在估计目录所占磁盘容量),du这个命令其实会直接到文件系统内去搜寻所有的文件数据。
du [-ahskm] 文件或目录名称
选项与参数:
-a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已
-h:以人们较易读的容量格式(G/M)显示
-s:列出总量而已,而不列出每个各别的目录占用容量
-S:不包括子目录下的总计,与-s有点差别
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示个文件系统

GPU

(一)查看GPU的使用情况

1. novidia-smi: 自带了一个nvidia-smi的命令行工具,会显示显存使用情况:

[ashan@localhost Test02]$ nvidia-smi
Wed Apr 24 17:37:37 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26                 Driver Version: 384.81                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M4            Off  | 0000:05:00.0     Off |                    0 |
| N/A   28C    P8     7W /  75W |     11MiB /  3785MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

这种只能输出一次结果。
2. 实时观测gpu利用情况
如果需要实时观察GPU的利用情况,就需要一个定时输出功能,这时候就需要用到watch命令,来周期性地执行nvidia-smi命令。
最常用的参数是-n,指定后面是每多少秒执行一次命令。

$ watch [options] command
watch -n 1 nvidia-smi #每隔1s显示GPU所有情况

(二)tensorflow中指定CPU/GPU

在一套标准的系统上通常有多个计算设备, TensorFlow 支持 CPU 和 GPU 这两种设备,我们用指定字符串 strings 来标识这些设备。比如:

  • “/cpu:0”: 机器中的 CPU
  • “/gpu:0”: 机器中的 GPU, 如果你有一个的话.
  • “/gpu:1”: 机器中的第二个 GPU, 以此类推…

如果一个 TensorFlow 的 operation 中兼有 CPU 和 GPU 的实现, 当这个算子被指派设备时, GPU 有优先权. 比如matmul中 CPU 和 GPU kernel 函数都存在. 那么在 cpu:0 和 gpu:0 中, matmul operation 会被指派给 gpu:0 .

使用GPUs

1. 记录设备指派情况
为了获取你的operations和Tensor被指派到哪个设备上运行,用log_device_placement新建一个session,并设置为True。

#新建一个graph
import tensorflow as tf
a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3],name='a')
b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2],name='b')
c = tf.matmul(a,b)
#新建session with log_device_placement并设置为True
sess = tf.Session(config=tf.ConfigProto(log_device_placement=Ture))
#运行这个op
print(sess.run(c))

可以看到以下输出:

MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
2019-04-26 09:18:19.217753: I tensorflow/core/common_runtime/placer.cc:927] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-04-26 09:18:19.217854: I tensorflow/core/common_runtime/placer.cc:927] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-04-26 09:18:19.217908: I tensorflow/core/common_runtime/placer.cc:927] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]
 [49. 64.]]

2. 设置tensorflow使用的显存大小
默认tensorflow是使用GPU尽可能多的显存,可以通过下面的方式,来设置使用的GPU显存:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
sess = tf.Session(config=tf.ConfigProto(gpu_options = gpu_options))

上面分配给tensorflow的GPU显存大小为GPU实际显存*0.7
3.手工指派设备
【方法一】 如果你不想使用系统来为operation指派设备,而是手工指派设备,你可以用with tf.device创建一个设备环境,这个环境下的operation都统一运行在环境指定的设备上。

#新建一个graph
import tensorflow as tf
with tf.device('/cpu:0')
     a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3],name='a')
     b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2],name='b')
c = tf.matmul(a,b)
#新建session with log_device_placement并设置为True
sess = tf.Session(config = tf.ConfigProto(log_device_placement=True))
#运行这个op
print(sess.run(c))

你会发现现在a和b操作都被指派给了cpu:0
【方法二】 在python代码中设置使用的GPU,可以使用下面的代码:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

4. 在多GPU系统里使用单一GPU
如果你的系统里有多个GPU,那么ID最小的GPU会默认使用。如果你想用其他的GPU,可以用下面的方法显式的声明你的偏好。

#新建一个graph
import tensorflow as tf
with tf.device('/gpu:2'):
    a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3],name='a')
    b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2],name='b')
c = tf.matmul(a,b)
#新建session with log_device_placement并设置为True
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
#运行这个op
print(sess.run(c))

如果你指定的设备不存在,你会收到InvalidArgumentError错误提示:

为了避免你指定的设备不存在这种情况,你可以在创建的session里把参数allow_soft_placement设置为True,这样tensorflow会自动选择一个存在并且支持的设备来运行operation

#新建一个graph
import tensorflow as tf
with tf.device('/gpu:2'):
    a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3],name='a')
    b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2],name='b')
c =  tf.matmul(a,b)
sess = tf.Session(config =  tf.ConfigProto(allow_soft_placement=True,log_device_placement = True))
#运行这个op
print(sess.run(c))

5. 使用多个GPU
如果你想要让Tensorflow在多个GPU上运行,你可以建立multi-tower结构,在这个结构里每个tower分别被指配给不同的GPU运行,比如:

#新建一个graph
c = []
for d in ['/gpu:2','/gpu:3']:
    with tf.device(d):
        a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3])
        b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2])
        c.append(tf.matmul(a,b))
with tf.device('/cpu:0'):
    sum = tf.add_n(c)
#新建session with log_device_placement并设置为True
sess = tf.Session(config = tf.ConfigProto(log_device_placement = True))
#运行这个op
print(sess.run(sum))

OS.ENVIRON介绍

1. environ介绍
environ是一个字符串所对应环境的映像对象。例如:environ[‘HOME’]就代表了当前这个用户的主目录。

import os
os.environ.keys()#查看系统中的环境变量

2. key字段

  • windows:
    os.environ[‘HOMEPATH’]:当前用户主目录
    os.environ[‘TEMP’]:临时目录路径
    os.environ[‘PATHEXT’]:可执行文件
    os.environ[‘SYSTEMROOT’]:系统主目录
    os.environ[‘LOGONSERVER’]:机器名
    os.environ[‘PROMPT’]:设置提示符
  • linux:
    os.environ[‘USER’]:当前使用用户
    os.environ[‘LC_COLLATE’]:路径扩展的结果排序时的字母顺序
    os.environ[‘SHELL’]:使用shell类型
    os.environ[‘LAN’]:使用的语言
    os.environ[‘SSH_AUTH_SOCK’]:ssh的执行路径

【参考资料】
2. https://www.cnblogs.com/opsprobe/p/9156973.html
3. https://www.cnblogs.com/Lynn0101/p/10244543.html
4. https://www.cnblogs.com/zhuiluoyu/p/6598928.html
5. https://blog.csdn.net/pacosonswjtu/article/details/80026151
6. https://zhidao.baidu.com/question/150884670.html
7. https://jingyan.baidu.com/article/636f38bb8c1838d6b84610d0.html
8. https://www.cnblogs.com/Baron-Lu/p/6919774.html
9. https://blog.csdn.net/u010272709/article/details/81839218
10. https://blog.csdn.net/u014381600/article/details/72911262
11. https://blog.csdn.net/maoyongfan3/article/details/45060741

猜你喜欢

转载自blog.csdn.net/sysstc/article/details/89488881
今日推荐