美文网首页
速查手册

速查手册

作者: jiangling500 | 来源:发表于2019-01-26 18:27 被阅读0次

    Linux命令

    查看所有状态的TCP连接

    注意:在Ubuntu下要加sudo才可以看到所有的TCP连接。

    netstat -antp
    ss -antp
    

    查看正在监听的TCP连接

    netstat -lntp
    ss -lntp
    

    解压缩

    tar zxvf
    

    启动/停止/重启vsftpd服务

    service vsftpd start
    service vsftdp stop
    service vsftpd restart
    

    在命令行上访问网页

    curl localhost
    

    which和whereis

    which:在PATH变量指定的路径中搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
    whereis:只能用于程序名的搜索,而且只能搜索二进制文件、man说明文件和源代码文件。

    查看进程

    ps -ef
    ps aux
    

    抓包

    # -nn表示不解析抓包中的域名(即不反向解析)、协议以及端口号
    tcpdump -i any 'tcp port 8888' -XX -nn -vv
    tcpdump -i any 'src host 127.0.0.1 and tcp src port 12345' -XX -nn -vv
    

    注意:在指定端口的时候,要指定是tcp的,还是udp的。

    nc

    nc -l 127.0.0.1 8888 # 在8888端口监听
    nc 127.0.0.1 8888 # 使用操作系统分配的随机端口连接到127.0.0.1:8888
    nc -p 12345 127.0.0.1 8888 # 指定用端口12345连接到127.0.0.1:8888
    

    利用nc传文件,注意这里要记住的是接收文件的是服务器端,发送文件的是客户端:

    nc -l ip地址 端口号 > 接收的文件名 #服务器端命令
    nc ip地址 端口号 < 发送的文件名 # 客户端命令
    

    使用lsof命令查看TCP连接

    lsof -i -Pn
    

    pstack

    pstack pid
    

    telent

    telnet 127.0.0.1 8888
    

    host

    host localhost
    

    route

    route add 10.10.98.18 gw 127.0.0.254
    

    利用grep查找结构体、宏等定义

    grep -r "struct timeval {" /usr/include -n
    

    利用vim打开文件时定位到指定行号

    vim test.txt +n 12
    

    wc命令统计行数

    ss -antp | wc -l
    

    从标准输入读取并重定向

    cat > test.txt
    

    注意:按Ctrl+D结束输入。

    svn

    svn co 路径
    svn co 路径 -r 版本号 
    svn up
    svn up -r 版本号
    svn log > log.txt
    svn cleanup
    

    git

    git checkout 路径 # 检出
    git pull # 更新到最新版
    

    Python

    命令行

    import sys
    sys.argv[1]
    sys.argv[2]
    

    Python网络编程API

    from socket import *
    from select import *
    
    server = socket(AF_INET, SOCK_STREAM) # 注意:没有第三个参数
    server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    server.bind(('', 12345)) # bind方法只接受一个参数
    server.listen(5)
    client, address = server.accpet() # 此处会阻塞,此时可以用nc连接上来
    
    client.recv(1024) # 此处会阻塞
    
    epoll = epoll()
    epoll.register(client.fileno(), EPOLLIN) # register方法第二个参数不写的话,默认为EPOLLIN
    epoll.poll(60) # 此处会阻塞,返回时会打印[(4, 1)],表示第4号文件可读(EPOLLIN == 1)
    
    client.recv(1024) # 因为执行到这里,表示已经有数据可读了,不会阻塞
    
    client.setblocking(0) # 设置成非阻塞
    client.recv(1024) # 没有数据可读,立即返回,返回错误码EAGAIN == 11
    
    epoll.modify(client.fileno(), EPOLLOUT) # 修改感兴趣事件
    
    epoll.unresigter(client.fileno()) # 取消监听
    client.close() # 关闭文件描述符
    

    网络编程

    TCP三次握手与四次挥手

    TCP三次握手与四次挥手.png

    TCP选项

    IPPROTO_TCP

    • TCP_NODELAY
    • TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT

    SOL_SOCKET

    • SO_REUSEADDR
    • SO_REUSEPORT
    • SO_KEEPALIVE
    • SO_SNDBUF
    • SO_RCVBUF
    • SO_SNDTIMEO
    • SO_RCVTIMEO
    • SO_LINGER(struct linger)

    TCP报文头部

    TCP报文头部.png

    Linux API

    Linux时间函数

    Linux的计时函数,用于获取当前时间:

    • time(2)/time_t(秒)
    • ftime(3)/struct timeb(毫秒)
    • gettimeofday(2)/struct timeval(微秒)
    • clock_gettime(2)/struct timerspec(纳秒)

    getaddrinfo

    // 监听套接字的创建
    int s = -1, rv;
    struct addrinfo hints, *servinfo, *p;
    bzero(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;
    
    if (0 != (rv = getaddrinfo(NULL, "12345", &hints, &servinfo))) // 第一个参数为域名或者字符串形式的IP地址,第二个参数为服务名或者字符串形式的端口号
    {
      fprintf(stderr, "getaddrinfo: %s", gai_strerror(rv));
      return -1;
    }
    for (p = servinfo; p != NULL; p = p->ai_next) // 域名可能对应多个IP地址
    {
      if (-1 == (s == socket(p->ai_family, p->ai_socktype, p->ai_protocol)))
      {
        continue;
      }
      if (0 != (rv = listen(s, 5)))
      {
        perror("listen");
        return -1;
      }
      goto end;
    }
    
    end:
    freeaddrinfo(servinfo);
    

    设置O_NONBLOCK和CLOEXEC

    // non_block
    int flags = fcntl(sockfd, F_GETFL, 0);
    flags |= O_NONBLOCK;
    fcntl(sockfd, F_SETFL, flags);
    
    // cloexec
    int flags = fcntl(sockfd, F_GETFD, 0);
    flags |= FD_CLOEXEC;
    fcntl(sockfd, F_SETFD, flags);
    

    Linux结构体

    addrinfo

    struct addrinfo {
        int                        ai_flags;
        int                        ai_family;
        int                        ai_socktype;
        int                        ai_protocol;
        socklen_t            ai_addrlen;
        struct sockaddr *ai_addr;
        char                    *ai_canonname;
        struct addrinfo  *ai_next;
    };
    

    pollfd

    struct pollfd
    {
        int fd;         /* file descriptor */
        short events;   /* requested events */
        short revent;   /* returned events */
    };
    

    epoll_event

    typedef union epoll_data
    {
        void *ptr;
        int fd;
        uint32_t u32;
        uint64_t u64;
    } epoll_data_t;
    
    struct epoll_event
    {
        uint32_t events;   /* Epoll events */
        epoll_data_t data; /* User data variable */
    };
    

    linger

    struct linger
    {
        int l_onoff;  // 0:off,非0:on
        int l_linger; // linger time
    };
    

    timespec

    struct timespec {
        time_t tv_sec; // 秒
        time_t tv_nsec; // 纳秒
    };
    

    itimerspec

    struct itimerspec {
        struct timespec it_interval; // 间隔
        struct timespec it_value; // 首次到期时间
    };
    

    tm

    struct tm {
        int tm_sec;    /* Seconds (0-60) */
        int tm_min;    /* Minutes (0-59) */
        int tm_hour;   /* Hours (0-23) */
        int tm_mday;   /* Day of the month (1-31) */
        int tm_mon;    /* Month (0-11) */ // +1
        int tm_year;   /* Year - 1900 */ // +1900
        int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
        int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
        int tm_isdst;  /* Daylight saving time */
    };
    

    timeval

    struct timeval {
        time_t      tv_sec;     /* seconds */
        suseconds_t tv_usec;    /* microseconds */
    };
    

    杂项

    秒、毫秒、微秒和纳秒

    • 秒(second):s
    • 毫秒(millisecond):ms
    • 微秒(microsecond):us
    • 纳秒(nanosecond):ns

    Mac配置

    使用homebrew安装/更新软件

    brew install git # 安装
    brew uninstall git # 卸载
    brew upgrade git # 更新
    

    Mac配置多个Java版本

    https://segmentfault.com/a/1190000013131276

    Apache

    sudo apachectl start # 启动Apache
    sudo apachectl stop # 停止Apache
    sudo apachectl restart # 重启Apache
    

    Apache服务器默认的web根目录在:/Library/WebServer/Documents,在该文件目录下的文件,所有用户都可以进行访问。

    安装MySQL

    https://www.jianshu.com/p/07a9826898c0

    常用连接

    Ubuntu安装MySQL

    https://www.cnblogs.com/zhuyp1015/p/3561470.html

    相关文章

      网友评论

          本文标题:速查手册

          本文链接:https://www.haomeiwen.com/subject/itpijqtx.html