天道酬勤,学无止境

linux

In C on linux how would you implement cp

问题 我在谷歌代码上发现了超过 50 行的代码,这对于我正在尝试做的事情完全没有必要。 我想用 C 做一个非常简单的cp实现。 这样我就可以使用缓冲区大小并查看它如何影响性能。 我只想使用像read()和write()这样的 Linux API 调用,但我没有运气。 我想要一个定义为特定大小的缓冲区,以便可以将 file1 中的数据读入缓冲区,然后写入 file2 并继续直到 file1 达到 EOF。 这是我尝试过的,但它没有做任何事情 #include <stdio.h> #include <sys/types.h> #define BUFSIZE 1024 int main(int argc, char* argv[]){ FILE fp1, fp2; char buf[1024]; int pos; fp1 = open(argv[1], "r"); fp2 = open(argv[2], "w"); while((pos=read(fp1, &buf, 1024)) != 0) { write(fp2, &buf, 1024); } return 0; } 它的工作方式是./mycopy file1.txt file2.txt 回答1 这段代码有一个重要的问题,即不管你读了多少字节,你总是写1024字节。 还: 您不检查命令行参数的数量。 您不检查源文件是否存在

2022-07-11 09:46:32    分类:技术分享    c   linux   copy

Inability of Linux Kernel to support 1GB physical memory and the HIGHMEM solution

问题 我一直在阅读 [1] 以了解 HIGHMEM。 文章说“但是,如果内核希望能够直接访问系统的物理内存,它必须设置页表,将该内存映射到内核的地址空间部分”。这正是我感到困惑的地方。 直接访问物理内存是什么意思? 这是否意味着明确说明物理地址?(AFAIK,这在 Linux 内核中是不可能的)然后他们继续说“它必须设置页表,将该内存映射到内核的地址空间部分”。 那是您在 HIGHMEM 解决方案中所做的事情,不是吗? 请帮助我了解导致 HIGHMEM 解决方案的问题。 [1] http://lwn.net/Articles/75174/ 回答1 1 但是,如果内核希望能够直接访问系统的物理内存,它必须设置页表,将该内存映射到内核的地址空间部分我认为作者想强调内核需要页表来寻址物理内存。 2 t 必须建立页表,将该内存映射到内核的地址空间部分地址空间的内核部分也需要页表来映射该内存,而高端内存则没有直接的内核映射。 您可以在那篇文章中找到“当内核需要处理高内存中的页面时,它必须显式设置一个特殊的页表以首先将其映射到内核的地址空间”。 回答2 首先,这仅与 x86-32 架构相关 如果你仔细阅读这篇文章,你就会明白其中的概念。 下面是一种简化(而且有点粗略)的方式来看待它: 1) 内核开始时为 32 位平台完全映射出可寻址内存(无论实际可用内存如何),我说 1GB 给我 3GB

2022-07-11 09:34:35    分类:技术分享    linux   linux-kernel   operating-system   kernel   virtual-memory

How to enable hocr font info in tesseract 4?

问题 我在 ubuntu 16.04 上使用 tessseract 4。 因此,当在 tesseract 中使用 hocr 功能并在 hocr 配置文件(hocr_font_info 1)中激活字体信息后,我仍然没有得到“x_font”信息。 有没有其他方法可以在 tesseract4 中启用字体信息?

2022-05-17 04:31:53    分类:技术分享    linux   tesseract   hocr

Error on mount through php "exec"

问题 我正在尝试挂载一个 iscsi 虚拟磁盘,但是如果我通过 php 中的 exec 函数执行命令,这会给我这个错误: mount: special device /dev/sdf1 does not exist 。 但是,如果我直接在控制台中运行命令,它运行良好!! 我能做些什么? 我以一种很好的方式获得/dev/sdf1 ,它存在,但仅通过 php 不起作用。 谢谢 我正在使用sudo运行sudo并在控制台中以www-data用户身份运行它,所以我认为这是相同的环境。 sudo mount -t ext3 /dev/sdf1 /san_disks/RIBS_2 sudoers 文件有以下几行: www-data ALL = (root) /usr/bin/iscsiadm, /bin/mount, /bin/umount %www-data ALL=NOPASSWD: ALL 它在控制台中工作。 回答1

2022-05-17 04:31:17    分类:技术分享    php   linux   exec   mount   ISCSI

Get vendor name of SCSI

问题 回答1 -> cat /sys/bus/scsi/devices/target13:0:0/13:0:0:0/vendor Marvell 回答2 回答3 sg3_utils 软件包包含向设备发送 SCSI 命令的实用程序。 安装 sg3_utils 后,在您感兴趣的设备上运行 sg_inq 命令。 例如:#sg_inq /dev/sda 上述命令将在设备上运行标准 SCSI 查询并提供供应商名称和其他详细信息。 回答4 struct udev *context = udev_new(); struct udev_enumerate *enumerator = udev_enumerate_new(context); udev_enumerate_add_match_subsystem(enumerator, "scsi"); udev_enumerate_scan_devices(enumerator); struct udev_list_entry *scsi_devices = udev_enumerate_get_list_entry(enumerator); struct udev_list_entry *current = 0; udev_list_entry_foreach(current, scsi_devices) { struct udev_device

2022-05-17 03:30:04    分类:技术分享    c   linux   SCSI

Capturing stdout in Azure Linux App Service via NodeJs

问题 我已将 NodeJS 应用程序部署到 Linux 应用服务,该服务记录到标准错误和标准输出。 Linux 应用服务中的诊断日志功能似乎不起作用,因为表存储中没有任何内容。 Kudu 中唯一的日志来自 docker 容器部署时的日志。 之后,它什么也不记录。 Kudu 中的 SSH 组件不起作用,即使遵循官方设置文档也是如此。 有没有人想出一种方法来捕获标准输出和标准错误? 或者可以推荐一个他们已经在 Linux 应用服务平台上成功使用 NodeJS 的库? 回答1 您可以使用 Azure CLI 2.0 来捕获标准输出。 尝试使用以下命令。 az webapp log config -g <resource group name> -n <app name> --application-logging true --detailed-error-messages true --level verbose az webapp log tail -g <resource group name> -n <app name> 您可以通过-h获得帮助 root@shui:~# az webapp log config -h Command az webapp log config: Configure web app logs. Arguments --application

2022-05-17 03:29:53    分类:技术分享    node.js   linux   azure   azure-web-app-service

How to view syslog in ubuntu?

问题 从这个问题跟进,LogBack Syslog not working java 我使用下面的命令在ubuntu 16.04 中查看syslog ,但得到以下结果。 是正确的查看方式吗? user@xxx:~$ tail -f /var/log/syslog Jun 6 23:08:50 xxx systemd[1]: Starting Hostname Service... Jun 6 23:08:50 xxx dbus[889]: [system] Successfully activated service 'org.freedesktop.hostname1' Jun 6 23:08:50 xxx systemd[1]: Started Hostname Service. Jun 6 23:09:41 xxx gnome-session[2645]: (nautilus:2860): Gtk-WARNING **: Attempting to read the recently used resources file at '/home/xxx/.local/share/recently-used.xbel', but the parser failed: Failed to open file '/home/xxx/.local/share/recently-used

2022-05-17 03:27:04    分类:技术分享    linux   ubuntu   logging   sys

Bypassing SSL Certificate Validation on DotNet Core Service Stack

问题 我知道ServicePointManager.ServerCertificateValidationCallback不再存在于 .Net Core 中,而是替换为: using(var handler = new System.Net.Http.HttpClientHandler()) { using (var httpClient = new System.Net.Http.HttpClient(handler)) { handler.ServerCertificateCustomValidationCallback = (request, cert, chain, errors) => { return true; }; } } 然而,我们目前正在使用ServiceStack.Core库,据我所知,它既不公开这样的属性,也不公开处理程序本身。 我将如何告诉 ServiceStack 客户端绕过此代码中的 ssl 验证? using(var client = new JsonServiceClient("https://www.google.com")) { var response = client.Get("/results"); } 如果有办法,这在 Windows 和 Linux 上都一样吗? 回答1 JsonServiceClient建立在 .NET

2022-05-17 03:25:36    分类:技术分享    c#   linux   servicestack   .net-core

How can Linux ptrace be unsafe or contain a race condition?

问题 我想通过ptrace()实现一个沙箱,我启动一个进程,它的所有子进程都会创建(包括孙子进程等)。 ptrace()父进程,即主管。 将是一个简单的 C 或 Python 程序,从概念上讲,它将限制文件系统访问(基于路径名和访问方向(读或写)和套接字访问(例如,不允许创建套接字)。 我应该注意什么,以便ptrace() d 进程及其子进程(递归)无法绕过沙箱? 主管在fork()时间应该做些什么来避免竞争条件? 是否可以在没有竞争条件的情况下从子进程读取例如rename()的文件名参数? 这是我已经计划做的事情: PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE在fork() ing 时避免(某些)比赛规则默认禁止所有系统调用,并组成允许系统调用的白名单确保*at()系统调用变体(例如openat )受到适当保护 我还应该注意什么? 回答1 主要问题是许多系统调用参数,如文件名,作为用户空间指针传递给内核。 任何允许同时运行并且对指针指向的内存具有写访问权限的任务都可以在您的主管检查这些参数之后以及内核对其进行操作之前有效地修改这些参数。 当内核跟随指针时

2022-05-17 01:11:29    分类:技术分享    linux   sandbox   ptrace

Does anyone know a workaround for no-new-privileges blocking selinux transitions in docker?

问题 我正在尝试使用 no-new-privileges 标志和启用 Selinux 在 docker 下运行(任何)容器。 基本信息: CentOS 7.3 on bare metal docker-ce 17.05.0-ce (edge) from official repo docker-ce-selinux 17.05.0-ce (edge) from official repo (我最初运行稳定,并切换到边缘版本希望得到修复) 我正在尝试做的事情: docker run --security-opt "no-new-privileges" -it --rm busybox /bin/sh 发生什么了: standard_init_linux.go:178: exec user process caused "operation not permitted" 支持所有功能 - Selinux 在未指定 no-new-privileges 时工作; 当守护进程在没有 selinux 支持的情况下运行时,no-new-privileges 有效。 许可与强制模式无效。 码头工人信息: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 40 Server Version: 17.05.0-ce Storage Driver

2022-05-17 01:11:04    分类:技术分享    linux   docker   SELinux