当前位置:文档之家› linux相关命令以及网络编程点睛

linux相关命令以及网络编程点睛


先用ps -ef查看进程找到pid,然后pmap -x pid查看此进程占用资源的情况

sed替换命令 | sed 's/tiger/wolf/;s/after/before/'

查看串口信息
dmesg |grep ttyS*

计算三角形面积
echo -n "Enter base of a triangle : "
read b

echo -n "Enter height of a triangle : "
read h

# calculate it and display back
area=$(echo "scale=2;(1/2) * $b * $h"|bc)
echo "Area of a triangle is $area"


写信
mail gdhk11@https://www.doczj.com/doc/f412747565.html,
subject:hello
写正文(写完Ctrl+D)
收信
mail
&2读信
&r回信

计算器bc
scale=3;2/7保留三位小数
.285
也可以利用管道
echo "scale=7; 355/113" | bc 直接返回答案
进制转换echo "obase=9;ibase=10;700" | bc(九进制700转换为十进制是857)


tar -zc创建v打印过程f指定文件名 ok.tar.gz haha把haha文件夹打包并且改名为ok
tar -zx打开vf ok.tar.gz
压缩tar zcvf ok.tar.gz haha
解压tar zxvf ok.tar.gz
[一般只用tar不用其他]
gzip -1 file快速压缩-9最佳压缩
gunzip file.gz或者gzip -d file.gz可以进行解压

man ls获取和“ls”相关的帮助文档内容

find 目录比如/etc/ -name hello.c通过文件名在指定目录查找

grep 字符串 文件==查找此文件里面包含此字符串的内容


updatedb经常更新数据库可以使查找更快locate

数据同步写入磁盘: sync(回车)

统计行数和字数
wc -clmw server.c
63 82 1131 1131 server.c
表示此文件有63行82字共1131个字节

head -20 server.c打印此文件前20行的内容
tail -20 server.c打印此文件后20行的内容

ll=ls -l显示文件信息

【注意必须使用绝对路径:file1=/home/hp/file1】
ln file1 file2硬链接
ln -s file1 file2软链接
修改链接文件,源文件会发生变化。

w root或者w hp可以查看该用户的进程
ps -aux alluser uptime显示开始时间 x没有控制终端的进程
ps -aux --sort user根据用户排序
1号进程是/sbin/init
pstree -au以树状图显示程序


使用at安排计划任务
service atd status
at 12:25
>/bin/cp /root/* /home/hp
【全路径用whereis cp查看,把root文件夹里的所有文件复制到/home/hp目录下】
at -l或者atq可以查看计划任务
at -d 2或者atrm 2 可以删除第2个任务



ls -ahl查看文件所有组
chgrp 组名 文件名 可以改变文件所在组

vi编辑器
按esc后:kjhl上下左右移动光标,shift+HML光标移动到窗口第一中间最后一行
dd删除光标所在行

ps -o pid,ppid,pgid,sid,comm|less 查看进程、进程组和会话之间的关系

P2P=peer to peer点对点

服务器基本架构是一样的:I/O处理单元,逻辑单元,网络存储单元

一个进程有两个用户ID:真实用户UID和有效用户EUID
getuid()真实
geteuid()有效
getgid()真实组
getegid()有效组
将get改为set,则是从“获取”变成“设置”

dmesg|tail -f获取最后一次系统启动信息

dmesg>file.txt把信息写进文件可以发送给工程师以便解决问题

文件描述符的复制
dup2(oldfd,newfd)

UNIX进程间共享文件
进程打开文件表,系统打开文件表,内存i节点表。

写文件int fd=fopen(),*msg="将要写入文件内容";
if((write(fd,msg,strlen(msg)))!=strlen(msg)){报错}


读取文件并且打印到终端
int fd,count;char *filename="myfiel",msg[100];
if((fd=fopen(filename,O_RDONLY))==-1){报错}
if((count=read(fd,msg,100))<0){报错}
printf("file %s read success,get %d chars.\ncontent:\n%s\n",filename,count,msg);
close(fd);

./hello.sh有执行权时
sh hello.sh没有执行权时
exec 命令比如hello.sh


echo $0显示当前程序名称

nslookup https://www.doczj.com/doc/f412747565.html,查询网络主机的IP地址

1、write hp
hello,I am root!how are you?
2、write hp3、wall I love you给所有用户发送消息(群发)
4、talk hp

ftp匿名用户:user ftp ftp用户名和密码都是ftp
get readme.txt获取文件


登陆远程计算机并且执行命令
ssh root@host
ssh 192.168.217.6 命令比如“ls -l”(用双引号比较安全)

ping -c 5 192.168.217.11只进行5次否则会不停ping下去(count)
netstat -a -t显示所有TCP端口
netstat -r -n显示核心路由表
netstat -i显示网络接口使用状况


epoll可以大大提高网络服务器的支持人数
epoll的操作就这么简单,总共4个API:epoll_create, epoll_ctl, epoll_wait和close

int epfd=epoll_create(256);//建立
//定义ev以及写属性
struct epoll_event ev,events[20];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
ev.data.fd=listenfd;
ev.events=EPOLLIN|EPOLLET;
//注册epoll事件
epoll_ctl(epfd,EPOLL_CTL_ADD,listenfd,&ev);
for ( ; ; )
{ //等待epoll事件的发生
nfds=epoll_wait(epfd,events,20,500);


scp /etc/local.c root@HP:/home把本地etc目录下的local.c文件复制到机器HP上面的root用户的home目录下
scp root@HP:/home/file.c /etc把机器HP上面的root用户的home目录下的file.c文件复制到本地的etc目录下

select()
struct fd_set fds;int sock;
struct timeval timeout={3,0};//等待时间
FD_ZERO(&fds); //清空集合
FD_SET(sock,&fds); //添加描述符
FD_CLR(sock ,fd_set*);//删除描述符
FD_ISSET(sock ,fd_set* );//检查是否可以读写
maxfdp=sock>fp?sock+1:fp+1; //描述符最大值加1 【FILE *fp;fp=fopen("a.dat",w);】
switch(select(maxfdp,可读文件集合&fds,可写文件集合&fds,错误集合NULL,超时&timeout)){}


sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);用这一句可以设置接口为非阻塞【这样就要不停地查询端口】


两种类型的Internet套接口:“数据流套接口SOCK_STREAM”和“数据报套接口SOCK_DGRAM”

IP地址处理
inet_addr("132.241.5.10")把IP地址转化为无符号的整型数
inet_ntoa(ina.sin_addr);把地址转换成数字和句点的形



char addrstring[16] = "127.0.0.1";
inet_pton(AF_INET,addrstring,&addrnum);
将点分十进制格式的地址字符串转换为网络字节序整型数【addrnum=0x100007f】
inet_ntop(AF_INET,&addrnum,addrstring2,16)
将网络字节序整型数转换为点分格式的IP地址addrstring2=127.0.0.1

int sockfd;
if((sockfd=socket(AF_INET,SOCK_STREAM,O))==-1){}

--------------------------------------------------------------
struct sockaddr_in sin;
sin三个属性
sin_family=AF_INET协议族
sin_port=htons(3490)端口
sin_addr.s_addr=inet_addr("1192.168.236.135")地址或者=INADDR_ANY;自动填写IP
bzero(&(sin.sin_zero),sizeof(sin));将结构体中其他地方清零
bind(sockfd,(struct sockaddr *)&sin,sizeof(struct sockaddr));
[填写sin后将sockfd与sin绑定]

【int sockfd=socket();struct sockaddr_in sin定义之后填写属性;】

服务器:sockfd(共2个,在accept的时候建立newsockfd),server_addr并填写三个属性
[在服务器定义server_addr和client_addr]
[在客户端只要定义server_addr]

客户端:sockfd,client_addr并填写三个属性(sin_addr属性需要修改)
struct hostent *he;
if ((he=gethostbyname(argv[1])) == NULL){}
client_addr.sin_addr = *((struct in_addr *)he->h_addr);

【客户端好像不用bind而是直接connect】
if(connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1){}
char buf[10000];int num;
if((num=revv(sockfd,buf,1000,0))==-1){}
buf[num]='\0';加上结束符号
printf("接收到数据:%s\n",buf);
close(sockfd);

--------------------------------------------------------------

if(listen(sockfd,5)==-1){}

int newsockfd;struct sockaddr_in client;
if((newsockfd=accept(sockfd,(struct sockaddr *)&client,sizeof(struct sockaddr_in)))==-1)
{报错并且continue;}

printf("收到客户端%s的连接\n",inet_addr(client.sin_addr));

char *msg="写上你要说的话";
int len=strlen(msg);
if(send(newsockfd,msg,len,0)==-1){perror("send");close(newsockfd);exit(0)}

--------------------------------------------------------------
防止僵尸进程
if(!fork()){子进程动作}
while(waitpid(-1,NULL,WNOHANG)>0);//清除子进程
[
附录: waitpid(pid_t pid,int *status,int options)
pid=-1时,等待任何一个子进程退出

]
--------------------------------------------------------------

相关主题
文本预览
相关文档 最新文档