• 想不到写个cat命令都有这么多门道!

    《Unix环境高级编程》第一次读书分享会由廖同学主持,主要讲解 文件操作Unix/Linux 提供了这几个系统调用来操作文件:

    • open ,操作前先打开文件,获得一个 文件描述符file descriptor );
    • read ,从文件指定位置读取数据(传打开文件的描述符);
    • write ,将数据写到文件指定位置(传文件描述符);
    • lseek ,更新文件当前偏移量,偏移量决定 readwrite 读写位置;
    • close ,操作完毕后关闭文件,回收系统资源,并释放文件描述符;

    Unix/Linux 文件操作很简单,无非是打开、关闭、读写和指针移动( lseek ),对吧?尽管如此,简单的东西还是有很多需要考究的地方。

    为了提高学习效果,增强每位同学的参与感,我特地安排了课前作业。既然是学习文件操作,那就模仿着开发一个 cat 命令呗。

    cat 是一个非常简单的 Unix/Linux 命令,用于读取文件数据,并输出到标准输出。但就这么简单的一个作业,初学者还是很难写好。

    那么,实现 cat 命令背后都有哪些门道呢?简单的表象下,又暗藏哪些玄机呢?

    阅读全文
  • 带着新人刷《Unix环境高级编程》

    背景

    团队内来了不少年轻人,水平参差不齐,有些干了好几个年头还不知道什么是 进程间通信IPC )。

    当时在讨论一个后台服务的设计,它内部由若干协程组成,协程间需要传递一些数据,他想用 Redis 来做队列……我表示不解,在同一个程序内的通信,为什么要通过一个外部的 Redis 来进行呢?

    我很好奇,问他:你没学过 进程间通信IPC )吗?同一台主机下的进程进行通信,当然是首选操作系统提供的进程间通信机制,除非应用进程可能跨机器协作。但他一脸懵逼,表示没听过进程间通信……

    我当时有点震惊,一个干了好几年的后端,居然没听过进程间通信!这不是校招必考题吗?

    想当年没读《Unix环境高级编程》都不好意思去面试,而进程间通信就是其中一个主题。但他们可能起点较低,没认真学好这些基础课,也没经历过大厂面试的洗礼,因而功底比较薄弱。

    阅读全文
  • dd

    dd 命令用于拷贝文件数据,基本用法如下:

    1
    
    dd if=[输入文件] of=[输出文件] bs=1m count=1024
    
    • if ,指定输入文件;
    • of ,执行输出文件;
    • bs ,指定数据块大小;
    • count ,指定拷贝数据块个数;

    dd 命令打开输入文件读取数据,并写到输出文件。数据块大小由 bs 指定,读写块数由 count 指定,因此读写数据总量为 $bs \times count$ 。以上述命令为例,读写数据总量为 $1m \times 1024 = 1024m = 1g$ ,即 1GB

    • k ,即 KB
    • m ,即 MB
    • g ,即 GB
    阅读全文
  • Linux内核参数管理

    Linux 内核有很多可以定制化的参数 —— 内核参数 ( kernel parameters ), 斟酌设置内核参数对 系统调优 意义重大。 内核参数 涵盖内核的方方面面,包括 网络 ( net )、 文件系统 ( fs )等等。

    本文以 fs.file-max 参数为例,介绍设置内核参数的几种方式。

    procfs

    Linux 内核通过 procfs 伪文件系统暴露 内核参数 的访问接口, 通过 procfs 接口,用户可 设置 或者 查看 指定内核参数。 内核参数位于 /proc/sys 目录下,以 fs.file-max 参数为例,路径为 /proc/sys/fs/file-max

    查看参数只需读取对应文件内容:

    1
    2
    
    $ cat /proc/sys/fs/file-max
    94524
    
    阅读全文
  • 用man命令查看Linux手册页

    想要执行一个命令,却忘了用法?代码写了一半,却想不起某个系统调用的参数?很不幸,这种囧事几乎每天都在重演……

    没事,Google 一下呗。

    除此之外,还有更便捷的方式:运行 man 命令查看 手册页manual pages )。 手册页是 Linux/Unix 软件文档的一种常用形式,涵盖:命令、系统调用、库函数等方方面面。

    以查看 socket 系统调用手册为例,命令行下运行:

    1
    
    man socket
    
    阅读全文