Python列表和Linux的vim和自有服务

本文介绍了Linux中的vim编辑器的三种模式及其常用操作,包括光标移动、复制、删除和撤销等。此外,讲解了Linux的自有服务,如运行模式、用户和用户组管理以及网络设置。在Python部分,文章详细阐述了列表的定义、常用操作,如增加、删除、修改和遍历,以及列表嵌套的应用。
摘要由CSDN通过智能技术生成

Linux部分

1、vim的三种模式

vim中的三种模式:命令模式、编辑模式、末行模式

命令模式:该模式下不能对文件进行直接编辑,可以输入快捷键进行一些操作(删除行,复制行,移动光标,粘贴等等)

编辑模式:对该模式下可以对文件的内容进行 编辑

末行模式:可以在末行输入命令来对文件进行操作(搜索,替换,保存,退出,撤销等)

打开文件进入的是命令模式。

模式间的相互切换:
默认一开始是:命令模式
按i键进入编辑模式
按:进入末行模式
想从编辑模式或末行模式进入到命令模式按下Esc键。

命令模式:
1、光标移动命令
(1)光标移到行首:shift+6
(2)光标移到行尾:shift+4
(3)光标移到首行:gg
(4)光标移到末行:G
2、复制命令
(1)复制光标所在行
按键yy
粘贴:在想要粘贴的地方按下p键(粘贴到该行的下一行)
(2)以光标所在行为准(包含当前行),向下复制指定的行数
按键:数字 yy(数字表示复制几行)
粘贴:p

3、剪切/删除
(1)剪切/删除光标所在行
按键:dd (删除之后下一行上移)
注意:dd严格是剪切命令,但是剪切之后不粘贴就是删除了
(2)剪切/删除光标所在行为准(包含所在行),向下删除/剪切指定的行数
按键:数字 dd
(3)剪切/删除光标所在行 ,但是删除之后下一行不上移,当前行变成空白行
按键:D

4、撤销刚才的操作
按键:u (undo)

末行模式:
1、保存退出就不说了

2、搜索、查找:
输入"/关键词",注此时就不用输入":"了
例如:在passwd文件中所搜root关键词:
/root
在搜索结果中切换上一个或下一个结果:上一个N,下一个是n(next)

3、替换指令
语法1:😒/搜索的关键词/新的内容 替换光标所在行的第一处符合条件的内容
语法2:😒/搜索的关键词/新的内容/g 替换光标所在行的全部符合条件的内容
语法3: %😒/搜索的关键词/新的内容 替换整个文档中每行的第一个符合条件的内容
语法4:%😒/搜索的关键词/新的内容/g 替换整个文档的符合条件的内容

%:表示整个文档
g:表示全局(global)

4、显示行号:
输入":set nu" :nu就是number的意思
取消显示行号:":set nonu"

2、Linux的自有服务

自有服务:即不需要用户独立安装的软件的服务,而是当系统安装好后就可以直接使用的服务(内置)

1、自由服务之:运行模式:

运行模式也可以称之为***运行级别***。

init进程:是系统启动后的第一个进程,该进程存在一个对应的配置文件:inittab(系统运行级别配置文件,位置/etc/inittab)

从该文件的配置中可以看出有7种运行级别:
0----表示关机级别(不要将默认的运行级别设置成这个值)
1----表示单用户模式
2----多用户模式,不用NFS
3----多用户模式,完全的多用户模式(不带桌面的,纯命令行模式)
4----没有被使用的模式(被保留的模式)
5----x11,完全的图形化界面模式
6----表示重启模式(不要将默认的运行模式设置为这个值)

与该级别 相关的几个命令(注init指令需要超级管理员的权限,普通用户无法使用):
#init 0 表示关机
#init 3 切换到不带桌面的模式,命令行模式
#init 5 切换到图形界面
#init 6 重启电脑
这些命令其实都是调用的init进程,将数字(运行级别)传递给进程,进程去读配置文件对应的操作。

要想永久更改成命令行模式就需要更改配置文件:
/ect/inittab文件中的initdefault值设置成3,然后重启操作系统。

2、自有服务之用户和用户组管理(重点)超级管理员才能使用的命令

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对用户进行跟踪,并控制他们对系统资源的访问;另一方面可以帮助用户组织文件,并为用户提供安全性保证。

用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的主目录。

想要实现对用户账号的管理,要完成的工作主要有一下几个方面:
用户账号的添加,删除,修改以及密码的管理;
用户组的管理。

注意三个文件:
/etc/passwd :用于存储用户的关键信息
/etc/group :用于用户组的关键信息
/etc/shadow :存储用户的密码信息

1、用户管理:
(1)添加用户
语法:#useradd 选项 用户名
常用选项:
-g:表示指定用户的用户主组,选项值可以是用户组的id,也可以是组名
-G:表示指定用户的用户附加组,选项值可以是用户组的id,也可以是组名
-u:uid 用户的id(标识符),系统默认从500之后按顺序分配uid,如果不想使用分配的可以使用该选项自定义

案例:创建用户zhangsan ,不带选项
#useradd zhangsan
验证是否成功:
cat /etc/passwd 查看文件;
或者:验证是否存在家目录(在Centos下创建好用户之后会随之产生一个同名的家目录 ) #ls /home

案例:添加选项:创建用户lisi,让lisi属于501组,附加组500,自选uid 666
#useradd -g 501 -G 500 -u 666

主组和uid是查看/etc/passwd文件
附加组是查看/etc/group文件

(2)修改用户:
语法:#usermod 选项 用户名 (mod:modify)
选项:
-g :修改主组
-G:修改附加组
-u:修改用户id
-l:修改用户名

案例:修改用户名
#usermod -l 新的用户名 旧的用户名

(3)设置密码:
Linux不允许没用密码的用户登到系统,因此之前创建的用户因为没有密码所以都出于锁定状态,需要设置密码之后才可以进行登录
语法:#passwd 用户名

案例:设置zhangsan的密码
#passwd zhangsan

(4)切换用户:
#su [用户名] :用户名可以不写,不写的话表示切换到超级管理员root用户

从root切换到其他用户不需要密码,反之需要密码;
切换用户之后路径不变;
普通用户没办法访问root用户家目录,但是反之可以

(5)删除用户
语法:#userdel 选项 用户名
常用选项:
-r:表示删除用户的同时删除家目录。

已经登录的用户删除的时候提示删除失败,但是没有登录的用户可正常删除。
对于已经登录的用户,用kill杀死其全部进程后,再用userdel删。

2、用户组管理:

一个用户组中的用户类似。每个用户都有一个用户组,系统可以对用户组中的用户进行集中管理。不同的Linux系统对用户的规定有所不同,如Linux下的用户属于与他同名的用户组,这个用户组在创建用户是创建。

用户组的管理设计用户组的添加,删除和修改,组的添加,删除和修改实际上就是对/etc/group文件的更新。

文件结构:
用户组名:密码:用户组ID:组内用户名
密码:x表示占位符,虽然用户组可以设置密码,但是大部分情况下是不设置密码的
组内 用户名:表示附加组是该组的用户名称

(1)用户组添加
语法:#groupadd 选项 用户组名
选项:
-g:表示类似用户添加用户里面的-u操作,选择自己自定义的一个用户组的id
,如果不指定,则默认从500之后递增。

案例;创建一个新的用户组,命名为Adminis
#groupadd adminis
查看是否成功:
cat /etc/group

(2)用户组修改:
语法:#groupmod 选项 用户组名
选项:
-g: 修改用户组id
-n:修改用户组名

案例:将用户组adminis的id从501改成502,将名称改成admins
#groupmod -g 502 -n adminis admins

(3)删除用户组
语法:#groupdel 用户组名
注意:如果需要删除一个组,但这组是某个用户的主组时不允许删除,但如果确实需要删除,需要先移除该组内的所有用户。

#groupdel adminis

3、自有服务之网络设置

网卡配置文件位置:/etc/sysconfig/network-scripts
在目录中网卡的配置文件的命名格式:ifcfg-网卡名称
比如:cat /etc/sysconfig/network-scripts/ifcfg -eth0

重启网卡的命令:
(1)#service network restart (有时没有这个命令,因为有的分支版本中可能没有这个命令)
(2)但是有个共性的目录:/etc/init.d 该目录下放着很多服务的快捷方式(
ls /etc/init.d/),所以还可以使用另一个命令
#/ect/init.d/network restart (更加通用)

4、自有服务-ssh服务(重点)

ssh(secure shell,安全外壳协议):该协议有两个主要作用:
远程的连接以及远程的文件传输协议

协议使用端口号:默认22

服务启动/停止/重启
#service start/stop/restart
#/etc/init.d/sshd start/stop/restart

(1)远程终端
终端工具主要帮助运维人员连接远程的服务器的,常见的终端工具:Xshell、secureCRT、Putty

(2)文件传输:
filezilla也可以将Linux中的文件下载到本地中,右键点击下载就可以 。

Python 列表(列表是可变类型的,因为在其上操作直接修改了原列表)

1、格式:[数据1,数据2,…]

并且列表中数据类型可以是不同的,但是尽量是相同的,因为容易操作和控制。

2、列表常用操作:

列表是通过下标值来获取数据的,比如:

list=["tom","lisi"]
list[0]

1、查找(index和count函数和对String的操作都是一样的):
(1)index():

name_list=["tom","lily","rose"]
print(name_list.index("tom"))  #0
print(name_list.index("tom",1,2)) #报错

(2)count():,和字符串有点不一样,只能传一个参数

name_list=["tom","lily","rose"]
print(name_list.count("tom"))  #1
print(name_list.count("tomm")) #0

(3)len():注:该方法是一个共用函数,即列表,字符串,元组,集合,字典都是可以用的,用来统计个数

name_list=["tom","lily","rose"]
print(len(name_list))

2、判断列表中元素是否存在,主要有in和not in
in:判断指定的数据 是否在某个某个列表序列中,如果在返回True,否则返回False
not in:判断指定的数据 是否在某个某个列表序列中,如果不在返回True,否则返回False

name_list=["tom","lily","rose"]
print("tom" in name_list);  #True
print("tom" not in name_list)   #False

用法:查找用户输入的名字是否已存在

name_list=["tom","lily","rose"];
name=input("请输入用户名:");
if name in name_list:
    print("您输入的用户名已存在");
else:
    print("您输入的名字是%s,不存在")

3、列表增加数据
(1)append():列表结尾追加数据

name_list=["tom","lily","rose"];
name_list.append("xiaoming");
print(name_list);   #['tom', 'lily', 'rose', 'xiaoming']

append函数如果追加的是一个序列,则追加整个序列到结尾

name_list=["tom","lily","rose"];
name_list.append([1,2]);
print(name_list);   #['tom', 'lily', 'rose', [1, 2]]

(2)insert():向指定位置新增数据
语法:

列表名称.insert(位置下标,数据)
name_list=["tom","lily","rose"];
name_list.insert(1,"lisi");
print(name_list);   #['tom', 'lisi', 'lily', 'rose']

(3)extend:也是列表结尾追加数据,但是与append不同的是,如果数据是一个序列的话,则将这个序列的数据逐一添加到列表中

name_list=["tom","lily","rose"];
name_list.extend("xiaoming");
print(name_list);   #['tom', 'lily', 'rose', 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g']
name_list=["tom","lily","rose"];
name_list.extend(["xiaoming","xiaohong"]);
print(name_list);   #['tom', 'lily', 'rose', 'xiaoming', 'xiaohong']

4、删除数据
(1)del 删指定下标的数据

name_list=["tom","lily","rose","xiaoming","xiaohong"];
del name_list[0];
#del name_list;    这样写会报错
print(name_list)

(2)pop():删除指定下标的数据,不指定的话默认输出最后一个数据,pop函数都会返回被删除的那个数据

name_list=["tom","lily","rose","xiaoming","xiaohong"];
name=name_list.pop();
print(name)  #xiaohong
name_list=["tom","lily","rose","xiaoming","xiaohong"];
name=name_list.pop(1);
print(name)  #lily

(3)remove(数据):删除指定数据的数据,如果有两个一样的数据,只会删除第一个

name_list=["tom","lily","rose","xiaoming","xiaohong"];
name_list.remove("tom");
print(name_list);   #['lily', 'rose', 'xiaoming', 'xiaohong']

(4)clear() 清空列表 ,最后保存的是一个空列表

name_list=["tom","lily","rose","xiaoming","xiaohong"];
name_list.clear();
print(name_list)  #[]

5、修改
(1)修改指定下标的数据

name_list=["tom","lily","rose","xiaoming","xiaohong"];
name_list[0]="aaa"
print(name_list)  #['aaa', 'lily', 'rose', 'xiaoming', 'xiaohong']

(2)使用revserse()函数逆置

name_list=["tom","lily","rose","xiaoming","xiaohong"];
name_list.reverse();
print(name_list)  ['xiaohong', 'xiaoming', 'rose', 'lily', 'tom']

(3)使用sort()函数排序
语法:

列表名字.sort(key=None,reverse=False)
注:reverse:表示排序规则,reverse=True降序,reverse=False(升序)默认
name_list=[1,5,8,7,6,9];
name_list.sort()
print(name_list)  #[1, 5, 6, 7, 8, 9]
name_list=[1,5,8,7,6,9];
name_list.sort(reverse=True)
print(name_list)  #[9, 8, 7, 6, 5, 1]

5、列表的复制,直接使用copy()函数,都不用参数。一般再对数据进行操作之前,都需要复制一份出来,为了保留原始数据

name_list=[1,5,8,7,6,9];
name_list2=name_list.copy();
print(name_list2)  

6、列表的循环遍历
(1)使用while进行遍历:

name_list=["tom","lily","rose","xiaoming","xiaohong"];
i=0;
while i<len(name_list):
    print(name_list[i]);
    i+=1;

(2)使用for循环:

name_list=["tom","lily","rose","xiaoming","xiaohong"];
for i in name_list:
    print(i);

7、列表嵌套:
嵌套:列表中包含子列表
应用场景:要存储班级一、二、三三个年级学生姓名,且每个班级的学生姓名在一个列表中。

name_list=[["小明","小红","小绿"],["tom","lily","rose"],["张三","李四","王五"]];

如何查找到李四:

name_list[2][1]
name_list=[["小明","小红","小绿"],["tom","lily","rose"],["张三","李四","王五"]];
print(name_list[0])  #['小明', '小红', '小绿']

8、案例:
需要:8个老师,三个办公室,将8个来使随机添加到这三个办公室中。用到随机数

import random
teachers=['A','B','C','D','E','F','G','H'];
offices=[[],[],[]];
for name in teachers:
    num=random.randint(0,2);  #从0到2之间随机,包括2
    offices[num].append(name);
print(offices);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值