AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-413026

Daniel Walker's questions

Martin Hope
Daniel Walker
Asked: 2024-09-05 22:39:30 +0800 CST

检查 procfs 是否存在基于临时文件的容器

  • 5

我正在开发一个应用程序,并将其作为 Docker 映像发布。我的应用程序由一个可执行文件组成,该文件仅链接到 libc 和 libcrypto。我正在考虑通过静态链接可执行文件并将其放入临时映像中来缩小映像大小。

我的问题来自我的测试。在测试期间,我想确认我的应用程序(它监听多个端口(TCP 和 UDP))是否正常运行。我一直通过 运行来做到这一点cat /proc/net/<file>。docker exec但是,使用临时映像,我将无法访问cat甚至sh。

我知道在测试期间我可以将 BusyBox 放入容器内。但是,有没有办法只使用 来检查 proc 文件系统docker?

我试过

docker cp the_container:/proc/net/tcp .

但出现了错误

守护进程的错误响应:在容器 the_container 中找不到文件 /proc/net/tcp

docker
  • 1 个回答
  • 30 Views
Martin Hope
Daniel Walker
Asked: 2024-03-12 12:03:53 +0800 CST

容器有时不属于网络

  • 6

我有一个通过 docker-compose 启动的 Docker 容器。配置文件指定它应该是两个网络的一部分。然而,有时(大约五分之一的运行),容器只是其中一个网络的成员(即docker network inspect <network_id>不显示容器)。这是我的 MRE:

Dockerfile

FROM alpine:latest

ENTRYPOINT ["sleep", "infinity"]

docker-compose.yaml

version: "3.7"

services:
  foo:
    image: foo
    init: true
    networks:
      - network1
      - network2

networks:
  network1:
  network2:

docker network inspect foo_network2节目

[
    {
        "Name": "foo_network2",
        "Id": "2ef317904b46eddc3dcd8242f1ee41eff02756e016c701c2f2366bbbb166670e",
        "Created": "2024-03-12T04:15:24.57501242Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.144.0/20",
                    "Gateway": "192.168.144.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "network2",
            "com.docker.compose.project": "foo",
            "com.docker.compose.version": "2.24.6"
        }
    }
]

而docker network inspect foo_network1显示

[
    {
        "Name": "foo_network1",
        "Id": "a505fd52cd34c9ecdad1aa27058cc7cb47243d82283a7c7949b211be422a10e8",
        "Created": "2024-03-12T04:15:24.535686504Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.128.0/20",
                    "Gateway": "192.168.128.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "823f84eff688b9bc8e207b208cfb23852a2bc777b121107ab9d0ee48248e0b1d": {
                "Name": "foo-foo-1",
                "EndpointID": "37606efb0ea637c686edac7ccebab033dfd36f0cce9599d162a540a81d687b2f",
                "MacAddress": "02:42:c0:a8:80:02",
                "IPv4Address": "192.168.128.2/20",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "network1",
            "com.docker.compose.project": "foo",
            "com.docker.compose.version": "2.24.6"
        }
    }
]

我在 Mac 上运行 Docker Desktop 4.28.0(引擎 25.0.3,Compose:2.24.6)。我无法在 Ubuntu 23.10(引擎 25.0.2,docker-compose 1.29.2)上重现此行为。

networking
  • 1 个回答
  • 44 Views
Martin Hope
Daniel Walker
Asked: 2024-02-09 06:31:30 +0800 CST

容器的网关是什么?

  • 5

我的 Macbook 上运行着 Docker Desktop 4.25.2。运行后

docker network create foo
docker run --rm -it --network foo ubuntu:22.04 bash

我跑到docker inspect <container_name>另一个航站楼。在“网络设置”下,我看到

"Networks": {
    "foo": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": [
            "a3166231defa"
        ],
        "NetworkID": "21a369e01a3ba29ad63e8add84ca9a9aa167a3cfcb2dfe7747dfc9f18ed761b3",
        "EndpointID": "95b582ce02a4c15d452d36ede34b3ad3e3291c4e991049a384b296bd8096da4d",
        "Gateway": "192.168.0.1",
        "IPAddress": "192.168.0.2",
        "IPPrefixLen": 20,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "02:42:c0:a8:00:02",
        "DriverOpts": null
    }
}

我看到网关是192.168.0.1。但是,当我ifconfig | grep inet在主机上运行时,我看不到这样的地址。我的理解是主机始终是 Docker 网络上的网关。

networking
  • 1 个回答
  • 38 Views
Martin Hope
Daniel Walker
Asked: 2023-10-26 04:19:56 +0800 CST

将流量从 tun 设备路由到以太网

  • 5

我有两个正在运行的 Docker 容器(Ubuntu 22.04)。他们位于同一网络上,因此可以互相交谈(我已经用 验证了这一点nc)。在第一个容器中,我运行了一个程序,该程序创建了一个 tun 设备,为其指定了 IPv4 地址,然后将其启动。 ip addr节目

4: tun0: <POINTOPOINT,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 5.6.7.8/32 scope global tun0
       valid_lft forever preferred_lft forever
89: eth0@if90: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:30:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.48.2/20 brd 192.168.63.255 scope global eth0
       valid_lft forever preferred_lft forever

然后,我的程序将 TCP SYN 数据包写入 tun 设备,源 IP 为 5.6.7.8,目标 IP 为 192.168.48.3(另一个容器)。然而,数据包永远不会到达另一个容器。我已经运行tcpdump,数据包出现在tun0界面上,但没有出现在eth0. tcpdump另一个容器上显示没有数据包到达。

为什么数据包不会被路由通过eth0?

当我通过启动容器时docker-compose,我设置了

sysctls:
  - net.ipv4.ip_forward=1

对于第一个容器。

我还设置了 NAT:

iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -I FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

以下是重新创建我正在做的事情的方法:

Dockerfile:

FROM ubuntu:22.04

RUN apt -y update && \
    apt -y install build-essential iptables tcpdump

WORKDIR /app 

发射.c:

#include <arpa/inet.h>
#include <fcntl.h>
#include <linux/if_tun.h>
#include <net/if.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

#define TUN_DEVICE "tun0"

#define SOURCE_IP "5.6.7.8"
#define DESTINATION_IP "192.168.48.3" // change to the actual address

unsigned char packet[] = {
    0x45, 0x00, 0x00, 0x54, 0x3a, 0x58, 0x40, 0x00, 0x40, 0x01, 0x03, 0x9d,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x48, 0xc1,
    0x00, 0x03, 0x00, 0x01, 0xa1, 0x81, 0x3a, 0x65, 0x00, 0x00, 0x00, 0x00,
    0x0d, 0x81, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,
    0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
    0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37
};

/*
Note: The IPv4 checksum will be wrong.  Run this program once and cause it to emit
the packet by sending the process SIGUSR1.  Capture the packet with tcpdump which
will tell you that the checksum is wrong and what it should be.  The result goes
at offset 10 in the packet.
*/

int tun_fd = -1;

void signal_handler(int signum)
{
    (void)signum;

    dprintf(STDOUT_FILENO, "Emitting packet\n");

    if ( write(tun_fd, packet, sizeof(packet)) < 0 ) {
        _exit(1);
    }
}


int set_address_and_bring_up(void)
{
    int ret = -1, sock;
    struct ifreq ifr = {.ifr_name = TUN_DEVICE};
    struct sockaddr_in addr = {.sin_family = AF_INET};

    inet_pton(AF_INET, SOURCE_IP, &addr.sin_addr);
    memcpy(&ifr.ifr_addr, &addr, sizeof(addr));

    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if ( sock < 0 ) {
        perror("socket");
        return -1;
    }

    if ( ioctl(sock, SIOCSIFADDR, &ifr) == -1 ) {
        perror("ioctl (SIOCSIFADDR)");
        goto done;
    }

    ifr.ifr_flags = IFF_UP;
    if ( ioctl(sock, SIOCSIFFLAGS, &ifr) == -1 ) {
        perror("ioctl (SIOCSIFFLAGS)");
        goto done;
    }

    ret = 0;

done:
    close(sock);
    return ret;
}

int tun_device_create(void) {
    int fd;
    struct ifreq ifr = {.ifr_name = TUN_DEVICE, .ifr_flags = IFF_TUN | IFF_NO_PI};

    fd = open("/dev/net/tun", O_RDWR);
    if ( fd < 0 ) {
        perror("open");
        return -1;
    }

    if ( ioctl(fd, TUNSETIFF, &ifr) == -1 ) {
        perror("ioctl (TUNSETIFF)");
        goto error;
    }

    if ( set_address_and_bring_up() != 0 ) {
        goto error;
    }

    return fd;

error:
    close(fd);
    return -1;
}

int main() {
    struct sigaction action = {.sa_handler = signal_handler};

    inet_pton(AF_INET, SOURCE_IP, packet + 12);
    inet_pton(AF_INET, DESTINATION_IP, packet + 16);

    tun_fd = tun_device_create();
    if ( tun_fd < 0 ) {
        return 1;
    }

    sigaction(SIGUSR1, &action, NULL);

    while (1) {
        pause();
    }

    return 0;
}

iptables_script.sh:

#!/bin/sh -ex

iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -I FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

启动容器:

# First container
docker run --rm -it --cap-add NET_ADMIN -v $PWD:/app --device=/dev/net/tun my_image bash

# Second container
docker run --rm -it ubuntu:22.04 bash

在第一个容器中运行:

test "`cat /proc/sys/net/ipv4/ip_forward`" -eq 1
gcc emit.c
./a.out &
./iptables_script.sh
kill -s USR1 `pgrep a.out`
network-interface
  • 1 个回答
  • 73 Views
Martin Hope
Daniel Walker
Asked: 2023-08-30 01:50:58 +0800 CST

将输入输入到 apt install

  • 6

我正在尝试安装python3.9在基于 ubuntu:20.04 的 Dockerfile 中。当我手动运行时apt -y install python3.9,它会提示我输入与我的时区相对应的地理区域和城市。对我来说,这分别对应于选项 2 和 106(即纽约)。然而,当我跑步时

echo '2\n106' | apt -y install python3.9

apt输出

Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 111, <STDIN> line 1.

Current default time zone: '/UTC'

如何apt正确输入输入值?

ubuntu
  • 1 个回答
  • 32 Views
Martin Hope
Daniel Walker
Asked: 2023-06-13 22:50:02 +0800 CST

拉取网站的签名机构证书

  • 6

我公司的内部网络上运行着一个 Docker 注册中心,比如 registry.com。我知道注册表是合法的,但是当我运行时

docker login registry.com

它抱怨该证书是由一个未知的授权机构签署的。

有没有办法从命令行下载/构建权限的 .crt 文件,以便我可以将它添加到/usr/local/share/ca-certificates并运行update-ca-certificates?

我知道我可以将 registry.com 添加到"insecure-registries"in/etc/docker/daemon.json但我想要一个不是特定于 Docker 的更通用的解决方案。

certificates
  • 1 个回答
  • 17 Views
Martin Hope
Daniel Walker
Asked: 2023-04-27 22:30:34 +0800 CST

Docker 网络的 bridge 和 veth 的关系

  • 5

在我的 Ubuntu 22.04 主机上,我使用网桥驱动程序创建了一个 Docker 网络,并在该网络中启动了一个容器。

在我的主机上运行ip addr,​​我看到这两个界面:

5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
        valid_lft forever preferred_lft forever
    inet6 fe80::42:d4ff:fe4f:b939/64 scope link
        valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
    link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
        valid_lft forever preferred_lft forever

显然,这两个接口是相关的,因为第二个接口将第一个接口列为“master”。什么关系?

这个问题的一些背景:我实际上有两个 Docker 网络,每个网络中都有一个容器。使用 iptables,我在它们之间设置了 NAT(或者,至少,我认为我已经设置了),并试图从另一个容器 ping 一个容器。在主机上运行 Wireshark,我看到 ICMP 数据包从网桥接口传入并从 veth 接口(而不是其他网桥)传出。

networking
  • 1 个回答
  • 12 Views
Martin Hope
Daniel Walker
Asked: 2023-04-27 04:45:04 +0800 CST

在 Docker 网络之间设置 NAT

  • 5

我的目标是在不同的网络上运行两个 Docker 容器,并让我的主机 (Ubuntu 22.04) 执行 NAT,以便第一个网络可以访问第二个网络。

我的设置:

docker network create network1
docker network create network2

docker run --rm -it --network network1 ubuntu:22.04 bash

# In other terminal
docker run --rm -it --network network2 ubuntu:22.04 bash

第一个容器的地址为 172.19.0.2,第二个容器的地址为 172.20.0.2。

在我的主机上运行ip addr,​​我看到接口分别是br-deadbeef和br-feedbeef。

然后我跑

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i br-deadbeef -o br-feedbeef -j ACCEPT
iptables -A FORWARD -i br-feedbeef -o br-deadbeef -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o br-feedbeef -j MASQUERADE

在主机上作为 root。

但是,ping 172.20.0.2从第一个容器开始并没有成功。在主机上运行 Wireshark 显示br-deadbeef网络上的 ICMP 数据包从 172.19.0.2 到 172.20.0.2 但没有回复。

我错过了什么?

networking
  • 1 个回答
  • 55 Views
Martin Hope
Daniel Walker
Asked: 2023-01-23 17:36:52 +0800 CST

Ubuntu 容器中没有 IPv6 环回地址

  • 5

我的 MacBook 上有一个通过 VirtualBox 运行的 Ubuntu 22.04 虚拟机。 ip addr显示(除其他外):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

在这个虚拟机中,我跑了

docker run --rm -it ubuntu:22.04 bash

在容器内,我安装net-tools并运行了ifconfig. 包含的输出

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

为什么宿主机中有 IPv6 环回地址而容器中没有?

networking
  • 1 个回答
  • 37 Views
Martin Hope
Daniel Walker
Asked: 2023-01-11 06:40:35 +0800 CST

Ctrl-y 不恢复 zsh 中的行

  • 7

我在 Ubuntu 22.04 上运行了 zsh 5.8.1。当我在提示符上输入一些文本并键入Ctrl+u时,它会按预期清除该行。但是,当我输入Ctrl+y时,它只显示

$ ^Y

是什么导致无法粘贴 readline 缓冲区?

这是我的 .zshrc:

export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME=""

plugins=(
    colored-man-pages
    colorize
    git
    zsh-autosuggestions
    zsh-interactive-cd
    vi-mode
)

ZSH_AUTOSUGGEST_STRATEGY=(history completion)

source $ZSH/oh-my-zsh.sh
unalias ls
unalias ll
unalias lsa

unalias gst
alias gs='git status'
alias gcob='git checkout -b'

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
bindkey "^[." insert-last-word

_sig_array=($(kill -l))

_return_status() {
    ret=$?
    if [ $ret -ne 0 ]; then
        if [ $ret -le 128 ]; then
            echo $ret
        else
            sig=$(( $ret - 128 ))
            desc=$_sig_array[sig]
            if [ "$desc" != INT -a "$desc" != TSTP ]; then
                echo SIG$desc
            fi
        fi
    fi
}

_return_status_formatted() {
    out=$(_return_status)
    if [ -n "$out" ]; then
        echo "%F{red}[$out]%f "
    fi
}

_current_branch_formatted() {
    out=$(current_branch)
    if [ -n "$out" ]; then
        if [ -n "$(git status -s | grep -v '^\?')" ]; then
            color=magenta
        else
            color=cyan
        fi
        echo "%F{$color}(git:$out)%f "
    fi
}

export PS1='%F{blue}%n%f@%F{green}%m%f:%F{red}%~%f $ $(_return_status_formatted)$(_current_branch_formatted)'
zsh
  • 1 个回答
  • 26 Views
Martin Hope
Daniel Walker
Asked: 2022-10-02 10:47:01 +0800 CST

IPv6环回地址的二进制格式

  • 3

在一个终端中,我跑了

$ nc -l -6 ::1 5000

在另一个终端,我跑了

$ cat /proc/net/tcp6

并看到了这一行:

   0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...

为什么说我在听::1:0:0:0而不是在听::1?

ipv6 proc
  • 1 个回答
  • 75 Views
Martin Hope
Daniel Walker
Asked: 2022-04-24 19:05:51 +0800 CST

为什么 zsh 监听 22 端口?

  • 4

我通过 SSH 连接到虚拟机并查看/proc/<pid>/net/tcp我的 zsh shell。我看到这条线

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
 ...
 3: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 19127 1 0000000000000000 100 0 0 10 0

除非我误解了这是在说什么,否则 zsh 正在侦听端口 22。我知道 zsh 进程是运行 sshd 的进程的后代,但 sshd 在分叉后不会关闭侦听套接字吗?

sshd zsh
  • 1 个回答
  • 1867 Views
Martin Hope
Daniel Walker
Asked: 2022-04-23 19:40:56 +0800 CST

/proc/<pid>/fd/ 中的权限是什么意思?

  • 3

我正在查看运行的ls -l结果/proc/<pid>/fd/:

lr-x------ 1 root root 64 Apr 22 23:13 0 -> /dev/null
lrwx------ 1 root root 64 Apr 22 23:13 1 -> 'socket:[19700]'
lrwx------ 1 root root 64 Apr 22 23:13 2 -> 'socket:[19700]'
...

符号链接上的权限是什么意思?我首先想到的是它们代表了文件描述符的“模式”。但是,如果确实如此,那为什么stdout可读?此外,为什么所有描述符都是可执行的?

permissions symlink
  • 2 个回答
  • 178 Views
Martin Hope
Daniel Walker
Asked: 2022-02-01 16:41:15 +0800 CST

使用随机结构字段构建 Linux 内核

  • 1

我正在尝试构建 Linux 内核(版本 5.16)。我知道有一个编译时选项可以随机化各种结构字段(由宏表示randomized_struct_fields_start)。但是,我正在查看make menuconfig,但找不到正确的选项。

linux kernel
  • 1 个回答
  • 126 Views
Martin Hope
Daniel Walker
Asked: 2022-01-27 10:09:52 +0800 CST

以编程方式确定套接字文件的各个方面

  • 0

我正在尝试编写一个程序(用 C 语言),作为其功能之一,它遍历 procfs 以查找打开的套接字并确定诸如目标/源端口/地址之类的东西(类似于 netstat 和 lsof 所做的)。但是,一旦找到套接字文件,我不确定使用哪个系统调用。例如,假设我已经打电话回来readlink了。我可以用这些信息做什么,单独使用系统 API 来获取套接字的详细信息?/proc/123/fd/4socket:[56789]

我试过跑步strace,netstat但不清楚发生了什么。我看到了read,/proc/123/fdinfo/4但我不明白这是怎么回事。

例如,fdinfo一个打开的连接(到 127.0.0.1:5000 的 TCP 连接)的文件显示

pos:    0
flags:  04002
mnt_id: 9
socket proc
  • 1 个回答
  • 124 Views
Martin Hope
Daniel Walker
Asked: 2021-12-06 12:17:03 +0800 CST

find - 带析取的通配符

  • 5

我之前编写了一个脚本,它在目录树中搜索 .h 和 .c 文件,然后在它们上运行 clang-format:

find $directory -name '*.[hc]' -exec clang-format -i {} \;

这正如预期的那样工作。现在我想将 .cpp 文件添加到搜索中。然而,既不

-name '*.{[hc],cpp}'

也不

-name '{*.[hc],*.cpp}'

工作。也就是说,他们找不到文件。

我知道如果我使用find's-o选项,我可以让我的逻辑工作。但是,必须有一种方法可以使用单个-name指令来执行此操作。

find wildcards
  • 2 个回答
  • 493 Views
Martin Hope
Daniel Walker
Asked: 2021-10-30 18:42:02 +0800 CST

功能选项卡完成与包装命令的不匹配

  • 0

我在我的鱼壳中定义了一个函数:

function cl --wraps=cd
    cd $argv && ls -l --color=auto
end

根据man function,该--wraps选项“导致函数从给定的包装命令继承完成”。

但是,当我键入cl 并开始使用制表符完成时,会显示包含非目录(如 .c 文件)的选项。但是,当我键入cd 然后按制表符完成时,我只显示目录。

我是否错误地定义了我的功能?

function autocomplete
  • 1 个回答
  • 71 Views
Martin Hope
Daniel Walker
Asked: 2021-10-28 08:09:57 +0800 CST

fish - 使用制表符完成达到的最大递归深度

  • 0

用我的鱼壳,我定义了别名

alias black='command black -l 110'

当我输入black我的 shell 并开始制表符完成时,我得到了错误

完成:达到最大递归深度

类似的别名也会发生同样的事情,例如

alias readelf='command readelf -W'
alias autocomplete
  • 1 个回答
  • 88 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve