linux编程2

8.8 netstat

(1)描述

(2)选项

(3)netstat -tlun:查询当前计算机下我开了哪些计算机端口

1》第一个字段是协议的名称,第二个字段是接收队列的个数(是0表示网络很通畅,没有积压)、第三个字段是发送队列的个数,第四个是IP地址 : 端口号(IP地址和端口号,IP地址就像是一个大楼的地址,端口号则是门牌号);最后一个字段是状态,只有TCP有监听状态,而UDP是没有这个选项的,因为UDP发送数据是不在乎对方在不在线的,只要数据发送出去就可以了,所以不需要持续的监听;
2》端口号只具有本地意义,就像大楼的门牌号只在这个楼里才有意义一样;并且,我们的目的端口是固定的(比如SSH对应22),但是我们的源端口,发起端口是随机的大于1024的一个数字,比如下图中的1105和1565;

(4)netstat -an:查看所有的监听信息
输出被分为了两大类,一个是服务,一个是网络程序
1》除了监听状态外,又多了一个ESTABLISHED的状态,表示已经连接的意思,192.168.1.155的1105端口正在连接到我们192.168.1.156的22端口(22端口是SSH远程连接服务端口),这就表示当前的服务器有两个用户通过远程连接工具连接到了我们的服务器。这也是和netstat -tuln的不同之处。
如何知道一个游戏服务器的IP地址呢?ping 的话是ping它的网站而不是它游戏服务器的IP地址,这个时候就要使用我们的netstat来操作一下了:
step1:关掉所有需要联网的程序
step2:用你的客户端登入你的游戏账号
step3:在你系统中执行netstat -an,这个时候显示ESTABLISHED的那个对方的那个人的IP地址,就是游戏的服务器IP地址

2》网络程序也会使用到一些端口号和服务


(5)netstat -rn:查看路由列表,可以查看网关信息



8.9 setup和nmtui

(1)描述
(2) setup
setup是redhat开发的一个网络配置工具,因此只有redhat系的才会有这个工具
【输入setup】

【网络配置 -》 设备配置(配置IP)-》选择网卡】

【DHCP打*号,就是自动获取,这个服务是自动分配我们的网络配置,但是使用前要确保我们的网络有这个服务,否则就不要打*,进行手动配置,配置完成后一路保存退出即可】
(3)nmtui
nmtui 是一个基于curses的图形化前端,包括在networkmanager中。直接输入nmtui就可以进入简单的命令行GUI进行操作。
(4)重启网络
【1】network
利用root帐户
# service network restart
或者/etc/init.d/networking restart
【2】ifdown/ifup 重启指定网卡
# ifdown eth0
# ifup eth0
# ifdown eth0 && ifup eth0
【3】ifconfig
# ifconfig eth0 down
# ifconfig eth0 up
(5) 网络配置文件
Ubuntu和redhat系的linux在一些系统配置文件的构造上不是一样的。它是存放在:/etc/network    里面的 interfaces 文件;而redhat系的是存放在:/etc/sysconfig/network-scripts
(6)在使用setup或者nmtui配置完网络后,要使用重启网络命令来使得命令生效,但是如果是采用远程连接的方式,可能会断开连接,需要重新连接;并且和使用ifconfig进行ip地址配置不同的是,这样的更改是永久生效的,即使服务器重启也不会失效,但是ifconfig就会在服务器重启或者关机后失效;

8.10 mount

(1)描述



(2)注意事项
【1】在win里面,当我们插入一个u盘或者将一个光盘放进光驱,系统会自动检测并分配一个盘符,比如H或者I,这样的过程其实就是linux里面的挂载操作;只不过由于linux服务器开发是没有图形交互界面,有GUI界面的话,这个操作也是系统完成的,但是做服务器开发是要采用命令行的形式进行手动挂载;
【2】步骤:
1》打开系统设置,选择镜像文件,勾选已连接选项框(不勾选的话,就相当于没有给光驱上电)

2》创建一个挂载点,即空目录,在linux里面我们一般挂载在/mnt 或者 /media下:

3》挂载(其实就是将设备文件名和挂载点连接起来)
mount 【-t 光盘文件系统(是默认的,-t iso9660,因为是系统默认的,所以这个部分是可以省略的)】 设备文件名(也是系统默认的,你可以理解为win系统的光驱,/dev/sr0,或者使用它的软链接:/dev/cdrom) 挂载点(这里的例子就是:/mnt/cdrom/)

4》将-t部分省略以后,mount的结构就很清晰了:

5》数据访问
在win里面,是到它的盘符下去访问,这里也一样,到它的挂载目录下去访问,cd 挂载点



6》卸载命令
在win里面,我们使用完了光盘,直接弹出即可,或者使用完u盘,直接拔出,盘符就没了;但是,在linux里面,我们必须使用卸载命令umount
【注意】:不要在卸载目录(挂载点)下进行卸载操作,就像把坐在椅子上的自己举起来一样,这是驳论;
由于,我们之前已经通过mount连接两个文件名了,所以在执行卸载操作的时候,写上一个就可以了,否则的话就会卸载两次,第二次就会报错:





9 .关机重启命令

9.1 shutdown

(1)描述


(2)选项
【1】shutdown -h now:马上关机(常用)
【2】shutdown -h 20:30 : 晚上8:30关机
【3】shutdown -r now : 马上重启(常用)
【4】shutdown -r 20:30 : 晚上8:30重启
(3)推荐使用shutdown
因为在早期的linux系统中,只有shutdown会在关机和重启之前正确的保存信息,虽然现在其他的命令现在也可以做到了,但是shutdown更安全。
(4)tip
在服务器管理中,我们不允许关机操作,只可以允许重启,因为服务器管理通常都是远程管理的,如果远程把服务器关了,只有打个飞的去服务器所在的机房亲自进行开机操作或者打电话让机房管理人员进行开机操作。另外,在重启服务器的时候,请先确保我们的服务都正确关闭,数据都已经备份保存,然后使用shutdown命令来进行重启操作;

9.2 其他的关机命令


9.3 其他重启命令




9.4 系统的运行级别

(1)上面的关机和重启命令有一组比较特别:init 0 和init 6,在linux中有一个非常重要的概念:系统的运行级别
(2) 级别:

(3)1:单用户
有点类似于,在win系统启动界面按下F8,就会进入到一个启动菜单,其中有一个叫安全模式,这个单用户模式就有点类似于这个安全模式;单用户就是启动最小的服务,其他多于的东西统统不启用,甚至连网络都不要,只启动最核心的程序,作用是用来进行修复操作
(4)级别2和级别3
两个模式都是命令行模式,只不过级别2是不含NFS服务的命令行模式;
NFS(Network File System),网络文件系统,简单来说,就是提供两个网络用户之间进行文件共享的一个十分简单的服务。那么为什么专门有一个级别是不含NFS服务的呢?这是因为,它的用户验证比较弱,换句话说就是不安全,有安全隐患。
(5)/etc/inittab
之前在查找Linux系统init流程的相关资料时总是能够看到inittab的身影,但是在我的Ubuntu上是没有这个文件的,到后来才知道采用 Upstart方式的Ubuntu上是没有inittab这个文件的。如果有这个文件的话,使用cat打开就会发现:

这个文档里。只有一句话没有被注释,就是id :  3 : initdefault:
0和6都不能设置为默认级别,否则会无法正常开机;如果写3,在开机之后就会进入完整的命令行界面,如果写5,那么在开机之后就会进入完整的图形界面(前提是装了图形界面,X是Xwindow代表都是图形界面,11则是版本);
(6)修改和查询当前的运行级别

(7)linux内核启动的过程
linux内核启动init , init进程的ID是1,是所有进程的父进程,所有进程都是由它控制的。ubuntu的启动由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改为/etc/init。查看系统初始值,打开文件:/etc/init/rc-sysinit.conf,会找到有这么一段:
这里是说系统默认设置的级别是2。
【两种init方式】
现行的LInux distros主流的有两种init方式:一种是广为流传的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart方式,基于事件机制,系统的所有服务,任务都是由事件驱动的。据我所知,采用后一种方式的目前有Ubuntu(6.10 and later),Fedora(9.10 and later),Debian(optional)。虽然采用Upstart的发行版并不多,但它旨在取代旧式的System V initialization。
【/etc】
.d 文件的作用 : .d代表目录即文件夹的意思。/etc是存放配置文件的目录,配置文件有的是单独的,有的是一类,通常单独的配置文件后缀是.conf,一类的配置文件放在一个目录中,目录名就叫XX.d,XX指的是哪方面的配置文件,比如init.d就存放有关linux启动的配置文件。
【system V initialization与upstart】
System V initializaiton是以runlevel为核心,依据服务间依赖关系的init方式,但在Upstart job,runlevel虽说对于服务的启动也有影响但已不是关键所在。Upstart job是事件驱动的,反过来,系统服务的启动、停止也可以作为事件源触发其他服务。并且事件并不一定得由系统内部产生runlevel也被当作事件来对待(因runlevel的改变而产生的事件),诸如此类还有其他如 startup,started,filesystem等等。 那么系统服务又是如何知道自己应该什么时候启动,什么时候终止的呢?答案就在于/etc /init中(有的distros可能是在/etc/event.d)。进入/etc/init目录下一看,均是系统服务的配置文件,或者说,是job definition files。(实际上Upstart init只需要/etc/init这么一个目录,不像System V init,“拐弯抹脚”转好多圈才到达目的地,在性能上不如前者)。随便打开一个文件,比如cron.conf:
start on runlevel [2345];stop on runlevel [!2345]。没错,配置文件就是通过这个来设置服务何时启动,何时终止的。
【ubuntu系统初始化】
前面提过Ubuntu使用的是Upstart方式的initialization,其实不全然,考虑到6.10之前的版本采用的System V init及某些服务的需要,Ubuntu采用的是兼容模式,即:系统中既有System V-style启动的服务,也有Upstart启动的服务。如果你使用的是Ubuntu11.04(我目前PC上的系统),那么你可以看到系统中有这么几个目录:/etc/init 和 /etc/init.d/etc/rc${runlevel}.d
作为两种init方式各自特征的/etc/init.d,/etc/rc${runlevel}.d目录和/etc/init目录在Ubuntu中都有了,那么Ubuntu是如何实现兼容的?实际上,Ubuntu中并没有直接采用System V-style启动服务,要知道,Ubuntu中的init已被替换为Upstart init,而System V-style的服务是存放于/etc/rc${runlevel}.d目录中的,(而/etc/rc${runlevle}.d/下的文件是到/etc/init.d的软链接)可Upstart init并不会直接跑到这里面去启动服务。它是通过间接调用来启动这类服务的。
进入/etc/init目录(Upstart init会到该目录下读取配置文件),会发现几个跟rc有关的配置文件:

rc-sysinit在startup事件发生时被启动,rc在系统runlevel变化时被启动,rcS在系统runlevel为S时启动。在配置文件的注释中说明了,这几个文件,正是Upstart init处理System V-style服务的关键。rc-sysinit在startup事件发生时被启动,即,Upstart init会首先读取rc-sysinit.conf并执行相关配置和脚本。rc-sysinit.conf的主要工作是设置系统默认runlevel,检测是否存在/etc/inittab或内核命令行,若存在,则按内核命令行>/etc/inittab>默认runlevel的顺序设置系统 runlevel。最后,调用telinit进入设置的runlevel。由于调用了telinit进入了设定的runlevel,runlevel改变的事件发生,此时rc服务启动(当然其他服务也会)。那么,我们就有必要来看看rc.conf中到底有什么东西。打开rc.conf,注意到最后一行:exec /etc/init.d/rc $RUNLEVEL
是不是感觉/etc/init.d/rc很熟悉,没错,在System V initialization中,/etc/inittab中的各runlevel对应的命令行就是通过这种形式设置的。很明显,/etc/init.d/rc被调用了,并且传入了早前设置好的系统runlevel作为参数。而/etc/init.d/rc会根据传入 的runlevel参数调用/etc/rc${runlevel}.d/下的脚本(以S开头)以启动服务,终止在前次runlevel启动而当前在 runlevel需要终止的服务。至此,Ubuntu处理System V-style服务的流程是不是渐渐明朗了。通过rc-sysinit和rc间接的调用/etc/init.d/rc从而启动System V-style服务,Ubuntu在采用新式Upstart init照顾了旧式的System V init。采用Upstart方式启动的服务则在/etc/init/目录中有属于自己的一份配置文件,终端下键入:initctl list,看看列出的服务是否同/etc/init/下的服务完全一致!

(8)ubuntu下添加开机启动脚本
在/etc目录下有一系列级别目录。init为系统的PID=1的进程,决定这系统启动调用哪些启动脚本文件系统优先运行rcS.d目录下的脚本,然后运行rcN.d下的脚本。

方式1:rc.local
Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本    。

当然要添加到语句:exit 0 前面才行。

方式2:rcN.d

如果要添加为开机启动执行的脚本文件,可先将脚本复制或者软连接到/etc/init.d/目录下,然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),将脚本添加到初始化执行的队列中去。

注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如98 。

-将脚本设为可执行权限,并拷贝至/etc/init.d
-在/etc/init.d路径下执行update-rc.d script-name start 98 5 . 注:98为顺序,5为rc5.d,符号.不要忘记
-这样会在会在/etc/rc5.d/下面创建1个符号链接,有必要在脚本的前段加一些provider/start-default等说明,否则报警,在Ubuntu上测试成功
-在am4378上没有测试成功 T_T.
另外一种是
-脚本设为可执行
-在rcN.d下执行ln ../init.d/script-name S99script
-在Ubuntu上没有成功,不知为何

方式3:systemd



(9)ubuntu系统怎么进行图形界面和命令行界面之间的切换
【方式1】使用快捷键
ctrl + alt + (F1 ~ F6之间的任意一个)就可以进入纯命令行模式;
ctrl +alt + F7就可以回到图形界面模式
【注意】tty1~tty2终端之间是没有区别的,都是为了方便用户登入和切换。比如说,当用tty1登入后,出现死机,可切换到tty2(ctrl +alt+f2),利用另外一个用户登入,比如利用root用户登入,ps -aux|grep program_name查询刚才那个让系统死机的进行,然后kill pid即可。这个时候系统就会恢复正常,还可以用过service program_name start来再次启动这个进程;
【方式2】虚拟终端
搜索xterm应用程序,双击打开,就会弹出一个类似命令行模式的虚拟终端

【方式3】命令
在命令行模式下,输入:startx(x之间我们也提过了,在linux里面就代表着图形界面的意思)
【方式4】修改配置文件
如果像修改默认模式的话,就需要修改配置文件了:
【方式5】命令


9.5 退出登入命令

(1)描述
(2)安全考虑
在管理结束之后,一定要退出我们的账户,否则会带来很大的安全问题;
(3)注意事项
【1】在图形界面的注销用户只可以在菜单哪里进行,在终端输入exit和ctrl + d只会关闭当前终端,输入logout会报错


【2】在命令行界面(shell,init3)下可以使用三种方式进行账户注销:exit、logout、ctrl+d




八、文本编辑器

1.vim常用操作

1.1 简介

vim是一个功能强大的全屏幕文本编辑器,是linux/unix上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件;Vim没有菜单,只有命令

1.2 Vim工作模式



(1)vim/vi 加文件名(如果文件名已经存在,那就是修改,是过不存在,那就是新建并编辑) ---》进入命令模式,所谓的命令模式是指,我们输入的每个字母都是命令符,而不是在文本上输入一个字母,比如a:是进入插入模式,而不是在文本上输入一个a;
(2)命令模式下,按下i、a、o会进入插入模式,插入模式就是文本编辑的模式了,这个时候我们输入文本的内容;
(3)内容编辑完毕后,按下ESC键,我们就从插入模式回到了命令模式
(4)在命令模式下,我们输入:,就会进入编辑模式,这个时候可以执行一些编辑命令,比如set number(或者写简化模式:set nu),设置行号,按下回车就会执行并返回到命令模式;再比如,输入wq:保存并退出;

1.3 插入命令

(1)意义
从命令模式进入到插入模式
(2)常见插入命令(aio,请注意小写和大写是有区分的)


1.4 定位命令



1.5 删除命令



1.6 复制和剪切命令



1.7 替换和取消命令



1.8 搜索和搜索替换命令


【注意】(1)如果想区分大小写,就在ic的前面加一个no即可,set noic
(2)替换的格式:替换范围 (%s是全文,n1,n2s(在n1到n2之间))/要替换的字符串/替换的新字符串/g(后面加g就是替换的时候不询问,加c就是询问)

1.9 保存和退出命令




2.使用技巧

2.1 导入命令执行结果

(1)实例1: 当我们需要将一个文本的内容导入到当前执行的文本中的时候,可以使用 :r 要导入的文件名(例如---> :r /etc/issue)




(2)实例2:当我们在写一个shell脚本的时候,可能要引入一个命令,但是我忘记了这个命令存放在哪一个路径之中,那么我怎么在不退出vim的情况进行查找呢?
答案是:使用:!which 命令名称


这个时候按下回车又回到了vim中,这样就可以在不退出vim的情况下进行查询
【总结】在进行vim编辑的过程中,可以通过!命令在不退出vim的情况进行其他命令的操作;

(3)实例3:上面的两个操作是可以合二为一的,比如我们在进行shell脚本文件的编辑的时候,想要加上编辑的时间,那么我们可以通过:!date来获取查询到的时间,然后人为的记录编辑在我们的文本中。这样做很麻烦,我们可以使用:r !date来将当前时间导入到光标所在位置,表示shell脚本文件写完的时间;

【总结】:在不退出vim的情况下,将一个命令的执行结果导入到当编辑的文档中;使用-> :r !命令

2.2 定义快捷键

(1)实例1:当我们想要对文本内容的某些部分进行注释的话,正常的情况下是这样操作的:首先按下0,将光标移动到行首,然后按下i插入,输入#进行注释,ESC键回到命令模式;这样的操作过于繁琐,那么我们就可以通过定义快捷键的方式来简化我们的操作:
【1】定义快捷键格式:map(映射)
这里要注意,假设我们要定义的快捷键是ctrl + p的话,那么在map后面就要同时按下ctrl + v + p三个键,或者先按ctrl + v再按ctrl + p,表示这是我们要定义的快捷键
像这样,颜色变了,就是成功了
接下来,是定义这个快捷键对应的操作是什么,那么在这个例子里面,我们就是要进行一个组合操作---》 I#(跳到行首进入插入模式,加#,并回到命令模式)

(2)实例2:取消注释,那就是将行首的#号删除即可,所以我们可以定义一个快捷键ctrl + b 来实现这个操作
:map ^B 0x
0就是将光标移动到行首(这个I是不一样的,0还是在命令模式,但是I是进入了插入模式), x是删除光标处字符

(3)实例3:我们在编写一个脚本的时候,除了加时间戳以外呢,我们还经常要加上自己的一个个人邮箱,一个联系方式;每次都敲邮箱太麻烦了,于是我们可以定义一个快捷键:ctrl + H


o + 邮箱 +组合键
这样在命令模式按下ctrl +h 就可以插入邮箱了
(4)实例4:当我们进行单行注释的时候,可以通过定义快捷键的方式进行快速的单行注释,但是,有时候我们需要多行一起注释,这样一行行的注释太慢了,于是我们可以利用vim的字符替换功能来实现
,尖角号^代表的是行首的意思:



【1】取消连续多行注释就将行首的#替换成空字符即可:28,35s/^#//g(^代表行首,这个一定要加上的)

【2】如果这个时候我们写的不是shell脚本或者linux的配置文件,是别的语言的脚本,这个时候采用的注释符号是//,这个时候要进行转义告诉编辑器,这个/是普通/,转义符是\
命令---》  :28,35/s/^/\/\//g

取消同理,输入--->  :28,35s/^\/\///g

【3】关于转移符\,当我们使用ls命令的时候发现不同格式的文件是带颜色的,这是因为我们使用的ls命令是起了别名的:

如果想要使用本来的ls,就加一个转移符号即可:


(5)实例5:当我们设置的快捷命令太多的时候,我们容易记不住,这个时候可以进行一个等效替换---》 :ab 替换字符串 被替换的字符串

如上图所示,我将mymail等效上了893784149@qq.com,那么在插入模式中,我输入mymail,并且按下空格后就会替换成893784149@qq.com,按下回车就确认了这次替换。



(6)永久生效
上述的方法定义的快捷键和替换都是暂时生效的,重启后就会失效了,如果想要永久生效,就要把这些写入到我们宿主目录下的配置文件中;如果是root就在/etc下,如果是普通用户,就在普通用户下,如:/home/holahamster;
首先,我们在宿主目录下创建一个配置文件,vim /home/holahamster/.vimrc
如果是在根目录下进行的配置,有一个文件/etc/vim/vimrc,我们可以在这个配置文件的末尾加上行号设置和设置TAB键为4个空格;






九、linux软件安装

1.大纲


2.软件包管理简介

2.1.软件包分类

(1)源码包(直接报源代码给你的软件包,这也是linux特点之一:开源)
-由于linux是用c语言写的,所以绝大多数的安装包都是c语言写的,但是也有少数是用cpp写的;
-缺点是:安装慢、容易报错
-脚本安装
(2)二进制包(RPM包、系统默认包)
-系统能够直接识别的语言是01、也就是机器语言,所以相比于用abcd写的源代码包(还需要将c语言翻译成机器语言)而言,二进制包的执行速度非常快;
-所以二进制包就是我们的源代码包编译之后的软件包,在二进制包中我们是看不到源代码的;
-好处是用户使用的时间节约时间,加快安装速度、简化安装步骤;坏处是看不到源代码

全部评论

相关推荐

xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务