常用技术
linux
目录与文件操作
-
touch:创建空白文件
-
ls:显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。
列出目前工作目录下所有名称是 a 开头的档案,愈新的排愈后面 : ls -ltr a*
将 /bin 目录以下所有目录及档案详细资料列出 : ls -lR /tmp
按照修改时间倒序排序,即最新的在最上面展示:ls –lt
-
pwd:显示当前工作目录
常用方式及使用技巧:
手动打补丁上传补丁文件时通常先在服务端找到该文件,然后使用pwd将路径输出并且拷贝,然后将路径粘贴到ftp工具的路径栏中。
或者,需要把文件所在路径发给别人。 -
mkdir:创建目录
参数:-p 确保目录名称存在,不存在的就建一个。 -
rmdir:删除空目录
参数:-p 删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。 -
rm:删除文件或目录。
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件。
参数:
-f 强制删除文件或目录。
-r 递归处理,将指定目录下的所有文件及子目录一并处理。
注意:在使用rm –rf * 命令前请使用pwd确定当前目录,以免发生误删除。 -
head:看一个文件的头几行
参数:-n :后面接数字,代表显示几行的意思
-
more:一页一页的显示文件的内容
使用方式:
空格键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字符串 :代表在这个显示的内容当中,向下搜寻『字符串』;
:f :立刻显示出文件名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该档案内容。
常用方式及使用技巧:ifconfig –a | more -
less:less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
使用方式:
空格键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字符串 :向下搜寻『字符串』的功能;
?字符串 :向上搜寻『字符串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q :离开 less 这个程序; -
tail:看一个文件末尾n行
参数:-f,动态输出 -
cat:查看文件
-
cp :复制文件或目录。
常用方式及使用技巧:cp server.xml ../bak,将当前目录下的server.xml文件复制到上一层的bak目录 -
mv:移动或更名现有的文件或目录。
常用方式及使用技巧:mv 3.txt ../test2,将当前目录下的3.txt文件移动到上一层的test2目录 -
chmod:变更文件或目录的权限。
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
以下文件没有执行权限:
执行以下命令:chmod o+x 3.txt
执行以下命令:chmod a+w temp,为所有人加上temp目录的写入权限
-
find:查找文件或目录。
-
grep:查找文件里符合条件的字符串。
一般配合管道使用,打开一个文件后在其中进行搜索。 -
source:在当前bash环境下读取并执行FileName中的命令。
在编译核心时,常常要反复输入一长串命令,如
make mrproper
make menuconfig
make dep
make clean
make bzImage
这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。
用source命令可以办到这一点。它的作用就是把一个文件的内容当成是shell来执行。
make mrproper &&
make menuconfig &&
make dep &&
make clean &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImge /boot/vmlinuz_new &&
cp System.map /boot &&
vi /etc/lilo.conf &&
lilo -v
文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20下输入source make_command 就行了。这个文件也完全可以做成脚本,只需稍加改动即可。
- tar:用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
参数:
-c或--create 建立新的备份文件。
-v或--verbose 显示指令执行过程。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-x或--extract或--get 从备份文件中还原文件。
压缩文件 非打包
touch a.c
tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c
解压文件
tar -xzvf test.tar.gz
a.c
- vi:文书编辑器
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
| [Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
| ------------ | --------------------------------- |
| [Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
| [Ctrl] + [d] | 屏幕『向下』移动半页 |
| [Ctrl] + [u] | 屏幕『向上』移动半页 |
设备管理
- free:显示内存状态。
系统设置与用户管理
-
useradd:建立用户帐号。
-
passwd:设置密码。
-
su:变更用户身份。
常用方式及使用技巧:
su – oracle
su oracle
使用同一个命令中间加不加“-”是有很大的区别的:
添加“-”时改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。
如果不添加“-”,只是改变了用户,其余的信息都不会发生变化。
进程管理
-
ps:报告程序状况。
参数:
-e 显示所有程序。
-f 显示UID,PPIP,C与STIME栏位。
常用方式及使用技巧:ps–ef |grep 12345,查找12345进程 -
kill:删除执行中的程序或工作。
语 法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
补充说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。
常用方式及使用技巧:kill -9 12345 ,杀死12345进程 -
top:显示管理执行中的程序。
查看资源情况。
网络通信
- netstat:显示网络状态,利用netstat指令可让你得知整个Linux系统的网络情况。
命令输出结果详解:
https://blog.csdn.net/weixin_44706392/article/details/98945643
netstat 查看端口占用语法格式:
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
# netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26993/nodejs
-
ping:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
常用方式及使用技巧:ping 10.137.41.21 -
ip:基本上它整合了 ifconfig 与 route 这两个命令,不过ip 的功能更强大。用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
常见用法:id a
-
tcpdump:倾倒网络传输数据,进行网络抓包。
其他命令
- restart:重启,配置文件重新生效。
reload (重新加载),reload会重新加载配置文件,服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。也叫平滑重启,不会对已经连接的服务造成影响。
restart (重启)(先stop后start),会重启服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。
注意:修改配置文件前一定要先备份!为了保证线上服务高可用,推荐使用reload。
重启网络:service network restart
重启httpd服务:service httpd restart
python
数据类型
列表
向列表添加元素
append()
extend()
insert()
从列表中获取元素
len()
当索引值为负数时,表示从列表的末尾反向索引
从列表删除元素
remove()、pop()和del
列表切片
- 结束位置上的元素是不包含的(如上面例子中,“神奇女侠”的索引值是4,如果写成list1[2:4],便不能将其包含进来)。
- 从后面切片
- 使用步长
步长设置为负数,如-1,相当于将整个列表翻转过来。
列表切片并不会修改列表自身的组成结构和数据,它其实是为列表创建一个新的拷贝(副本)并返回。
count(),统计某个元素在列表中出现的次数
index(),返回某个元素在列表中第一次出现的索引值
reverse(),将整个列表原地翻转
sort(),对列表元素进行排序
元组
元组和列表的最大区别是:元组只可读,不可写。
字符串
字符串与元组一样,都是属于“一言既出,驷马难追”的家伙。
count(sub[,start[,end]])方法用于查找sub参数在字符串中出现的次数,可选参数start和end表示查找的范围
find(sub[,start[,end]])或index(sub[,start[,end]])方法用于查找sub参数在字符串中第一次出现的位置,如果找到了,返回位置索引值;如果找不到,find()方法会返回-1,而index()方法会抛出异常(注:异常是可以被捕获并处理的错误
replace(old,new[,count])方法用于将字符串中的old参数指定的字符串替换成new参数指定的字符串
split(sep=None, maxsplit=-1)方法用于拆分字符串
join(iterable)方法用于拼接字符串
格式化
1.format()
format()方法接收位置参数和关键字参数,二者均传递到一个名为replacement的字段。而这个replacement字段在字符串内用大括号({})表示。
2.格式化操作符:%
三种方法可以对字符串进行拼接:
• 简单字符串连接时,直接使用加号(+),例如:full_name = prefix +name。
• 复杂的,尤其有格式化需求时,使用格式化操作符(%)进行格式化连接,例如:result = "result is %s:%d" % (name, score)。
• 当有大量字符串拼接,尤其发生在循环体内部时,使用字符串的join()方法无疑是最棒的,例如:result = "".join(iterator)。
序列
• 都可以通过索引得到每一个元素。
• 默认索引值总是从0开始(当然灵活的Python还支持负数索引)。
• 可以通过切片的方法得到一个范围内的元素的集合。
• 有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)。
list()方法用于把一个可迭代对象转换为列表
tuple()方法用于把一个可迭代对象转换为元组
str()方法用于把obj对象转换为字符串
len()方法
max()方法用于返回序列或者参数集合中的最大值
min()
sum()方法用于返回序列iterable的所有元素值的总和
sorted()方法用于返回一个排序的列表
reversed()方法用于返回逆向迭代序列的值。它不是返回一个列表,而是返回一个迭代器对象。
enumerate()方法生成由二元组(二元组就是元素数量为2的元组)构成的一个迭代对象,每个二元组由可迭代参数的索引号及其对应的元素组成
zip()方法用于返回由各个可迭代参数共同组成的元组
字典
Python的字典在有些地方称为哈希(hash),有些地方称为关系数组。
字典的键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串、数或元组。
-
fromkeys()方法
用于创建并返回一个新的字典,它有两个参数;第一个参数是字典的键;第二个参数是可选的,是传入键对应的值,如果不提供,那么默认是None。
-
keys()用于返回字典中的键
-
values()用于返回字典中所有的值
-
items()返回字典中所有的键值对(也就是项)
-
get()方法
访问字典项,当键不存在的时候,get()方法并不会报错,只是默默地返回了一个None -
setdefault()方法,setdefault()在字典中找不到相应的键时会自动添加
-
使用成员资格操作符(in或notin)来判断一个键是否在字典中
-
clear()方法,清空一个字典
-
copy()方法,用于拷贝(浅拷贝)整个字典
-
pop(),给定键弹出对应的值
-
popitem(),弹出一个项
-
update()方法,更新字典
集合
在Python 3里,如果用大括号括起一堆数字但没有体现出映射关系,那么Python就会认为这堆数据是一个集合而不是映射。
集合的特点:其中元素是唯一的,其中元素是无序的(不能通过下标来访问)。
-
set(),创建集合,将列表转为集合
-
可以通过迭代把集合元素读取出来
-
以使用in和not in判断一个元素是否在集合中已经存在
-
add()方法,为集合添加元素
-
remove()方法,删除集合中已知的元素
-
frozenset(),冻结集合
类型转换
int()、float()和str()
获取类型
-
type()
-
isinstance()
判断数据类型是否一致。
有两个参数:第一个是待确定类型的数据;第二个是指定一个数据类型。它会根据两个参数返回一个布尔类型的值,True表示类型一致,False表示类型不一致。
操作符
算术操作符
+ - * / % //
地板除法:双斜杠,舍弃小数,保留整数
幂运算操作符:双星号()
比较操作符
< <= > >= == !=
逻辑操作符
and or not
运算符优先级
成员关系操作符
in和not in
控制语句
分支的含义是“只有符合条件,才会去做某事”;而循环则是“只要符合条件,就持续做某事”。
分支语句
条件表达式(三元操作符)
small=x if x<y else y
断言
当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError异常。
什么情况下才会需要使用这个关键字呢?在做程序测试的时候就很好用!程序测试的目的就是要尽可能地发现潜在的BUG并修复它们。与其让错误的条件导致BUG出现,不如在错误条件出现的那一瞬间让程序实现“自我毁灭”。
while循环语句
while 条件:
循环体
for循环语句
所谓可迭代对象,就是指那些元素可以被单独提取出来的对象。Python中的可迭代对象有:列表、元组、字典、字符串,常结合for循环使用。
range():可以为指定的整数生成一个数字序列(可迭代对象),可指定开始数值、结束数值、步长
break语句
break语句的作用是终止当前循环,跳出循环体。
continue语句
它的作用是跳出本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。
else语句
while和for循环语句的后面也可以加上一个else语句,表示当条件不成立的时候执行的内容
函数
1.创建一个函数用def关键字
2.在函数中使用关键字return,后面跟着的就是指定要返回的值。
3.关键字参数
4.默认参数
5.可变参数
若实参个数不确定,在定义函数的时候,在参数前面加上星号()即可。通俗的理解就是将多个参数打包成一个元组的形式进行存储。
在定义函数的时候,在参数前面加上两个星号(**),表示为将参数们打包成字典的形式。
如果在收集参数后面还需要指定其他参数,那么在调用函数的时候就应该使用关键参数来指定,否则Python就都会把实参都纳入到收集参数中。
星号()在形参中的作用是“打包”,而在实参中的作用则相反,起到“解包”的作用。
6.局部变量
定义在函数内部的变量是局部变量,局部变量的作用范围只能在函数的内部生效,它不能在函数外被引用。
7.全局变量
如果在函数内部试图修改全局变量的值,那么Python会创建一个新的局部变量替代(名字与全局变量相同),但真正的全局变量是“不为所动”的。
在函数内部仅仅去访问全局变量就好,不要试图去修改它。
global关键字
8.函数嵌套
9.闭包
如果在一个内部函数里,对在外部作用域但不是在全局作用域的变量进行引用(简言之:就是在嵌套函数的环境下,内部函数引用了外部函数的局部变量),那么内部函数就被认为是闭包。
如果在一个内部函数里(funY()就是这个内部函数)对在外部作用域(但不是在全局作用域)的变量进行引用(x就是被引用的变量,x在外部作用域funX()函数里面,但不在全局作用域里),则这个内部函数就是一个闭包。
10.装饰器
个人理解:将被装饰函数当作参数传给装饰函数
语法糖
11.匿名函数lambda
基本语法是使用冒号(:)分隔函数的参数及返回值:冒号的左边放置函数的参数,如果有多个参数,使用逗号(,)分隔即可;冒号右边是函数的返回值。
12.过滤器filter()
filter()这个内置函数有两个参数:第一个参数可以是一个函数也可以是None,如果是一个函数的话,则将第二个可迭代对象里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
13.映射器map()
map()这个内置函数两个参数,一个函数和一个可迭代对象,将可迭代对象的每一个元素作为函数的参数进行运算加工,直到可迭代序列每个元素都加工完毕。
map()的第二个参数是收集参数,支持多个可迭代对象。map()会从所有可迭代对象中依次取一个元素组成一个元组,然后将元组传递给func。注意:如果可迭代对象的长度不一致,则以较短的迭代结束为止。
14.递归
递归就是函数调用自身的行为。在函数内部可以调用所有可见的函数,当然也包括它自己。