linux申请端口.docx
《linux申请端口.docx》由会员分享,可在线阅读,更多相关《linux申请端口.docx(24页珍藏版)》请在冰豆网上搜索。
linux申请端口
linux申请端口
LINUX开启允许对外访问的网络端口LINUX通过下面的命令可以开启允许对外访问的网络端口:
/sbin/iptables-IINPUT-ptcp--dport8000-jACCEPT#开启8000端口/etc/rc.d/init.d/iptablessave#保存配置/etc/rc.d/init.d/iptablesrestart#重启服务查看端口是否已经开放/etc/init.d/iptablesstatus
想查看TCP或者UDP端口使用情况,使用
stat-anp
如果有些进程看不见,如只显示”-”,可以尝试
sudostat-anp
如果想看某个端口的信息,使用lsof命令,如:
sudolsof-i:
631
-bash-3.00#stat-tln
stat-tln命令是用来查看linux的端口使用情况
/etc/init.d/vsftpstart是用来启动ftp端口~!
看文件/etc/services
stat
查看已经连接的服务端口(ESTABLISHED)
stat-a
查看所有的服务端口(LISTEN,ESTABLISHED)
sudostat-ap
查看所有的服务端口并显示对应的服务程序名
nmap<扫描类型><扫描参数>
例如:
nmaplocalhost
nmap-p1024-65535localhost
nmap-PT192.168.1.127-245
当我们使用stat-apn查看网络连接的时候,linux会发现很多类似下面的内容:
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname
tcp052218.104.81.152:
7710211.100.39.250:
29488ESTABLISHED6111/1显示这台服务器开放了7710端口,那么这个端口属于哪个程序呢?
我们可以使用lsof-i:
7710命令来查询:
MANDPIDUSERFDTYPEDEVICESIZENODENAME
sshd1990root3uIPv44836TCP*:
7710(LISTEN)
这样,我们就知道了7710端口是属于sshd程序的。
1.#表示权限用户(如:
root),$表示普通用户
开机提示:
Login:
输入用户名
password:
输入口令用户是系统注册用户成功登陆后,可以进入相应的用户环境.
退出当前shell,输入:
exit
2.useraddseek添加一个seek用户
passwdseek给seek这个用户设置密码.
(/etc/passwd/etc/group)
userdelseek删除账号
userdel-rseek删除账号连同自家目录.
[更详细的操作请参阅manpage,和账号管理篇]
3.查看命令
ls-l显示文件列表
ls-al-a显示所有档案及目录(ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)
ls-al|grep'^d'显示目录
ls-al|grep'^[^d]'在一个目录中查询不包含目录的所有文件ls-sh(manls查看man帮助.)
linux几种文件类型:
d表示此文件是一个目录
-表示此文件是一个普通文件
b表示此文件是一个特殊的块设备I/O文件
c表示此文件是一个特殊的字符设备I/O文件
l表示此文件是一个连接文件。
在其文件名称后紧跟与它连接的文件路径及名称
file命令通过探测文件内容判断文件类型
4.建立文件和目录
touch1.txt
cat>2.txt(用定向符创建文件,填写内容后,按ctrl+d保存内容)mkdirmywork建立mywork这个目录
5.拷贝文件或目录
cpfilename1filename2
cp-rdir1dir2复制目录
cp-rf参数f是删除已经存在的目标文件而不提示
cp-i参数i和f相反,在覆盖目标文件之前将给出提示要求用户确认,回答y时目标文件将被覆盖,是交互式拷贝.
6.删除文件和目录(删除文件或目录都可以用rm搞定)
rm1.c//将1.c这个文件删除
rm-rf(强制删除文件或目录,删除时不提示.)
7.移走目录或者改文件名
mv[opitons]源文件或目录目标文件或目录
[options]主要参数
-i:
交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,
这样可以避免误覆盖文件.
-f:
禁止交互操作。
mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
mvhello../将hello目录或者文件移动上一级.
8.alias别名
aliasdir='ls-l'输入dir,其实就相当于执行了ls-l
9.权限的控制(rwx421)
chmod+xhello.sh赋于可执行权限.
(详细介绍一下权限的控制)
chmod命令权限修改用法:
chmod一位8进制数filename(rwx421)eg:
chmodu+xfilenmame只想给自己运行,别人只能读chownseek.seekmydir改变用户属组
u:
表示文件所有者
g:
表示同组用户
o:
表示其它用户
a:
表示所有用户
opt则是代表操作,可以为:
+:
添加某个权限
-:
取消某个权限
=:
赋予给定的权限,并取消原有的权限
而mode则代表权限:
r:
可读4
w:
可写2
x:
可执行1
10.pwd显示当前目录完整路径和改变目录
cdseek进入seek这个目录
cd退出当前目录
cd../进入上一级目录.
cd-返回上一次目录
cd~返回主目录
11.cat,more,less命令
将某个文件的内容显示出来,两个命令不同的是:
cat把文件内容一直打印出来,而more则分展显示.
less可以上下翻滚查看内容.
cat>1.txt可以填写或者复制内容,按ctrl+d保存
cat1.c
more1.c
head-nfilename显示第N行的内容
tail-nfilename显示后N行的内容
tail-n20/var/log/message显示最新的20行日志
12.设置linux时间和日期
date命令("dateMMDDhhmmYYYY.ss")
xx年7月24日12:
37,30秒
date07241237xx.30
date-s20:
30:
30#设置系统时间为20:
30:
30
date-sxx-7-24#设置系统时期为xx-7-24
clock-r#对系统Bios中读取时间参数
clock-w#将系统时间(如由date设置的时间)写入Bios
13.查看找文件(find,grep,awk更多的请参照manpage或shell编程专题讲解)几种介绍:
find路径-name文件名
find/etc-namenamed.conf
locate通过文件名搜索文件的工具(要先通过updatedb建立索引数据库)localtenamed.conf
whereis是寻找二进制文件,同时也会找到其帮助文件
which和where相似,只是我们所设置的环境变量中设置好的路径中寻找;比如;
14.查杀进程
psaux
ps-ef|grep
kill-9
看看哪个进程占用的内存最大
ps-aux|sort+5n
将程序放在前后台执行
cpfile1file2&
&与ctrl+z你可以使用&或ctrl+z来将命令放在后台执行.
fg是将放在后台执行的程序再放回前台.
jobs
15.dd命令备份
ddif="input_file"of="out_file"bs="block_size"count="number"参数:
if:
就是inputfile可以是设备
of:
就是outputfile也可以是设备
bs:
规划的一个block的大小,如果没有设定时,预设是512bytescount:
多少个bs的意思.
ddif=/etc/passwordof=/tmp/passwd.bak备份
16.mount加载一个硬件设备
用法:
mount[参数]要加载的设备载入点
eg:
mount/dev/cdrom
cd/mnt/cdrom//进入光盘目录
u盘:
mkdir/mnt/usb;(注:
创建挂载目录)
mount/mnt/sda1/mnt/usb;(注:
挂载U盘)
现在就可以使用U盘了,在/mnt/usb目录下的内容就是U盘里的内容了;使用完后,用以下命令卸载U盘即可。
umount/mnt/usb
mount列出系统所有的分区
mount-tiso9660/dev/cdrom/mnt/cdrom挂载光盘
mount-tvfat/dev/fd0/mnt/floppy挂载软盘mount-tvfat-oiocharset=utf8,umask=000/dev/hda2
/mnt/hda2挂载fat32分区
mount-tntfs-onls=utf8,umask=000/dev/hda3
/mnt/hda3挂载ntfs分区
Linux-NTFSProject:
linux-ntfs.sourceforge./
umount/mnt/hda3缷载
注:
挂载设备前,请先fdisk-l看一下.
17.su在不退出登陆的情况下,切换到另一个身份
用法:
su-l用户名(如果用户名缺省,则切换到root状态)
eg:
su-lseek(切换到seek这个用户,将提示输入密码),加上-表示切换到用户的环境变量.
sudo利用他可以执行root执行的权限
Linux系统对IO端口和IO内存的管理
[日期:
xx-01-17]:
Linux社区作者:
ce123
一、I/O端口
端口(port)是接口电路中能被CPU直接访问的寄存器的地址。
几乎每一种外设都是通过读写设备上的寄存器来进行的。
CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。
外设寄存器也称为“I/O端口”,通常包括:
控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。
二、IO内存
例如,在PC上可以插上一块图形卡,有2MB的存储空间,甚至可能还带有ROM,其中装有可执行代码。
三、IO端口和IO内存的区分及联系
这两者如何区分就涉及到硬件知识,X86体系中,具有两个地址空间:
IO空间和内存空间,而RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,即内存空间。
内存空间:
内存地址寻址范围,32位操作系统内存空间为2的32次幂,即4G。
IO空间:
X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。
IO端口:
当寄存器或内存位于IO空间时,称为IO端口。
一般寄存器也俗称I/O端口,或者说I/Oports,这个I/O端口可以被映射在MemorySpace,也可以被映射在I/OSpace。
IO内存:
当寄存器或内存位于内存空间时,称为IO内存。
四、外设IO端口物理地址的编址方式
CPU对外设IO端口物理地址的编址方式有两种:
一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。
而具体采用哪一种则取决于CPU的体系结构。
1、统一编址
RISC指令系统的CPU(如,PowerPC、m68k、ARM等)通常只实现一个物理地址空间(RAM)。
在这种情况下,外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分。
此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。
统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己
的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。
2、独立编址
而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。
这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。
CPU通过设立专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即I/O端口)。
与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86CPU的I/O空间就只有64KB(0-0xffff)。
这是“I/O映射方式”的一个主要缺点。
独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”。
3、优缺点
独立编址主要优点是:
1)、I/O端口地址不占用存储器空间;使用专门的I/O指令对端口进行操作,I/O指令短,执行速度快。
2)、并且由于专门I/O指令与存储器访问指令有明显的区别,使程序中I/O操作和存储器操作层次清晰,程序的可读性强。
3)、同时,由于使用专门的I/O指令访问端口,并且I/O端口地址和存储器地址是分开的,故I/O端口地址和存储器地址可以重叠,而不会相互混淆。
4)、译码电路比较简单(因为I/0端口的地址空间一般较小,所用地址线也就较少)。
其缺点是:
只能用专门的I/0指令,访问端口的方法不如访问存储器的方法多。
统一编址优点:
1)、由于对I/O设备的访问是使用访问存储器的指令,所以指令类型多,功能齐全,这不仅使访问I/O端口可实现输入/输出操作,而且还可对端口内容进行算术逻辑运算,移位等等;
2)、另外,能给端口有较大的编址空间,这对大型控制系统和数据通信系统是很有意义的。
这种方式的缺点是端口占用了存储器的地址空间,使存储器容量减小,另外指令长度比专门I/O指令要长,因而执行速度较慢。
究竟采用哪一种取决于系统的总体。
在一个系统中也可以同时使用两种方式,前提是首先要支持I/O独立编址。
Intel的x86微处理器都支持I/O独立编址,因为它们的指令系统中都有I/O指令,并设置了可以区分I/O访问和存储器访问的控制信号引脚。
而一些微处理器或单片机,为了减少引脚,从而减少芯片占用面积,不支持I/O独立编址,只能采用存储器统一编址。
五、Linux下访问IO端口
对于某一既定的系统,它要么是独立编址、要么是统一编址,具体采用哪一种则取决于CPU的体系结构。
如,PowerPC、m68k等采用统一编址,而X86等则采用独立编址,存在IO空间的概念。
目前,大多数嵌入式微控制器如ARM、PowerPC等并不提供I/O空间,仅有内存空间,可直接用地址、指针访问。
但对于Linux内核而言,它可能用于不同的CPU,所以它必须都要考虑这两种方式,于是它采用一种新的方法,将基于I/O映射方式的或内存映射方式的I/O端口通称为“I/O区域”(I/Oregion),不论你采用哪种方式,都要
先申请IO区域:
request_resource(),结束时释放它:
release_resource()。
IOregion是一种IO资源,因此它可以用resource结构类型来描述。
访问IO端口有2种途径:
I/O映射方式(I/O-mapped)、内存映射方式(Memory-mapped)。
前一种途径不映射到内存空间,直接使用intb()/outb()之类的函数来读写IO端口;后一种MMIO是先把IO端口映射到IO内存(“内存空间”),再使用访问IO内存的函数来访问IO端口。
1、I/O映射方式
直接使用IO端口操作函数:
在设备打开或驱动模块被加载时申请IO端口区域,之后使用inb(),outb()等进行端口访问,最后在设备关闭或驱动被卸载时释放IO端口范围。
in、out、ins和outs汇编语言指令都可以访问I/O端口。
内核中包含了以下辅助函数来简化这种访问:
inb()、inw()、inl()
分别从I/O端口读取1、2或4个连续字节。
后缀“b”、“w”、“l”分别代表一个字节(8位)、一个字(16位)以及一个长整型(32位)。
inb_p()、inw_p()、inl_p()
分别从I/O端口读取1、2或4个连续字节,然后执行一条“哑元(dummy,即空指令)”指令使CPU暂停。
outb()、outw()、outl()
分别向一个I/O端口写入1、2或4个连续字节。
outb_p()、outw_p()、outl_p()
分别向一个I/O端口写入1、2或4个连续字节,然后执行一条“哑元”指令使CPU暂停。
insb()、insw()、insl()
分别从I/O端口读入以1、2或4个字节为一组的连续字节序列。
字节序列的长度由该函数的参数给出。
outsb()、outsw()、outsl()
分别向I/O端口写入以1、2或4个字节为一组的连续字节序列。
流程如下:
虽然访问I/O端口非常简单,但是检测哪些I/O端口已经分配给I/O设备可能就不这么简单了,对基于ISA总线的系统来说更是如此。
通常,I/O设备驱动程序为了探测硬件设备,需要盲目地向某一I/O端口写入数据;但是,如果其他硬件设备已经使用这个端口,那
么系统就会崩溃。
为了防止这种情况的发生,内核必须使用“资源”来记录分配给每个硬件设备的I/O端口。
资源表示某个实体的一部分,这部分被互斥地分配给设备驱动程序。
在这里,资源表示I/O端口地址的一个范围。
每个资源对应的信息存放在resource数据结构中:
[plain]
structresource{
resource_size_tstart;//资源范围的开始
resource_size_tend;//资源范围的结束
constchar*name;//资源拥有者的名字
unsignedlongflags;//各种标志
structresource*parent,*sibling,*child;//指向资源树中父亲,兄弟和孩子的指针};
所有的同种资源都插入到一个树型数据结构(父亲、兄弟和孩子)中;例如,表示I/O端口地址范围的所有资源都包括在一个根节点为ioport_resource的树中。
节点的孩子被收集在一个链表中,其第一个元素由child指向。
sibling字段指向链表中的下一个节点。
为什么使用树?
例如,考虑一下IDE硬盘接口所使用的I/O端口地址-比如说从0xf000到0xf00f。
那么,start字段为0xf000且end字段为0xf00f的这样一个资源包含在树中,控制器的常规名字存放在name字段中。
但是,IDE设备驱动程序需要记住另外的信息,也就是IDE链主盘使用0xf000到0xf007的子范围,从盘使用0xf008到0xf00f的子范围。
为了做到这点,设备驱动程序把两个子范围对应的孩子插入到从0xf000到0xf00f的整个范围对应的资源下。
一般来说,树中的每个节点肯定相当于父节点对应范围的一个子范围。
I/O端口资源树(ioport_resource)的根节点跨越了整个I/O地址空间(从端口0到65535)。
任何设备驱动程序都可以使用下面三个函数,传递给它们的参数为资源树的根节点和要插入的新资源数据结构的地址:
request_resource()//把一个给定范围分配给一个I/O设备。
allocate_resource()//在资源树中寻找一个给定大小和排列方式的可用范围;若存在,将这个范围分配给一个I/O设备(主要由PCI设备驱动程序使用,可以使用任意的端和主板上的内存地址对其进行配置)。
release_resource()//释放以前分配给I/O设备的给定范围。
内核也为以上函数定义了一些应用于I/O端口的快捷函数:
request_region()分配I/O端口的给定范围,release_region()释放以前分配给I/O端口的范围。
当前分配给I/O设备的所有I/O地址的树都可以从/proc/ioports文件中获得。
2、内存映射方式
将IO端口映射为内存进行访问,在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设
备关闭或驱动模块被卸载时释放IO端口并释放映射。
映射函数的原型为:
void*