730-1

目录

  • 1 Linux用户配置文件和密码配置文件
    • 1.1 /etc/passwd :用户配置文件--记录用户信息
    • 1.2 /etc/shadow :密码配置文件--存放用户密码
    • 1.3 /etc/group :组信息文件
    • 1.4 /etc/gshadow :组密码文件
  • 2 vim编辑器使用
  • 3 github入门使用
  • 4 tensorflow python 函数
    • 4.1 tf.matmul() 和tf.multiply() 的区别
    • 4.2 使用Tensorflow或Keras时对GPU内存限制
    • 4.3 Python标准库系列之tarfile模块??
    • 4.4 urllib.request.urlretrieve()函数
    • 4.5 sys.stdout和print的区别--进度条设置??
    • 4.6 tqdm--进度条设置
  • 5 tensorflow 官网是个好东西-cifar10

1 Linux用户配置文件和密码配置文件

参考:https://www.cnblogs.com/zhouyixuan/p/7460867.html

1.1 /etc/passwd :用户配置文件–记录用户信息

[root@localhost ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin

重要的是:
0的含义;用户的shell是什么--内核解释器。

每一行都由 “ :” 分割为七段:
1.用户名:用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法
2.存放的就是该账号的口令,
3.这个数字代表用户标识号,也叫做uid ,系统识别用户身份就是通过这个数字来的,0就是root.
4.表示组标识号,也叫做gid
5.注释说明,该字段没有实际意义
6.用户的家目录
7.shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell

1.2 /etc/shadow :密码配置文件–存放用户密码

[root@localhost ~]# cat /etc/shadow
root:$6$0o5J/rTgsl8rm70H$OiVM7tvygO0xooScymICebjjzDaKzYiz1YOWFHLGmzLPHx2osUh33ApqlwFgEI.RWRXicz4KKktBeyw.pElpw.::0:99999:7:::
chrony:!!:17394::::::

重要的是:12字段,别的不重要

由“:”分割为九段:
1. 用户名,跟/etc/passwd对应
2. 用户密码,这个才是该账号的真正的密码
3. 上次更改密码的日期,这个数字是这样计算得来的,距离197011日到上次更改密码的日期,例如上次更改密码的日期为201211日,则这个值就是 ‘365 x (2012-1970)+(2012-1970)/4 + 1 = 15341. 因为如果是闰年,则有3664. 要过多少天才可以更改密码,默认是0,即不限制
5. 密码多少天后到期
6. 密码到期前的警告期限
7. 账号失效期限
8. 账号的生命周期,是按距离197011日多少天算的
9. 作为保留用的,没有什么意义

1.3 /etc/group :组信息文件

第一字段:组名
第二字段:组密码标志 
第三字段:GID
第四字段:组中附加用户

1.4 /etc/gshadow :组密码文件

第一字段:组名
第二字段:组密码 
第三字段:组管理员用户名 
第四字段:组中附加用户

2 vim编辑器使用

3 github入门使用

4 tensorflow python 函数

4.1 tf.matmul() 和tf.multiply() 的区别

1.tf.multiply()两个矩阵中对应元素各自相乘
格式: tf.multiply(x, y, name=None) 

2.tf.matmul()将矩阵a乘以矩阵b,生成a * b。
格式: tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 

4.2 使用Tensorflow或Keras时对GPU内存限制

参考:https://www.jianshu.com/p/d1900ec997d8
官网:https://www.tensorflow.org/guide/using_gpu
跑Keras 或者 Tensorflow时默认占满所有GPU内存,这时如果想再开一个进程,或者别人想开一个进程都挤不上来,所以必须限制GPU内存

查看GPU使用情况

watch -n 1 nvidia-smi每秒刷新
nvidia-smi
visible_device_list指定使用哪块显卡
per_process_gpu_memory_fraction分配到的内存占总内存量的比例
allow_growth根据运行时的需要来分配GPU内存,刚开始分配很少内存,随着Session开始运行并需要更多GPU内存时会自动扩展,但后续不会释放内存
per_process_gpu_memory_fraction与allow_growth两种方法二选一即可。一般用allow_growth即可,如果你能准确预估你的程序需要多大显存,推荐per_process_gpu_memory_fraction

设置sess:
# 将下面代码放在.py文件开头
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.visible_device_list = '0'
# config.gpu_options.per_process_gpu_memory_fraction = 0.2
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
# from keras import backend as K
# K.set_session(sess)
指定显卡的另外两种方法

配进环境变量
export CUDA_VISIBLE_DEVICES=0

使用os
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'

4.3 Python标准库系列之tarfile模块??

参考:https://www.jianshu.com/p/5609d67d8ab2
官网:https://docs.python.org/3.5/library/tarfile.html

4.4 urllib.request.urlretrieve()函数

参考:https://blog.csdn.net/pursuit_zhangyu/article/details/80556275

描述:urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

函数说明:
将URL表示的网络对象复制到本地文件。如果URL指向本地文件,则对象将不会被复制,除非提供文件名。返回一个元组()(filename,header),其中filename是可以找到对象的本地文件名,header是urlopen()返回的对象的info()方法(用于远程对象)第二个参数(如果存在)指定要复制到的文件位置(如果没有,该位置将是一个生成名称的tempfile)。
第三个参数,如果存在,则是一个回调函数,它将在建立网络连接时调用一次,并且在此后每个块读取后调用一次。这个回调函数将传递三个参数;到目前为止传输的块计数,以字节为单位的块大小,以及文件的总大小。第三个参数可能是-1,在旧的FTP服务器上,它不返回文件大小以响应检索请求。

参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

例子:

import os
from six.moves import urllib
import sys

DATA_URL = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
filename = DATA_URL.split('/')[-1]

def _progress(block_num, block_size, total_size):
    '''回调函数
       @block_num: 已经下载的数据块
       @block_size: 数据块的大小
       @total_size: 远程文件的大小
    '''
    sys.stdout.write('\r>> Downloading %s %.1f%%' % (filename,
                     float(block_num * block_size) / float(total_size) * 100.0))
    sys.stdout.flush()

filepath, _ = urllib.request.urlretrieve(DATA_URL, filename, _progress)
print()

输出:
Downloading Python-2.7.5.tar.bz2 100.0%

例子中的sys.stdout.write和print差不多是输出的意思,sys.stdout.flush()函数的作用是刷新输出

4.5 sys.stdout和print的区别–进度条设置??

参考:https://blog.csdn.net/MrR1ght/article/details/80803816

1.sys.stdout的形式就是print的一种默认输出格式,等于print “%VALUE%”
print函数是对sys.stdout的高级封装,看下print函数的解释

Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

print是默认调用了sys.stdout.write()方法将输出打印到控制台
print 也可通过file参数将输出打印到其他文件中

f = open('test.txt','a')
print('this is a test',file=f)

2.sys.stdout.write()输出不会自动换行,没有end,可用转义字符自行控制
/n 换行
/r 回车到本行首,可刷新输出
如用sys.stdout.write() 和\r实现自定义进度条

from tqdm import tqdm
import time
import sys
 
for i in tqdm(range(100)):
    time.sleep(.1)
for i in range(100):
    a = (i+1)/5
    b = 20-a
    #sys.stdout.write('\r>>convert image %d/%d'%(i,b))
    sys.stdout.write('\r|%s%s|%d%%'%(a*'▇',b*' ',i+1))
    sys.stdout.flush()
    time.sleep(.1)

sys.stdout.flush()强制刷新缓冲区:

缓冲区的刷新方式:
    1.flush()刷新缓存区
    2.缓冲区满时,自动刷新
    3.文件关闭或者是程序结束自动刷新。

写出漂亮的进度条模块tqdm:

from tqdm import tqdm 
import time
for i in tqdm(range(10000)):  
    time.sleep(0.01) 

运行结果如下:
在这里插入图片描述

4.6 tqdm–进度条设置

参考:https://www.jianshu.com/p/21cf48be6bf6
https://blog.csdn.net/langb2014/article/details/54798823?locationnum=8&fps=1

5 tensorflow 官网是个好东西-cifar10

cifar10是一个好例子,演示了如何使用多个 GPU 进行训练:https://www.tensorflow.org/tutorials/images/deep_cnn

你可能感兴趣的:(linux)