linux基础知识之常用命令
Linux系统的文件
(一) 编辑器中的行号
- 设置行号:在vi或者vim编辑器的命令模式下,输入set number,按下回车就显示行号了
:set number
- 关闭行号:在vi或者vim编辑器的命令模式下,输入set nonumber,按下回车就关闭行号了。
:set number
- 永久性的显示行号:在/etc/vimrc(/etc/virc)文件中修改一下:
#vim /etc/vumrc
可以看到都是一些配置vim环境的数据,我们只需要在行首或者行尾新建一行然后写入:set number ,接下来,输入esc退出,通过:wq保存,即可退出vim。后续的编辑器就会显示行号了。
(二)文件内容搜索
- 在没有打开文件之前,可以用"cat <文件名> | grep <关键字>"
- 打开的话,可以输入"/<关键字>"查找
(三)查看 文件/文件夹 的修改时间
- 使用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 --help或du --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