Python.Unix和Linux系统管理指--第二章(读书笔记)
1,__str__和__repr__的区别
In [1]: class DoubleRep(object):...: def __str__(self):...: return "Hi,I'm a __str__"...: def __repr__(self):...: return "Hi,I'm a __repr"...: ...:
In [2]: dr = DoubleRep()
In [3]: print dr
------> print(dr)
Hi,I'm a __str__
In [4]: dr
Out[5]: Hi,I'm a __repr
使用print输出对象dr时,__str__方法被调用
使用正式字符串表达式dr时,__repr__方法被调用
2,Ipython shell 提示符:In和Out
In [5]: type(In)
Out[5]: <class 'IPython.iplib.InputList'>
In [6]: type(Out)
Out[6]: <type 'dict'>
In [7]: print In
------> print(In)
['\n', u'class DoubleRep(object):\n def __str__(self):\n return "Hi,I\'m a __str__"\n]
In [8]: print Out
------> print(Out)
{4: Hi,I'm a __repr, 5: <class 'IPython.iplib.InputList'>, 6: <type 'dict'>}
In就是一个列表
Out就是一个字典
3,Tab自动完成
普通python shell需要开启Tab补齐功能
import rlcompleter, readline
readline.parse_and_bind('tab: complete')
Ipython中Tab不仅可以补齐命令,还能在载入模块时补齐模块名称
4,Ipython配置文件
安装完这个版本的Ipthon后在home目录下会自动创建.ipython目录
其中ipy_user_conf.py是个配置文件
5,魔力函数
以%开始,参数中不包含括号或者引号,例如,%cd mydir
lsmagic 列出所有魔力函数
%<Tab> 同样也是列出所有魔力函数
输入magic可以打开包含所有魔力函数的帮助文档
如何你已经知道某个魔力函数,可以这样来查看帮助 %page ?
%quickref 是一个快速参考文档,包含了对%magic函数的迷你总结
6,alias
即创建一个别名,能够在ipython中运行bash shell命令
In [1]: alias nss netstat -lptn
In [2]: nss
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2022/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1543/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1546/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1965/master
tcp6 0 0 :::22 :::* LISTEN 1543/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1546/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1965/master
In [3]: nss | grep 80 #别名后面可以查找某个关键字
如下再提供几个实例:
In [5]: alias achoo echo "|%l|" #%l就代表了字符串,输出""内所有字符
In [6]: achoo
||
In [7]: achoo these are args
|these are args|In [8]: alias achoo echo "%l"
In [9]: achoo these are args
these are argsIn [16]: alias achoo echo first:"|%s|", second:"|%s|" #%s代表字符串,有先后顺序
In [17]: achoo foo bar
first:|foo|, second:|bar|In [18]: achoo foo bar bam #输出字符串数量少了会报错,多了会继续输出在尾部
first:|foo|, second:|bar| bamIn [20]: store achoo #保存别名,下次进入ipthon还能继续使用
Alias stored: achoo (2, 'echo first:"|%s|", second:"|%s|"')
7,在ipython中另一个执行bash shell命令的方式:!
In [2]: !netstat -lptn
8,保存到变量中使用,输出稍有不同,形式是一个list-like对象
In [4]: l = !ps aux | grep $user | grep $process
In [5]: l
!!和!可以替换,只是使用!!无法保存结果到变量
9,rehash魔力函数会更新PATH路径中的别名表,别名表就是ipython映射别名到shell命令的表格
__IP是一个交互式shell对象,有一个叫alias_table的属性,这里就是映射表的地方
In [7]: __IP.alias_table
Out[7]:
{'achoo': (2, 'echo first:"|%s|", second:"|%s|"'),'cat': (0, 'cat'),'clear': (0, 'clear'),'cp': (0, 'cp -i'),'lc': (0, 'ls -F -o --color'),'ldir': (0, 'ls -F -o --color %l | grep /$'),'less': (0, 'less'),'lf': (0, 'ls -F -o --color %l | grep ^-'),'lk': (0, 'ls -F -o --color %l | grep ^l'),'ll': (0, 'ls -lF'),'ls': (0, 'ls -F'),'lx': (0, 'ls -F -o --color %l | grep ^-..x'),'mkdir': (0, 'mkdir'),'mv': (0, 'mv -i'),'rm': (0, 'rm -i'),'rmdir': (0, 'rmdir')}
它是字典类型:
In [8]: type(__IP.alias_table)
Out[8]: <type 'dict'>
它的初始长度:
In [9]: len(__IP.alias_table) Out[9]: 16
使用rehash后,映射就变大了
In [10]: rehash
In [11]: len(__IP.alias_table)
Out[11]: 2249
10,rehashx和上面的rehash功能差不多,对比rehash和rehashx差了哪几项
In [4]: from sets import Set
In [5]: rehashx_set = Set(__IP.alias_table.keys())
In [6]: rehash
In [7]: rehash_set = Set(__IP.alias_table.keys())
In [8]: rehash_set - rehashx_set
11,cd和bash中的cd命令功能一样
cd - 回到前一个目录
cd -q 静默输出:
In [31]: cd /tmp
/tmp
In [32]: cd -q /tmp
cd -b t 进入标签所指定的位置 b:bookmark,t:定义的标签
cd -3 数字代表目录历史列表的序号
12,bookmark
创建标签1:
In [1]: cd /tmp
/tmp
In [2]: bookmark t
创建标签2:
In [3]: bookmark t /tmp
列出标签:
In [4]: bookmark -l
Current bookmarks:
t -> /tmp
删除标签:
In [9]: bookmark -d alan #删除单个名称为alan的标签
In [22]: bookmark -r #一次性删除所有标签
13,dhist 显示访问目录的历史记录
cd -<Tab> 差不多的目录历史功能
In [24]: dhist
Directory history (kept in _dh)
0: /tmp
1: /tmp/VMwareDnD
2: /tmp
3: /root
4: /tmp
5: /root
6: /tmp
7: /root
8: /tmp
9: /root
10: /tmp
11: /tmp
12: /tmp
13: /tmp
14: /usr/local/bin
In [26]: dhist 5 #显示5条记录
Directory history (kept in _dh)
10: /tmp
11: /tmp
12: /tmp
13: /tmp
14: /usr/local/bin
In [27]: dhist 3 7 #显示一个范围,7不包含
Directory history (kept in _dh)
3: /root
4: /tmp
5: /root
6: /tmp
14,python和shell结合使用
In [29]: for i in range(10): ....: !date > ${i}.txt #输出日期到i个文件中
15,用ipython操作进程
调用grep()方法,查找'ipython'的进程条目
In [1]: ps = !ps aux
In [2]: ps.grep('ipython')
Out[2]: SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: root 8978 1.3 1.4 222792 14568 pts/0 S+ 13:17 0:00 /usr/bin/python /usr/bin/ipython
列出非root用户的进程
In [3]: ps.grep('root', prune=True)
16,判读文件还是目录
In [1]: import os
In [2]: file_list = !ls
In [3]: file_listIn [4]: file_list.grep(os.path.isfile)
Out[4]: SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: anaconda-ks.cfg
1: initial-setup-ks.cfg
2: ipython-0.8.2.tar.gzIn [5]: file_list.grep(os.path.isdir)
Out[5]: SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: ipython-0.8.2
1: 公共
2: 模板
3: 视频
4: 图片
5: 文档
6: 下载
17,筛选进程中的列,用到fields()方法
In [10]: ps = !ps aux
In [11]: ps.grep('root', prune=True).fields(0,1,8)
先筛选整个ps的第0和第1列,再过滤出postfix用户的第1列
In [12]: ps.fields(0,1).grep('postfix').fields(1)
Out[12]: SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: 2435
1: 8004
s属性将结果以字符串的形式输出
In [13]: ps.fields(0,1).grep('postfix').fields(1).s
Out[13]: '2435 8004'
18,查看系统内部环境变量
[root@study ~]# ipython -p sh
IPython 0.8.2 [on Py 2.7.5]
[~]|1> import os
[~]|2> os.environ['PATH']<2> '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
19,在结束位置和开始位置添加环境变量值
[~]|3> env PATH+=:/home/alanyao
PATH after append = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/alanyao
[~]|4> env PATH-=:/tmp
PATH after prepend = :/tmp/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/alanyao
ipython可以保证对PATH的修改即时生效
20,显示一下所有能够即时生效的环境变量
[~]|3> env -p<3> {'add': [('PATH', ':/home/alanyao')], 'pre': [('PATH', ':/tmp')], 'set': {}}
21,删除对PTAH即时生效的设置,如果这里用os.environ['PATH']检查,那些设置还在,重启ipython shell会删除的
[~]|6> env -d PATH
Forgot 'PATH' (for next session)
22,mglob命令返回一个python列表对象
递归查找所有.cfg文件
[~]|4> mglob rec:*.cfg<4> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: ./anaconda-ks.cfg
1: ./initial-setup-ks.cfg
2: ./.config/yelp/yelp.cfg
3: ./.local/share/telepathy/mission-control/accounts.cfg
4: ./.local/share/telepathy/mission-control/accounts-goa.cfg
显示所有目录
[~]|5> mglob dir:*<5> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: 桌面
1: 下载
2: 模板
3: 公共
4: 文档
5: 音乐
6: 图片
7: 视频
8: ipython-0.8.2
23,page作用和bash中less一样,分页显示
In [2]: p = !ps aux
In [3]: page p
24,pdef打印函数的声明部分
In [3]: def myfunc(a,b,c,d):...: '''return something'''...: return a,b,c,d...: In [4]: pdef myfuncmyfunc(a, b, c, d)
25,pdoc打印函数的注释部分
In [5]: pdoc myfunc
Class Docstring:return something
Calling Docstring:x.__call__(...) <==> x(...)
26,pfile打印出文件的内容
In [6]: import os
In [7]: pfile os
27,pinfo打印出相关信息
#比如:模块
In [1]: import some_module
In [2]: pinfo some_module
#比如:模块的类
In [3]: pinfo some_module.Foo
#也可以以这种形式
In [4]: f = some_module.Foo()
In [5]: pinfo f
#更可以
In [6]: ? f
In [7]: f ?
#也可以用??,提供详细的信息
In [9]: some_module.Foo ??
28,psource打印模块、模块中类和函数的源代码
In [1]: import some_other_module
In [5]: psource some_other_module
In [6]: psource some_other_module.FOO
In [7]: psource some_other_module.baz
29,psearch查找python对象
In [9]: psearch c*#或者可以用?代替
In [10]: c*?
psearch默认搜索路径是builtin和user#-e用来排除
In [12]: psearch -e builtin c*#搜索user命名空间中的整数对象
In [13]: psearch -e builtin * int#搜索user命名空间中的字符串
In [14]: psearch -e builtin * string
30,who函数返回交互定义的对象名称
In [17]: who
a aa b bb c cc
In [18]: who int
a b c
In [19]: who str
aa bb c
who_ls和who差不多,返回的是列表形式
In [20]: who_ls
Out[20]: ['a', 'aa', 'b', 'bb', 'c', 'cc']
由于who_ls返回名称列表,使用_variable访问名称列表,只针对最后一次输出
In [22]: who_ls int
Out[22]: ['a', 'b', 'c']In [23]: for n in _:....: print n....: ....:
a
b
c
whos打印更详细的列表
In [24]: whos
Variable Type Data/Info
----------------------------
a int 1
aa str one
b int 2
bb str two
c int 3
cc str three
n str c
31,历史功能
<Ctrl+r>搜索返回匹配输入的行
<Ctrl+a>回到行首
<Ctrl+e>回到行末
<Ctrl+h>等同于backupspace键
<Ctrl+p>历史记录行向后移动一行
hist显示历史命令,-n选项可以去掉前面的数字
-t选项似乎和直接使用hist输出功能一样
In [1]: foo = 1
In [2]: bar = 2
In [3]: bam = 3
In [4]: cd /tmp
/tmp
In [5]: hist
1: foo = 1
2: bar = 2
3: bam = 3
4: _ip.magic("cd /tmp")
5: _ip.magic("hist ")
-r选项能够准确显示输入的内容raw history
In [8]: hist -r
1: foo = 1
2: bar = 2
3: bam = 3
4: cd /tmp
5: hist
6: hist -n
7: hist -t
8: hist -r
-g是一个搜索的标志,可以配合标志进行搜索
In [11]: hist -g b
_代表“上次输出”
In [12]: foo = "foo_string"
In [13]: _
Out[13]: ''
In [14]: foo
Out[14]: 'foo_string'
In [15]: _
Out[15]: 'foo_string'
In [16]: a = _
In [17]: a
Out[17]: 'foo_string'
_加上一个out后的数字,可以直接返回那条out的内容
如下面的:_17
In [17]: a
Out[17]: 'foo_string'
In [18]: _17
Out[18]: 'foo_string'
我们也可以把_17赋值给变量
如:
In [19]: output = _17
In [20]: output
Out[20]: 'foo_string'
32,自动和快捷方式
macro宏 例1:
In [1]: dirlist = []
In [2]: for f in dirlist:...: print "working on",f...: print "done with",f...: print "moving %s to %s.done" %(f,f)...: print "*" * 40...: ...:
In [3]: macro procdir 2 #注意这里2是代表上面In[2]处
Macro `procdir` created. To execute, type its name (without quotes).
Macro contents:
for f in dirlist:print "working on",fprint "done with",fprint "moving %s to %s.done" %(f,f)print "*" * 40
In [4]: dirlist = ['a.txt','b.txt','c.txt']
In [5]: procdir
------> procdir()
working on a.txt
done with a.txt
moving a.txt to a.txt.done
****************************************
working on b.txt
done with b.txt
moving b.txt to b.txt.done
****************************************
working on c.txt
done with c.txt
moving c.txt to c.txt.done
****************************************
macr 例2:
In [3]: for x in range(1,10):...: print x...: ...:
1
2
3
4
5
6
7
8
9
In [4]: macro procdir 3
Macro `procdir` created. To execute, type its name (without quotes).
Macro contents:
for x in range(1,10):print x
In [5]: procdir
------> procdir()
1
2
3
4
5
6
7
8
9
33,store函数可以一直保存变量或者宏在ipython中,关闭ipython也无所谓
比如:
store x
这样变量x就一直保存在ipython中了
store -z 删除所有存储的变量,下次启动ipython后就没了
34,reset函数用来从交互命名空间中删除所有变量
In [1]: a = 1
In [2]: b = 2
In [3]: c = 3
In [4]: whos
Variable Type Data/Info
----------------------------
a int 1
b int 2
c int 3
In [5]: reset
Once deleted, variables cannot be recovered. Proceed (y/[n])?
In [6]: whos
Interactive namespace is empty.
35,rep 取回最近处理的结果
In [1]: def format_str(s):...: return "str(%s)" % s...:
In [2]: format_str(1)
Out[2]: 'str(1)'
In [3]: rep
In [4]: str(1)
36,rep还能重复运行多少行到多少行的代码
In [1]: i = 1
In [2]: i += 1
In [3]: print i
------> print(i)
2
In [4]: rep 2-3
lines [u'i += 1\nprint i\n']
------> print(i)
3
In [7]: rep 2-3
lines [u'i += 1\nprint i\n']
------> print(i)
4
37,rep还能重复包含字符的行
In [1]: a = 1
In [2]: b = 2
In [3]: c = 3
In [4]: rep a
In [5]: a = 1
转载于:https://blog.51cto.com/142623/1892233
Python.Unix和Linux系统管理指--第二章(读书笔记)相关推荐
- Python+UNIX和Linux系统管理指南
收藏自用 链接:Python+UNIX和Linux系统管理指南
- 电子数据取证第二章读书笔记
电子数据取证第二章读书笔记 1.计算机硬件知识 内存与外存: 内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据.它是外 ...
- 第一行代码Android第二章读书笔记
第一行代码Android第二章读书笔记 Activity 1.1 手动创建活动 1.2 Toast和Menu/销毁活动 Intent 2.1 显示/隐式 2.2 传递/返回数据 活动的生命周期 3.1 ...
- python去掉字符串最外侧的引号_疯狂Python讲义第二章读书笔记
本章讲解变量和简单类型 2.1 从注释讲起 单行注释使用#,#后面的代码被注释掉不会运行,如: # print(123) 注释掉后123不会输出.多行注释使用""" & ...
- Kotlin 基础语法(《第一行代码(第三版)》第二章读书笔记)
资源来自<第一行代码>(第三版)第二章 网络试读: https://www.ituring.com.cn/book/tupubarticle/30209 以下为笔记 转存失败重新上传取消正 ...
- 《算法帝国》第一章第二章读书笔记
heeeeeeeeeeeeeeeeeeeeello! 好像有半个月都没好好写笔记了,经历了两次面试,一次败在单面,一次败在群面,哈啊-说明还完全有待努力! 稍微研究了一下,这本书好像并不需要什么代码记 ...
- 被讨厌的勇气:第二章读书笔记
本笔记为岸见一郎先生的著作<被讨厌的勇气>部分文字的摘抄. 第二夜 一切烦恼都来自人际关系 为什么讨厌自己? 哲人:你认为对她来说最害怕的事情.最想逃避的事情是什么呢?当然是被自己喜欢的男 ...
- C primer plus第二章读书笔记3
进一步使用C 以下是在C中如何使用C计算,运算符的引入使得这个过程变得简单 int main(void) {int feet, fathoms;fathoms = 2;feet = 6 * fatho ...
- 《Unix编程艺术》 八九章读书笔记
8 微型语言: 寻找歌唱的乐符 从好的符号体味出的巧妙和启发,就算身边的老师也不过如此. 对软件错误模式进行大量的研究得出的一个最一致的结论时,程序员每百行代码的出错率和所使用的编程语言在很大程度上无 ...
最新文章
- 如何在国内上medium_在Medium上写作的风格指南
- linux虚拟机镜像_无树莓派硬件体验:虚拟机安装 Raspberry Pi Desktop 操作系统
- [转]SVN更新的时候前面字母的意思(U、G、A、R、C)
- 关于wpf窗体中Allowtransparent和WindowsFormsHost的纠纷
- 下载:Visual Studio 2012 RC候选版
- 思考ANDROID架构(4):HOW-TO, 如何从API洞悉软件的话语权
- 发掘VS2005 SP1 (一)
- mysql 索引的简单使用
- BGD-py实现学习【1】[转载]
- matlab oj,Matlab习题(1)
- linux 位置参数数组,荐Linux中的shell编程Ⅱ——位置参数、数组、date和cal
- Windows游戏编程大师技巧第二版学习笔记之第一章
- 使用MAKER进行全基因组基因注释-基础篇
- 测试用例的设计方法:等价类划分法
- “RFID射频识别技术”简介
- 职场上个人的核心技术_五年老员工被空降领导要求交出核心技术,拒绝后,隔天上班懵了...
- prometheus + grafana 对 springboot 项目进行监控
- dcdc模块降额设计_爱默生网络能源PCB设计规范
- 如何安装Java JDK
- cocos2dx+VS2019环境配置
热门文章
- sklearn学习之:(7)sklearn 自动生成数据集用法:make_hastie_10_2, make_circles, make_moons
- 装酷神器让你的手机一秒穿越到 Windows 电脑桌面,神秘!
- 运营商大数据实时获客
- 基于springboot+Vue的鲜花销售商城网站
- 学python人工智能电脑要什么配置_没有基础能不能学人工智能 首选语言是Python吗...
- ModuleNotFoundError: No module named ‘distutils.cmd‘ 解决
- AT1225 稻草人(cdq分治+二分)
- x210项目重新回顾之七uboot_2013.10之nfs方式启动内核
- 2021年度十大热门ER图(实体关系图)
- 电子负载和电池容量测试仪概念误区