linux套接字文件
1. linux系统中有哪几种文件类型
第一种:普通文件。就是一般存取的文件,由ls-al显示出来的属性中,第一个属性为 [-];另外,依照文件的内容,又大致分为:
1、纯文本文件:这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到数据,比如数字、字母等。设置文件几乎都属于这种文件类型。
2、二进制文件:系统其实仅认识且可以执行二进制文件。Linux中的可执行文件就是这种格式的。
3、数据格式的文件:有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件也可以称为数据文件。
第二种:目录文件。就是目录,第一个属性为[d]。
第三种:连接文件。类似Windows下的快捷方式,第一个属性为[l]。
第四种:设备文件。与系统外设及存储等相关的一些文件,通常都集中在/dev目录,又分为两种。
1、块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘,第一个属性为 [b]。
2、字符设备文件:即串行端口的接口设备,比如键盘、鼠标等,第一个属性为 [c]。
第五种:套接字文件:这类文件通常用在网络数据连接,可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为[s],常在
/var/run目录中看到这种文件类型。
第六种:管道文件:FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误,FIFO是first-in-first-out的缩写,第一个属性是[p]。
更多Linux知识,可关注“老男孩Linux”公众号
2. Linux文件管理基础及编辑工具用法
文件名称区分大小写
文件名最长255个字符
包括路径在内文件名称最长4095个字节
蓝色-->目录:绿色-->可执行文件:红色-->压缩文件:浅蓝色-->链接文件:灰色-->其它文件
除了斜杠和NUL,所有字符都有效,使用特殊字符的目录名和文件不推荐使用,有些字符需要加引号来引用
标准Linux文件系统,文件名称大小写敏感
/boot: 内核引导文件存放目录
/bin: 所有用户使用的基本命令;不能关联至独立分区,系统启动会用到的程序
/sbin: 管理类的基本命令;不能关联至独立分区,系统启动会用到的程序
/lib: 系统启动时程序依赖的基本共享库文件及内核模块文件(/lib/moles)
/etc: 配置文件目录
/home: 普通用户家目录
/root: 管理员家目录
/media: 便携式移动设备挂载点
/mnt: 临时文件系统挂载点
/dev: 设备文件及特殊文件存储位置
/opt: 第三方应用程序安装位置,同/usr/local
/srv: 系统服务用到的数据
/tmp: 存储临时文件
/usr: 系统软件资源存放目录
/var: 系统运行时的可变动数据:/var/tmp:系统两次重启产生的临时数据
/proc: 内核与进程信息相关的虚拟文件系统
/sys: 硬件设备相关信息的虚拟文件系统
/selinux: selinux安全策略
meta data:
文件类型,权限,UID,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
文件类型:
-: 普通文件
d: 目录文件
b: 块设备
c: 字符设备
l: 符号链接文件
p: 管道文件pipe
s: 套接字文件socket
查看方式:
使用ll,ls -l: 看第一个字符,链接数,
ls -lih:
inode编号,文件类型,文件权限,硬链接个数,文件属主,文件属组,文件大小,文件修改时间
file命令,type命令,
stat命令: 文件详细信息,修改时间mtime,改变时间ctime,访问时间atime
-sm filename: 查看文件大小
文件扩展名:
源码.tar、.tar.gz、.tgz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,zip等。
.sh表示shell脚本文件,通过shell语言开发的程序。
.pl表示perl语言文件,通过perl语言开发的程序。
.py表示python语言文件,通过python语言开发的程序。
.html、.htm、.php、.jsp、.do表示网页语言的文件。
.conf表示系统服务的配置文件。
.rpm表示rpm安装包文件。
touch: 创建空文件和刷新时间戳
touch [OPTION]... FILE...
-a: 改变atime和ctime
-m: 改变mtime和ctime
-t: [[CC[YY[MMDDhhmm[.ss]]]]]
指定atime和mtime的时间戳
-c: 如果文件不存在,则不予创建
硬链接:
同一个文件多个名字
不支持跨分区,不支持目录
平级关系,删除原始文件不影响打开
iNode相同,链接数增长
创建语法,原始文件路径,相对于工作目录的路径
文件类型,普通文件
创建方式ln filename [linkname]
软链接:
与原始文件,不同的文件
支持跨分区,支持目录
依赖关系,删除原始文件即失效
iNode不同,链接数不会增长
创建语法,原始文件路径,相对于软链接的路径
文件类型显示l
创建方式ln -s filename [linkname]
实例说明:
cd ../data
mkdir -pv d1/d2
touch linux.txt
ln linux.txt d1/d2/linux.hlink
ln -s ../../linux.txt d1/d2/linux.slink
ln -s ../d2 d1/d2/d2.slink
tree
执行如图:
stat: 查看文件状态
示例: stat /etc/issue
stat/etc/motd
touch: 创建空文件和刷新时间
touch [OPTION]... FILE...
-a: 仅改变atime和ctime
-m: 仅改变mtime和ctime
-t: 指定atime和mtime时间戳
-c: 如果文件不存在,则不予创建
示例: touch /data/f1
cp: 复制文件和目录
cp [OPTION]... SOURCE... DIRECTORY
-i: 覆盖前提示
-n: 不覆盖
-r,-R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR --preserv=all
-p: 等同--preserv=mode,ownership,timestamp
-u: 只复制源比目标更新或目标不存在
-b: 目标存在,覆盖前先备份filename~
--backup=numbered: 目标存在,覆盖前先备份并加数字后缀
cp SRC DEST
SRC是文件:
如果目标不存在: 新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是文件: 将SRC中内容覆盖至DEST中
如果DEST是目录: 在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
SRC是多个文件:
DEST必须存在,且为目录
SRC是目录: 使用选项-r
如果DEST不存在: 则创建指定目录,复制SRC目录中所有文件至DEST中
如果DEST存在:
如果DEST是文件: 报错
如果DEST是目录:在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中
示例: mkdir -p /data/backup
cp -ab /etc/issue /etc/passwd /etc/group /data/backup
mv: 移动和重命名文件
mv [OPTION]... SOURCE... DIRECTORY
-f: 强制
-b: 目标存在,覆盖前先备份
示例: mv /etc/issue /data
mv /etc/issue /data/issue.bak
rm: 删除
rm [OPTION]... FILE...
-f: 强制删除
-r: 递归
--no-preserve-root 删除/
示例: rm -rf /data/d1/d2
tree: 显示目录树
-d:只显示目录
-L level: 指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
示例: tree /data
ls:列出指定目录下的内容
ls [OPTION]... [FILE]...
-a:显示所有文件包括隐藏文件
-A:显示除.和..之外的所有文件
-l,--long:显示文件的详细属性信息
-h:对文件大小进行单位换算,可能影响精度
-d:查看目录本身而非其内部的文件
-r:逆序显示文件
-R:递归显示文件
示例:ls -lah / 详细显示/目录下的所有文件(包括隐藏文件)
mkdir:创建目录
mkdir [OPTION]... DIRECTORY...
-p:自动按需创建父目录
-m:创建目录时给定权限
示例: mkdir -p /data/test/A/B
cat:正向查看文本内容
cat [OPTION]... [FILE]...
-n:给显示的文本行编号
-E:显示行结束符号$
示例: cat -n /etc/fstab
tail:显示文本内容,默认显示后10行
tail [OPTION]... [FILE]...
-n #:显示文本后#行内容
-f:查看文件尾部内容结束后不退出,跟随显示新增的行
示例: tail -8 /etc/passwd
head:显示文本内容,默认显示头10行
head [OPTION]... [FILE]...
-n #:显示文本头#行内容
示例: head -5 /etc/passwd
less:分屏显示文本内容,不主动退出
less [options] file [...]
Space键:显示文本下一屏内容
Enter键:只显示文本下一行内容
b键:显示文本上一屏内容
q键:退出
cp /etc/profile /tmp
vim /tmp/profile
:%s/^\s\+//
如图:
命令模式下输入:
:set tabstop=4
或写入用户配置文件~/.vimrc
3. 在LINUX下如何修改文件类型
d
目录文件。
l
符号链接(指向另一个文件,类似于瘟下的快捷方式)。
s
套接字文件。
b
块设备文件,二进制文件。
c
字符设备文件。
p
命名管道文件。
-
普通文件,或更准确地说,不属于以上几种类型的文件。
重点注意的是普通文件,在查看文件类型的时候使用file命令和ll命令结合来查看文件的类型
设备文件分为block
device
driver和character
device
drive两类。character
device
drive又被称为字符设备或裸设备raw
devices;
block
device
driver通常成为块设备。而block
device
driver是以固定大小长度来传送转移资料
;character
device
driver是以不定长度的字符传送资料
。且所连接的devices也有所不同,block
device大致是可以随机存取(random
access)资料的设备,如硬盘机或光盘机;而character
device刚好相反,依循先后顺序存取资料的设备,如印表机
、终端机等皆是。
1.字符设备只能以字节为最小单位访问,而块设备以块为单位访问,例如512字节,1024字节等
2.块设备可以随机访问,但是字符设备不可以
3.字符和块没有访问量大小的限制,块也可以以字节为单位来访问
the
type
printed
will
usually
contain
one
of
the
words
text
(the
file
contains
only
printing
characters
and
a
few
common
control
characters
and
is
probably
safe
to
read
on
an
ascii
terminal),
executable
(the
file
contains
the
result
of
compiling
a
program
in
a
form
understandable
to
some
unix
kernel
or
another),
data
meaning
anything
else
(data
is
usually
`binary'
or
non-printable).
any
file
that
cannot
be
identified
as
having
been
written
in
any
of
the
character
sets
listed
above
is
simply
said
to
be
``data''.
4. linux中套接字文件丢失怎么办
可以使用光盘rescue修复安装一下 如果你知道哪个文件丢失了,直接从别的系统把这个文件进去也可以的
5. linux中read,write和recv,send的区别
Linux的recv、send函数和read、write函数都可以用于套接字编程。
区别:
1、recv、send只用于套接字通信;
2、read、write是底层系统调用,只要是文件操作就都可以用, 比如套接字操作,套接字描述符属于是文件描述符的一种,套接字本身在Linux上就叫做套接字文件。
所以read、write函数不光可以用于套接字编程,也可以用于读取其他各种文件,比如用于文件编程读写普通文件。
6. linux 下创建套接字函数SOCKET()头文件问题。
client.c:62:错误,套接字还没有指明在这个范围
7. 如何使用Linux套接字
socket建立的套接字和文件描述符类似,要自己定义变量接收埃
socket建立的套接字和文件描述符类似,要自己定义变量接收埃
8. linux手册翻译——socket(7)
socket - Linux 套接字接口
本手册页描述了 Linux 网络套接字层用户接口。 套接字是用户进程和内核中网络协议栈之间的统一接口。 协议模块分为协议族(protocol families)(如 AF_INET、AF_IPX 和 AF_PACKET)和套接字类型(socket types)(如 SOCK_STREAM 或 SOCK_DGRAM)。 有关families和types的更多信息,请参阅 socket(2) 。
用户进程使用这些函数来发送或接收数据包以及执行其他套接字操作。 有关更多信息,请参阅它们各自的手册页。
socket(2) 创建套接字,connect(2) 将套接字连接到远程套接字地址,bind(2) 函数将套接字绑定到本地套接字地址,listen(2) 告诉套接字应接受新连接, accept(2) 用于获取具有新传入连接的新套接字。 socketpair(2) 返回两个连接的匿名套接字(仅为少数本地families如 AF_UNIX 实现)
send(2)、sendto(2) 和sendmsg(2) 通过套接字发送数据,而recv(2)、recvfrom(2)、recvmsg(2) 从套接字接收数据。 poll(2) 和 select(2) 等待数据到达或准备好发送数据。 此外,还可以使用 write(2)、writev(2)、sendfile(2)、read(2) 和 readv(2) 等标准 I/O 操作来读取和写入数据。
getsockname(2) 返回本地套接字地址, getpeername(2) 返回远程套接字地址。 getsockopt(2) 和 setsockopt(2) 用于设置或获取套接字层或协议选项。 ioctl(2) 可用于设置或读取一些其他选项。
close(2) 用于关闭套接字。 shutdown(2) 关闭全双工套接字连接的一部分。
套接字不支持使用非零位置查找或调用 pread(2) 或 pwrite(2)。
通过使用 fcntl(2) 在套接字文件描述符上设置 O_NONBLOCK 标志,可以在套接字上执行非阻塞 I/O。 然后所有会阻塞的操作(通常)将返回 EAGAIN(操作应稍后重试); connect(2) 将返回 EINPROGRESS 错误。 然后用户可以通过 poll(2) 或 select(2) 等待各种事件。
如果不使用poll(2) 和 select(2) ,还让内核通过 SIGIO 信号通知应用程序有关事件的信息。 为此,必须通过 fcntl(2) 在套接字文件描述符上设置 O_ASYNC 标志,并且必须通过 sigaction(2) 安装有效的 SIGIO 信号处理程序。 请参阅下面的信号讨论。
每个套接字域(families)都有自己的套接字地址格式,具有特定于域的地址结构。 这些结构的首字段都是整数类型的“家族”字段(类型为 sa_family_t),即指出自己的套接字域或者说是protocol families。 这允许对所有套接字域可以使用统一的系统调用(例如,connect(2)、bind(2)、accept(2)、getsockname(2)、getpeername(2)),并通过套接字地址来确定特定的域。
为了允许将任何类型的套接字地址传递给套接字 API 中的接口,定义了类型 struct sockaddr。 这种类型的目的纯粹是为了允许将特定于域的套接字地址类型转换为“通用”类型,以避免编译器在调用套接字 API 时发出有关类型不匹配的警告。
struct sockaddr 以及在AF_INET常用的地址结构struct sockaddr_in如下所示,sockaddr_in.sin_zero是占位符:
此外,套接字 API 提供了数据类型 struct sockaddr_storage。 这种类型适合容纳所有支持的特定于域的套接字地址结构; 它足够大并且正确对齐。 (特别是它足够大,可以容纳 IPv6 套接字地址。)同struct sockaddr一样,该结构体包括以下字段,可用于标识实际存储在结构体中的套接字地址的类型: sa_family_t ss_family;
sockaddr_storage 结构在必须以通用方式处理套接字地址的程序中很有用(例如,必须同时处理 IPv4 和 IPv6 套接字地址的程序)。
下面列出的套接字选项可以使用setsockopt(2) 设置并使用getsockopt(2) 读取。
当写入已关闭(由本地或远程端)的面向连接的套接字时,SIGPIPE 被发送到写入进程并返回 EPIPE。 当写调用指定 MSG_NOSIGNAL 标志时,不发送信号。
当使用 FIOSETOWN fcntl(2) 或 SIOCSPGRP ioctl(2) 请求时,会在 I/O 事件发生时发送 SIGIO。 可以在信号处理程序中使用 poll(2) 或 select(2) 来找出事件发生在哪个套接字上。 另一种方法(在 Linux 2.2 中)是使用 F_SETSIG fcntl(2) 设置实时信号; 实时信号的处理程序将使用其 siginfo_t 的 si_fd 字段中的文件描述符调用。 有关更多信息,请参阅 fcntl(2)。
在某些情况下(例如,多个进程访问单个套接字),当进程对信号做出反应时,导致 SIGIO 的条件可能已经消失。 如果发生这种情况,进程应该再次等待,因为 Linux 稍后会重新发送信号。
核心套接字网络参数可以通过目录 /proc/sys/net/core/ 中的文件访问。
These operations can be accessed using ioctl(2):
error = ioctl(ip_socket, ioctl_type, &value_result);
Valid fcntl(2) operations:
Linux assumes that half of the send/receive buffer is used for internal kernel structures; thus the values in the corresponding /proc files are twice what can be observed on the wire. Linux will allow port reuse only with the SO_REUSEADDR option when this option was set both in the previous program that performed a bind(2) to the port and in the program that wants to reuse the port. This differs from some implementations (e.g., FreeBSD) where only the later program needs to set the SO_REUSEADDR option. Typically this difference is invisible, since, for example, a server program is designed to always set this option.
9. linux 文件属性 lrwxrwxrwx
问题中的表示出该文件为符号链接文件,拥有权限为777
linux文件属性解读:
文件类型:
-:普通文件 (f)
d:目录文件
b:块设备文件 (block)
c:字符设备文件 (character)
l:符号链接文件(symbolic link file)
p:命令管道文件(pipe)
s:套接字文件(socket)
文件权限: 9位,每3位一组,每一组:rwx(读,写,执行),当改组不具有某一权限用-代替。
第一组为: 文件拥有者的权限, 该文件的拥有者可以读写,但不可执行;
第二组为: 同群组的权限
第三组为: 其他非本群组的权限
若想为某一文件具有该属性需要执行以下操作:
lnfilename1filename
chmod777filename
第一句是创建文件符号链接filename,第二句是为该符号链接文件创建777权限。