1 linux相关命令
1.1 Split
split可以将一个大文件拆分成指定大小的多个文件,拆分速度快,拆分一个1G大小的文件花费不到1S的时间。
每3行拆分成一个文件,拆分后的文件名以name开头,以数字作为后缀后缀长度为1,例如split -l 3 test -d -a 1 name
按字节进行拆分,例如每三个字节拆分成一个文件,默认不加单位就是字节,也可以带单位比如KB,MB等,例如:split -b 3 test -d -a 1 new
1.2 vi编辑二进制文件
打开文件后使用如下命令转换成xxd
echo -n"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" >test.bin
跟上 -n 选项否则会被自动加上一个换行。
#vim -b test.bin
:%!xxd
转成二进制,可以进行编辑。
用下面的命令把它转换回来:
:%!xxd -r
参考:http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html
1.3 sed实现换行符号替换
sed ":a;N;s/\n//g;ta" a.txt
1.4 脚本创建一个连续的文件
for i in `seq 0 112`; do echo -e "a";done |sed ':a;N;s/\n//g;ta' >test
回车,代码:CR ASCII码:\r ,十六进制,0x0d,回车的作用只是移动光标至该行的.
换行,代码:LF ASCII码:\n ,十六进制,0x0a,换行至下一行行首起始位置
1.5 文件系统时间戳
一般来说,Linux会给文件记录了三个时间,changetime, modify time和access time。
用noatimemount的话,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。
可以通过stat来查看文件的三个时间。
1.6 查看根目录中哪个文件占满
使用du -sh * 查看根目录下每个文件夹的大小
1.7 ubuntu允许root登陆
对sshd进行配置
$ vi /etc/ssh/sshd_config
找到PermitRootLogin no一行,改为PermitRootLogin yes
重启 openssh server
$ sudo service ssh restart
2 网络UDP发送程序
2.1 client:
/*client.c*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#define MAXBUF 256
int main(int argc, char const *argv[])
{
int s = 0;
int n = 0;
int reuse = 1;
int port = 1987;
struct sockaddr_in srv;
char buf[MAXBUF] = {0};
/*解析参数*/
if (argc != 2)
{
printf("Usage:%s ServerIP\n", argv[0]);
return -1;
}
bzero(&srv, sizeof(srv));
srv.sin_family = PF_INET;
srv.sin_addr.s_addr = inet_addr(argv[1]);
srv.sin_port = htons(port);
/*创建 UDP 套节字*/
s = socket(AF_INET, SOCK_DGRAM, 0);
if(s<0){
perror("socket");
return -1;
}
while(1){
memset(buf, 0, MAXBUF);
/*读取用户输入到buf中*/
fgets(buf, MAXBUF, stdin);
/*通过套节字 s 向服务器发送数据*/
if ((n = sendto(s, buf, strlen(buf), 0, (struct sockaddr *) &srv, sizeof(struct sockaddr))) < 0)
{
perror("sendto");
return -1;
}else{
printf("send to %s(port=%d) len %d:%s\n", argv[1], port, n, buf);
}
}
}
2.2 server.c
/*server.c*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#define MAXBUF 256
int main(int argc, char const *argv[])
{
int s = 0;
int n = 0;
int reuse = 1;
int cli_len = sizeof(struct sockaddr);
int port = 1987;
char buf[MAXBUF] = {0};
struct sockaddr_in addr, cli;
/*初始化本地监听端口信息*/
bzero(&addr, sizeof(addr));
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
/*创建UDP套节字*/
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s<0)
{
perror("socket");
return -1;
}
/*允许端口复用*/
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
/*绑定指定端口*/
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("bind");
return -1;
}
while(1){
memset(buf, 0, MAXBUF);
/*从套节字s中读取数据*/
n = recvfrom(s, buf, MAXBUF, 0, (struct sockaddr *)&cli, &cli_len);
if(n<0){
perror("recvfrom");
return -1;
}else{
printf("receive msg from %s(port=%d) len %d: %s\n",inet_ntoa(cli.sin_addr), port, n, buf);
}
}
return 0;
}
3 ubuntu设置本地镜像源
挂载镜像到/mnt中
本地源变成镜像:
# apt-cdrom -m -d /mnt add
4 Unbuntu安装docker
apt-get install docker
apt-get install docker.io
下载hello-world来进行测试
# docker pull hello-world