小编Ric*_*ick的帖子

为什么每次有人执行`ls -l`命令时都会使用/etc/passwd?

APUE阅读,只是感到好奇:

每次用户登录 UNIX 系统和每次有人执行ls -l命令时都会使用密码文件。

ls passwd

28
推荐指数
1
解决办法
3029
查看次数

为什么 telnet 被认为是一种协议?不就是一个简单的TCP发送/回声程序吗?

这更像是一个概念性问题。我需要一些说明。


今天我正在学习一些套接字编程的东西,并根据Beej 的网络编程指南编写了一个简单的聊天服务器和聊天客户端。(聊天服务器接收客户端消息并向所有其他客户端发送消息)

我复制了 聊天服务器并编写了自己的聊天客户端

聊天客户端只是一个将stdin输入发送到服务器并从服务器打印套接字数据的程序。

后来我注意到指南说我可以telnet用来连接到服务器。我试过了,它奏效了。


我不熟悉 telnet,很长一段时间我都不知道它到底是什么。

所以现在我的经历让我感到困惑:

telnet 不就是一个简单的 TCP 发送/回显程序吗?是什么让成为协议的东西如此特别?我的愚蠢聊天客户端程序没有创建 [应用程序] 协议。

来自维基百科Communication_protocol

在电信中,通信协议是一种规则系统, 它允许通信系统的两个或多个实体通过物理量的任何种类的变化来传输信息。

Telnet 创建了哪些规则?telnet host port,为原始输入/输出打开一个 TCP 流套接字?那不是规则。

tcp telnet protocols

12
推荐指数
2
解决办法
4466
查看次数

什么是系统调用中断?

我正在阅读APUE中断系统调用一章让我感到困惑。

我想根据书中写下我的理解,请指正。

  1. 早期 UNIX 系统的一个特点是,如果进程在“慢”系统调用中被阻塞时捕获到信号,则系统调用将被中断。系统调用返回错误并 errno设置为EINTR。这是在假设发生信号并且进程捕获它之后完成的,很有可能发生了一些应该唤醒被阻塞的系统调用的事情。

    所以说早期的UNIX 系统有一个特性:如果我的程序使用系统调用,它会被中断/停止,如果程序在任何时候捕捉到信号。(默认处理程序也算作捕获吗?)

    例如,如果我有一个read系统调用,它读取 10GB 数据,当它正在读取时,我发送任何一个信号(例如kill -SIGUSR1 pid),然后read将失败并返回。


  1. 为了防止应用程序不得不处理中断的系统调用,4.2BSD 引入了某些中断系统调用的自动重启。被自动重新启动的系统调用ioctlreadreadvwritewritevwait,和waitpid。正如我们所提到的,这些功能中的前五个功能只有在它们在慢速设备上运行时才会被信号中断;wait并且waitpid 在捕获到信号时总是被中断。由于这会导致一些应用程序出现问题,如果操作被中断,则不希望操作重新启动,4.3BSD 允许进程在每个信号的基础上禁用此功能。

所以在引入自动重启之前,我不得不自己处理中断的系统调用。我需要编写如下代码:

中断系统调用的问题在于我们现在必须显式地处理错误返回。典型的代码序列(假设读取操作并假设我们想要重新启动读取,即使它被中断)将是:

again:
    if ((n = read(fd, buf, BUFFSIZE)) < 0) {
        if (errno == EINTR)
        goto again; /* just an interrupted system call */
        /* handle other errors …
Run Code Online (Sandbox Code Playgroud)

signals system-calls interrupt

7
推荐指数
1
解决办法
3万
查看次数

为什么 /usr/lib/x86_64-linux-gnu 目录下有 libc.so.6?

在我阅读了libc6-dev 和 libc6 之间的问题 diff 后,我启动了一个新的Ubuntu 20.04 LTSVPS 并检查了一些 Ubuntu 软件包中包含哪些文件。

我检查了libc6-devhttps://packages.ubuntu.com/focal/amd64/libc6-dev/filelist)和libc6https://packages.ubuntu.com/focal/amd64/libc6/filelist)。

正如我们所看到的,libc6-dev这些共享库位于 下/usr/lib/x86_64-linux-gnu/,并且libc6共享库位于 下/lib/x86_64-linux-gnu/

但让我好奇的是:

  1. 我也有( )libc.so.6 下的。并且不删除. 这是从哪里来的?/usr/lib/x86_64-linux-gnu/libc.so.6 -> libc-2.31.so*apt install remove libc6-devlibc.so.6libc.so.6

  2. packge安装-rw-r--r-- 1 root root 298 Apr 7 09:24 libc.solibc6-dev只有298字节,什么?为什么?

sudo apt list --installed输出: https: //pastebin.com/geDjY2z2
ll -h | grep libc输出: https: //pastebin.com/UHn5QVt1 …

linux glibc

5
推荐指数
1
解决办法
6844
查看次数

POSIX 程序员手册与 Linux 程序员手册

我想看看pthread_mutex_trylock.

通过打字man pthread_mutex_trylock,我得到了No manual entry for pthread_mutex_trylock

然后我看到一个帖子建议做sudo apt-get install manpages-posix manpages-posix-dev

之后,我看到如下描述:

PTHREAD_MUTEX_LOCK(3POSIX)                               POSIX Programmer's Manual                              PTHREAD_MUTEX_LOCK(3POSIX)

PROLOG
       This manual page is part of the POSIX Programmer's Manual.  The Linux implementation of this interface may differ (consult the cor?
       responding Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux.
Run Code Online (Sandbox Code Playgroud)
  1. 这个POSIX Programmer's Manual和我平时看到的Linux Programmer's Manual有什么区别?

  2. 这句话是什么意思:

此接口的 Linux 实现可能不同(有关 Linux …

man

4
推荐指数
1
解决办法
1604
查看次数

为什么 ssh 指纹现在以 base64 格式而不是十六进制给出?

我看到一个老问题,显示ssh连接到服务器时,会显示十六进制指纹。

为什么现在以base64格式给出?有什么好处?

我知道MD5坏了,现在默认是sha256,但是对于指纹格式,base64 编码和十六进制字符串是/表示相同的事情。那么改变格式有什么好处呢?

ssh

3
推荐指数
1
解决办法
2883
查看次数

ls --color=auto,为什么他们提供这样的选项,因为默认情况下有 --color=always ?

man ls

With --color=auto,
       ls emits color codes only when standard output is connected to a terminal.
Run Code Online (Sandbox Code Playgroud)

只是出于好奇。当标准输出未连接到终端时,如果我发出颜色会有什么影响?

因为发射颜色需要额外的计算,所以如果标准输出没有连接到终端,我们就不需要它并且可以节省一些计算?

ls colors

2
推荐指数
1
解决办法
4209
查看次数

标签 统计

ls ×2

colors ×1

glibc ×1

interrupt ×1

linux ×1

man ×1

passwd ×1

protocols ×1

signals ×1

ssh ×1

system-calls ×1

tcp ×1

telnet ×1