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-594253

Schmaehgrunza's questions

Martin Hope
Schmaehgrunza
Asked: 2025-03-03 09:12:15 +0800 CST

如何在 Bash 中使用 Unix 域套接字

  • 5

首先 - 我知道 IPC 的 fifo,但读过有关双向unix 域套接字的文章,我想测试一下,用命令行和 bash 可以做什么。
我问过 Chat GPT,但我得到的信息毫无用处,而且示例不起作用。
我想实现两个进程可以同时写入或读取,而不需要 fifo 的概念。
如果我在 fifo 上设置了一个用于读取的文件描述符。我也可以用两个或更多进程向 fifo 写入。但数据会混合,第一个读取器会读取所有混合内容。
进程 A 应该接收进程 B 写入的内容,进程 B 应该接收进程 A 写入的内容。

我使用以下测试代码完成了这项工作:

bash 文件:进程A

while true; do
   for ((i=0;i<10;i++)); do
      echo "$((i+1))A" > "/proc/$PID/fd/6";
      sleep 1;
   done
   while read -t 0.01 dataB; do echo "Received from process B: $dataB"; done
done

bash 文件:processB

while true; do
   for ((i=0;i<10;i++)); do
      echo "$((i+1))B";
      sleep 0.5;
   done
   while read -t 0.01 dataA <"/proc/$PID/fd/5"; do echo "Received from process A: $dataA" > /dev/tty; done
done

1号航站楼:

exec 6> >(nc -lU unixSocket | PID=$$ bash processA)

在进程 A 中:
此后,我可以通过“/proc/$PID/fd/6”向 unix 套接字写入数据,
并使用 stdin 和 stdout 从 unix 套接字读取数据
并进入终端。

2 号航站楼:

exec 5< <(PID=$$ bash processB | nc -U unixSocket)

在进程 B 中:
此后,我可以使用 stdout 写入 unix 套接字,
使用“/proc/$PID/fd/5”从 unix 套接字读取,
使用 /dev/ttx 写入终端,
并且 stdin 在键盘上。


第一个问题:为什么文件描述符 5 和 6 没有从进程替换中打开的子进程继承?
我必须通过导出 PID 来获取它们 - 为什么?

第二个问题:进程 A 和 B 可以双向通信,但我需要再打开两个主进程,它们正在执行文件描述符重定向的 exec 命令并启动进程替换
exec 5< <(PID=$$ bash processB | nc -U unixSocket)。
但我最终想要的是这样的主进程和子进程之间的通信,仅此而已。
现在我得到:主 1 打开子进程 1,主 2 打开子进程 2,子进程 1 可以与子进程 2 双向通信。

提前感谢您的帮助

bash
  • 1 个回答
  • 74 Views
Martin Hope
Schmaehgrunza
Asked: 2024-06-16 17:37:48 +0800 CST

计算 df 可用空间[重复]

  • 5
此问题这里已有答案:
创建可容纳 1G 文件的 FAT 格式磁盘映像 (2 个答案)
3 天前关闭。

我创建了一个 5 GB 的分区 -> /dev/sdd2,
然后创建了一个文件系统sudo mke2fs -N 700 -t ext4 -L test2 /dev/sdd2
,并将根保留空间设置为 0sudo tune2fs -r 0 /dev/sdd2

sudo dumpe2fs -h /dev/sdd2显示:

Filesystem volume name:   test2
Last mounted on:          <not available>
Filesystem UUID:          64f07e45-910b-4e65-92ba-3ce7fdf1242f
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1216
Block count:              1220864
Reserved block count:     0
Overhead clusters:        21320
Free blocks:              1199538
Free inodes:              1205
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      596
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         32
Inode blocks per group:   2
Flex block group size:    16
Filesystem created:       Sun Jun 16 11:26:49 2024
Last mount time:          n/a
Last write time:          Sun Jun 16 11:30:12 2024
Mount count:              0
Maximum mount count:      -1
Last checked:             Sun Jun 16 11:26:49 2024
Check interval:           0 (<none>)
Lifetime writes:          2417 kB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      9ce4737d-6beb-437d-a2fe-adaaa6142d11
Journal backup:           inode blocks
Checksum type:            crc32c
Checksum:                 0x7b46d4d5
Journal features:         (none)
Total journal size:       64M
Total journal blocks:     16384
Max transaction length:   16384
Fast commit length:       0
Journal sequence:         0x00000001
Journal start:            0

df /dev/sdd2显示:

/dev/sdd2        4798176    24   4781768   1% /media/lithium/test2

4798176−4781768=16408

16 MB 在哪里?df 如何计算可用空间 - 公式?为什么 inode 是 1216,我定义为 700?

有人能帮助我吗?

特别感谢 Marcus Müller。

对吗?我尝试了分区统计以更好地了解文件系统,保存为 dfe,由于 dumpe2fs 信息
用法而需要 sudo,例如:dfe --help or sudo dfe /dev/sdd2

#!/usr/bin/bash
declare -a df_ARR
declare dumpFS df_output FSvolumeName FSuuid FSfeatures FStype FSosType partition mounted unit=M\
        journalSize inodeTableSize partitionSize overheadISize overheadIISize rootReservedSize usedSize freeSize availableSize GDTreservedSize\
        DP usedPercent useablePercent availablePercent fullReservedPercent\
        C1=$'\e[38;2;0;200;0m' C2=$'\e[38;2;200;200;0m' C3=$'\e[38;2;120;180;220m' C4=$'\e[38;2;220;110;120m'\

declare -i inodeCount inodeSize inodesFree partitionBlocks blockSize freeBlocks usedBlocks journalBlocks rootReservedBlocks GDTreservedBlocks\
           inodeTableBlocks overheadIBlocks overheadIIBlocks df_1kBlocks availableBlocks nUserUseableBlocks\
           max_blockNumber_L max_SizeNumber_L\
           blocksPerGroup inodesPerGroup groupDescriptorSize

DP=$(locale decimal_point)
divide_INTtoFLOAT ()
   {
   local -n LOC_var="$1"; local LOC_c; local -i LOC_a=$2 LOC_b=$3 LOC_d=$4+1 LOC_e=-$4
   (( LOC_c=LOC_a*10**LOC_d/LOC_b))
   LOC_a=${LOC_c: -1}; LOC_c=${LOC_c:0:-1}
   ((LOC_a>4 ? LOC_c++ : 0))
   LOC_b=${#LOC_c}; for ((LOC_a=LOC_d;LOC_a>LOC_b;LOC_a--)); do LOC_c="0$LOC_c"; done
   LOC_var="${LOC_c:0: LOC_e}$DP${LOC_c: LOC_e}"
   }

calculate_SizeInUnits ()
   {
   local -n var=$1; local value unitSTR; local -i i l lN; 
   case $unit in
      "K") value=$2;unitSTR="KB";;
      "M") value=$(($2/1000));unitSTR="MB";;
      "G") value=$(($2/1000**2));unitSTR="GB";;
      "k") value=$(($2*1000/1024));unitSTR="kiB";;
      "m") value=$(($2*1000/1024**2));unitSTR="MiB";;
      "g") value=$(($2*1000/1024**3));unitSTR="GiB";;
   esac

   lN=${value: -1}; value=${value:0:-1}
   if ((lN>4)); then ((value++)); fi
   l=${#value}; for ((i=3;i>l;i--)); do value="0$value"; done
   var="${value:0:-2},${value: -2} $unitSTR"
   }
   
assign_Values ()
   {
   local -n var=$1; local value;
   [[ $dumpFS =~ "$2"[^$'\n']* ]]; value=${BASH_REMATCH[0]}; value=${value#*:}
   var=${value##*( )}
   }
   

if [[ $1 == "--help" ]]; then
echo -e "\e[38;2;123;183;51m\e[1;4mUsage:\e[39m\e[22;24;4:0m dfe [\e[38;2;240;240;0m\e[3mOPTION...\e[39m\e[23m] [\e[38;2;240;240;0m\e[3mDEVICE\e[39m\e[23m]"
echo -e "prints disk usage and partition info!\n"
echo -e "\e[38;2;123;183;51m\e[1;4mDepends On:\e[39m\e[22;24;4:0m commands - df, dumpe2fs\n"
echo -e "\e[38;2;123;183;51m\e[1;4mOptions:\e[39m\e[22;24;4:0m"
echo -e "\t-u \e[38;2;240;240;0m\e[3munit   \e[39m\e[23m    \e[38;2;103;134;250mCHAR\e[39m ... K, M, G for KB, MB, GB - k, m, g for KiB, MiB, GiB - Standard: M"
echo -e "\t-v \e[38;2;240;240;0m\e[3mversion\e[39m\e[23m         ... output version information and exit."
exit
fi

while getopts "u:v" "option"; do
   case $option in
      "u") unit=$OPTARG;;
      "v") echo "df(e)xtended - version: 1.00 - 2024"; exit;;
      "?") exit 2;;
   esac
done
shift $((OPTIND-1))

shopt -s extglob

dumpFS=$(dumpe2fs -h "$1" 2> /dev/null)
if [[ $dumpFS == *"Couldn't find valid filesystem superblock"* ]]; then echo "Couldn't find valid filesystem superblock!" 1>&2; exit 5; fi

assign_Values "FSvolumeName" "volume name" ; assign_Values "FSuuid" "UUID"; assign_Values "FSfeatures" "features"; assign_Values "FSosType" "OS type";
assign_Values "inodeCount" "Inode count"; assign_Values "inodeSize" "Inode size"; assign_Values "inodesFree" "Free inodes"
assign_Values "partitionBlocks" "Block count"; assign_Values "blockSize" "Block size"; assign_Values "freeBlocks" "Free blocks"; #assign_Values "gdtReservedBlocks" "GDT blocks"
assign_Values "journalBlocks" "Total journal blocks"; assign_Values "GDTreservedBlocks" "GDT"
assign_Values "rootReservedBlocks" "Reserved block count"
assign_Values "blocksPerGroup" "Blocks per group"; assign_Values "inodesPerGroup" "Inodes per group"; assign_Values "groupDescriptorSize" "descriptor size"

df_output=$(df -T "$1"); df_output=${df_output#*$'\n'}; df_ARR=($df_output)
partition=${df_ARR[0]}; FStype=${df_ARR[1]}; df_1kBlocks=${df_ARR[2]}; usedBlocks=${df_ARR[3]}; availableBlocks=${df_ARR[4]}; mounted=${df_ARR[6]}

((usedBlocks=usedBlocks/4,\
  availableBlocks=availableBlocks/4,\
  inodeTableBlocks=inodeSize*inodeCount/4096,\
  df_1kBlocks=df_1kBlocks/4,\
  overheadIBlocks=partitionBlocks-(journalBlocks+inodeTableBlocks+df_1kBlocks+GDTreservedBlocks),\
  overheadIIBlocks=df_1kBlocks-(rootReservedBlocks+usedBlocks+availableBlocks),\
  nUserUseableBlocks=availableBlocks+usedBlocks ))

calculate_SizeInUnits "partitionSize"    "$((partitionBlocks*4096))"
calculate_SizeInUnits "journalSize"      "$((journalBlocks*4096))"
calculate_SizeInUnits "inodeTableSize"   "$((inodeTableBlocks*4096))"
calculate_SizeInUnits "GDTreservedSize"  "$((GDTreservedBlocks*4096))"
calculate_SizeInUnits "overheadISize"    "$((overheadIBlocks*4096))"
calculate_SizeInUnits "overheadIISize"   "$((overheadIIBlocks*4096))"
calculate_SizeInUnits "rootReservedSize" "$((rootReservedBlocks*4096))"
calculate_SizeInUnits "usedSize"         "$((usedBlocks*4096))"
calculate_SizeInUnits "freeSize"         "$((freeBlocks*4096))"
calculate_SizeInUnits "availableSize"    "$((availableBlocks*4096))"
calculate_SizeInUnits "nUserUseableSize" "$((nUserUseableBlocks*4096))"

max_blockNumber_L=${#partitionBlocks}; max_SizeNumber_L=${#partitionSize}

echo -n "$C1" >/dev/tty; echo -n "Partition:";  echo -n $'\e[39m '>/dev/tty; echo $'\t'"$partition - $FSosType file system $FStype"
echo -n "$C1" >/dev/tty; echo -n "Volume Name:";echo -n $'\e[39m '>/dev/tty; echo $'\t'"$FSvolumeName"
echo -n "$C1" >/dev/tty; echo -n "UUID:     ";  echo -n $'\e[39m '>/dev/tty; echo $'\t'"$FSuuid"
echo -n "$C1" >/dev/tty; echo -n "Features:";   echo -n $'\e[39m '>/dev/tty; echo $'\t'"$FSfeatures"
echo -n "$C1" >/dev/tty; echo -n "Mounted on:"; echo -n $'\e[39m '>/dev/tty; echo $'\t'"$mounted"
echo -n "$C1" >/dev/tty; echo -n "Groups:";     echo -n $'\e[39m '>/dev/tty; printf "\t%-${max_blockNumber_L}s" "$(((partitionBlocks+blocksPerGroup-1)/blocksPerGroup))"; echo " - Group descriptor size: $groupDescriptorSize bytes - Inodes per group: $inodesPerGroup - Blocks per group: $blocksPerGroup" 
divide_INTtoFLOAT "usedPercent" "$(((inodeCount-inodesFree)*100))" "$inodeCount" "3"
echo -n "$C1" >/dev/tty; echo -n "Inodes:";     echo -n $'\e[39m '>/dev/tty; printf "\t%-${max_blockNumber_L}s" "$inodeCount"; echo " - Free inodes: $inodesFree (used: ${usedPercent}%) - Inode size: $inodeSize bytes - Inode ratio: 1 inode per $(((partitionBlocks+inodeCount-1)/inodeCount)) blocks"
echo -n "$C1" >/dev/tty; echo -n "Blocks:";     echo -n $'\e[39m '>/dev/tty; printf "\t%-${max_blockNumber_L}s" "$partitionBlocks"; echo " - Free blocks: $freeBlocks total - Block size: $blockSize bytes"


echo -n "   Journal             :   "; printf "%${max_blockNumber_L}s" "$journalBlocks";     echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$journalSize"
echo -n "   Inode table        ~:   "; printf "%${max_blockNumber_L}s" "$inodeTableBlocks";  echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$inodeTableSize"
echo -n "   Other FS overhead 1 :   "; printf "%${max_blockNumber_L}s" "$overheadIBlocks";   echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$overheadISize"
echo -n "   GD table reserved   :   "; printf "%${max_blockNumber_L}s" "$GDTreservedBlocks"; echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$GDTreservedSize"
echo -n "$C3" >/dev/tty
echo -n "   Other FS overhead 2 :   "; printf "%${max_blockNumber_L}s" "$overheadIIBlocks";  echo -n " blocks   "; printf "%${max_SizeNumber_L}s" "$overheadIISize";  echo $' \u2500\e[17b\u252C\u2500 df blocks: '"$df_1kBlocks - $((df_1kBlocks*4)) 1k blocks"
echo -n "   Root reserved       :   "; printf "%${max_blockNumber_L}s" "$rootReservedBlocks";echo -n " blocks   "; printf "%${max_SizeNumber_L}s" "$rootReservedSize";echo $' \e[18b\u2502'

echo -n "$C2" >/dev/tty
echo -n "   Used blocks         :   "; printf "%${max_blockNumber_L}s" "$usedBlocks";        echo -n " blocks   "; printf "%${max_SizeNumber_L}s"   "$usedSize";      echo $' \u2500\u252C\u2500 nUser useable \u2502'
echo -n "   Available blocks    :   "; printf "%${max_blockNumber_L}s" "$availableBlocks";   echo -n " blocks   "; printf "%${max_SizeNumber_L}s"   "$availableSize"; echo $' \u2500\u2534\u2500\e[15b\u2518'
echo -n $'\e[39m' >/dev/tty
echo    "                          "$'\u2500\e['"$((max_blockNumber_L+max_SizeNumber_L+9))b"
divide_INTtoFLOAT "availablePercent" "$((availableBlocks*100))" "$partitionBlocks" "3"
divide_INTtoFLOAT "fullReservedPercent" "$(((partitionBlocks-availableBlocks)*100))" "$partitionBlocks" "3"
echo -n "$C4" >/dev/tty
echo -n "   Partition blocks    :   "; printf "%${max_blockNumber_L}s" "$partitionBlocks";   echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$partitionSize (available: ${availablePercent}% - full & reserved: ${fullReservedPercent}%)"

divide_INTtoFLOAT "useablePercent" "$((nUserUseableBlocks*100))" "$partitionBlocks" "3"
echo -n "$C2" >/dev/tty
echo -n "   nUser useable       :   "; printf "%${max_blockNumber_L}s" "$nUserUseableBlocks";echo -n " blocks   "; printf "%${max_SizeNumber_L}s\n" "$nUserUseableSize (useable: ${useablePercent}%)" 
echo -n $'\e[39m' >/dev/tty
filesystems
  • 1 个回答
  • 51 Views
Martin Hope
Schmaehgrunza
Asked: 2024-05-14 04:51:51 +0800 CST

了解 /sys/bus/usb 中的 DEVPATH /BUS/USB

  • 6

主板:我的主板背面板上
有6xUSB2.0 端口和2xUSB3.0 端口。
我板载有 3 个 USB2.0 连接器和 1 个 USB3.0 连接器。

在我的 hightower 前面:
我有一个 USB 接口,带有2xUSB2.0 端口,连接到主板 USB2.0 连接器之一,我有2xUSB3.0 端口,连接到主板 USB3.0 连接器。

输出:
lspci -v | awk 'BEGIN {nextCount=3} /USB controller/ {print $0; nextCount=0; next;} //{nextCount++; if (nextCount==2) {print $0;}}'

00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (prog-if 10 [OHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 18, NUMA node 0, IOMMU group 5
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller (prog-if 20 [EHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 17, NUMA node 0, IOMMU group 5
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (prog-if 10 [OHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 18, NUMA node 0, IOMMU group 6
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller (prog-if 20 [EHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 17, NUMA node 0, IOMMU group 6
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (prog-if 10 [OHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 18, NUMA node 0, IOMMU group 11
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (prog-if 10 [OHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 18, NUMA node 0, IOMMU group 13
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller (prog-if 20 [EHCI])
    Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 17, NUMA node 0, IOMMU group 13
02:00.0 USB controller: Renesas Technology Corp. uPD720202 USB 3.0 Host Controller (rev 02) (prog-if 30 [XHCI])
    Flags: bus master, fast devsel, latency 0, IRQ 33, NUMA node 0, IOMMU group 15
03:00.0 USB controller: Renesas Technology Corp. uPD720202 USB 3.0 Host Controller (rev 02) (prog-if 30 [XHCI])
    Flags: bus master, fast devsel, latency 0, IRQ 43, NUMA node 0, IOMMU group 16

我有
2xUSB3.0 控制器列出序列号 02:00.0、03:00.0
3xUSB2.0 EHCI 控制器序列号 00:12:2、00:13.2、00:16.2
4xUSB2.0 OHCI 控制器00:12.0、00:13:0、 00:14.5, 00:16.0

因为我有两个 USB3.0 控制器和 4 个 USB 3.0 端口,
所以我认为一个控制器管理 2 个 USB 3.0 端口 但为什么我有这么多 USB2.0 控制器?
所有 OHCI 控制器共享相同的 IRQ,所有 EHCI 控制器共享相同的 IRQ。
USB2.0是否只有两个控制器并且多次列出?

当我查看路径时,/sys/bus/usb/devices 我看到usb1到usb11
的文件夹 ,因此外部可访问的每个 USB 端口都有自己的总线号。但我外面有12个USB端口???

当我跳进我的 U 盘所在的 3 号巴士时,事情变得更加奇怪。
/sys/bus/usb/devices/usb3
串行文件显示“0000:00:13.2”和产品“EHCI Host Controller”,这就是 lspci 显示的信息,这就是控制器。

但如果我查找,/sys/bus/usb/devices/usb3/3-0:1.0
它会显示文件夹usb3-port1....5 ,并且在端口 5 上,设备文件夹会列在我的 USB 记忆棒上。

这意味着什么?
连接我的 U 盘的外部 USB 端口有总线编号 3,然后有 5 个端口 -?????????
在第五个端口上连接了我的 USB 记忆棒,其他端口在哪里?
我真的不明白这一点。有人可以帮助我吗?

linux
  • 1 个回答
  • 39 Views
Martin Hope
Schmaehgrunza
Asked: 2024-03-13 16:11:11 +0800 CST

函数的返回值

  • 5

my_var=$(my_func arg1 arg2 ..)有人可以解释一下,当我查看代码示例时,为什么 bash 函数的返回值总是在函数中回显,然后由 消耗。

my_func ()
   {
   echo "$1 , $2, $3"
   }

my_var=$(my_func .. .. ..);

而不是使用这个,它不会打开子shell

declare g_RV  #-- global return value for all functions

myfunc ()
   {
   g_RV="$1 , $2, $3"
   }

myfunc .. .. ..; my_var=$g_RV;

因为我使用第二种方法,并且想知道在某些情况下这是否会对第一种方法失败。肯定是有原因的,因为大家都在打开一个subshel​​l。

编辑:由于 Kusalananda 和 Paul_Pedant 评论,
我添加了一个带有 g_RV - LAF function 的递归函数调用,列出目录 $1 的所有文件,或者如果 $2 INT>0 则递归,
然后在函数内部调用其他函数(查看求和函数!

declare g_RV

shopt -s dotglob nullglob

#-- Recursive call with g_RV
#---------------------------
#-- call: LAF [directory STR] [recursive INT (>0 .. true, 0 .. false)]  ... List all files in a folder or inclusive all files in subfolders (recursive
LAF ()
   {
   local file files="" dir_path=$1
   if [[ ${dir_path:0:1} != "/" ]]; then dir_path=$(readlink -f "$dir_path"); fi
   
   for file in "$dir_path/"*; do
      if [[ -d $file ]]; then (($2)) && { LAF "$file"; files+=$g_RV; }                    #-- recursive call
      else files+="${file}"$'\n'; fi
      done
   g_RV=$files
   }
   
LAF "/tmp" 1; my_var1=$g_RV; echo "$my_var1";

#-- function calling other functions with g_RV
#---------------------------------------------
sum_A ()
   { 
   g_RV=$(($1+$2))
   }

sum_B()
   {
   g_RV=$(($1+$2))
   }

sum_C ()
   {
   local -i sum=0;
   sum_A 5 6; sum+=$g_RV
   sum_B 12 18; sum+=$g_RV
   g_RV=$sum
   }
  
sum_C; my_var2=$g_RV; echo "sum: $my_var2";
bash
  • 4 个回答
  • 84 Views
Martin Hope
Schmaehgrunza
Asked: 2024-02-29 08:28:32 +0800 CST

了解 PEM 文件并手动验证签名

  • 5

我正在玩 RSA 来学习和理解。

我从浏览器获得了以下 PEM 文件(BASE 64)

-----BEGIN CERTIFICATE-----
MIIE/jCCA+agAwIBAgISBGzkPWVoI1CDdChcRxp7jO1hMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yNDAyMTAwMzQ2MjFaFw0yNDA1MTAwMzQ2MjBaMBkxFzAVBgNVBAMT
Dmh0dHBzLWd1aWRlLmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
p7jmFSTUYpTTIN/Qvvh9/cXNTvPY5+3sCLfxn+2DMQs+wi+tGX31n5Wk3G0GRg9q
XQ9awYaeIEjYWDpLHzwlWB5PNk1FhzO3ZYPgBDrQAqBI1TSPhQNmIm8WA5V5juQl
yEGI9efqZOuFm+1oIqFFbNtQ4ty/Vg6+FuJJx6KaRUmhQ6hpypuW4cz81ytVVJ0i
6E4rDE+jcQEHoRPxQ9K8/WkjCCuzUEdklGy9t+Jv4fUjlI2AKvhVOJKzBO8UjhTV
+tjCBR/PTmWq5Xi5NXmKx34/sgHNqx86DQ9xDiAv3X8jOiHK5eH5PhV1xKmp9BGq
OaQwG8JSDHsdt2qgy2xlnQIDAQABo4ICJTCCAiEwDgYDVR0PAQH/BAQDAgWgMB0G
A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1Ud
DgQWBBRD3wUGbTVubIcA7UYVRBcRVP9XcDAfBgNVHSMEGDAWgBQULrMXt1hWy65Q
CUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9y
My5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3Jn
LzAtBgNVHREEJjAkgg5odHRwcy1ndWlkZS5kZYISd3d3Lmh0dHBzLWd1aWRlLmRl
MBMGA1UdIAQMMAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcA
SLDja9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGNkVaAmwAABAMASDBG
AiEA+YNF9WpuxNwggP9a0qHI1TXZK6ykYazxSMZDgJAqV34CIQDl05SPwsN+uDBg
PKBbu3RtPCuzXVRvSDMvggQd/lUoyAB2AKLiv9Ye3i8vB6DWTm03p9xlQ7DGtS6i
2reK+Jpt9RfYAAABjZFWgQkAAAQDAEcwRQIhANkJGz5gIcPrQEMerOTz+Y/X7KLG
JIaHP5jKiJd+OIxYAiAB+KbOm64IxyM+T8Kyr4SRimc05QEiHEaUw1zuUud8dTAN
BgkqhkiG9w0BAQsFAAOCAQEAAhTC1jNPx0WEW65qYjotHJPUsGN/PxwdQnloPcPn
gI5sq/H1jCwxaaw2DpOdD8fwAfYKMdtgQG2oKTeIRjn/AvpdYUab7S1WkC61LpGw
6lEZH2dp8Krcy0xL8BcCUR+ET2x+Zb3UKjkafZNW9XCQuRi8f6tlpJ5BpEhcJCQ6
2eU5Y10BnBZk+KiSV1rocAUtVM3Gy1m0MB6tBXayCXhOoHBmOjw/z591+k8ahOzA
DNxW3uX9Tfak/15XRKRp+Je5YpKV/8ww+LX4tO4vCK72RaD4QSsb2LRORH6BoLZA
lDPil4lBDrB40ojuGV8KaMmq88Sf2bCSTYX1pt/5bOtOyw==
-----END CERTIFICATE-----
Subject Name
CN (Common Name):   https-guide.de
Issuer Name
C (Country):    US
O (Organization):   Let's Encrypt
CN (Common Name):   R3
Issued Certificate
Version:    3
Serial Number:  04 6C E4 3D 65 68 23 50 83 74 28 5C 47 1A 7B 8C ED 61
Not Valid Before:   2024-02-10
Not Valid After:    2024-05-10
Certificate Fingerprints
SHA1:   0D 0D 1A 18 7D 9A 59 8E 40 5C 71 3B CF 46 14 E3 6B 5E B5 05
MD5:    9A AC AA 7E 7D 51 22 0E F0 DB 89 C8 67 A4 67 DF
Public Key Info
Key Algorithm:  RSA
Key Parameters: 05 00
Key Size:   2048
Key SHA1 Fingerprint:   29 A8 72 98 2E 6E 88 D0 F8 AB 0C C7 65 D4 56 95 94 2E F9 2E
Public Key: 30 82 01 0A 02 82 01 01 00 A7 B8 E6 15 24 D4 62 94 D3 20 DF D0 BE F8 7D FD C5 CD 4E F3 D8 E7 ED EC 08 B7 F1 9F ED 83 31 0B 3E C2 2F AD 19 7D F5 9F 95 A4 DC 6D 06 46 0F 6A 5D 0F 5A C1 86 9E 20 48 D8 58 3A 4B 1F 3C 25 58 1E 4F 36 4D 45 87 33 B7 65 83 E0 04 3A D0 02 A0 48 D5 34 8F 85 03 66 22 6F 16 03 95 79 8E E4 25 C8 41 88 F5 E7 EA 64 EB 85 9B ED 68 22 A1 45 6C DB 50 E2 DC BF 56 0E BE 16 E2 49 C7 A2 9A 45 49 A1 43 A8 69 CA 9B 96 E1 CC FC D7 2B 55 54 9D 22 E8 4E 2B 0C 4F A3 71 01 07 A1 13 F1 43 D2 BC FD 69 23 08 2B B3 50 47 64 94 6C BD B7 E2 6F E1 F5 23 94 8D 80 2A F8 55 38 92 B3 04 EF 14 8E 14 D5 FA D8 C2 05 1F CF 4E 65 AA E5 78 B9 35 79 8A C7 7E 3F B2 01 CD AB 1F 3A 0D 0F 71 0E 20 2F DD 7F 23 3A 21 CA E5 E1 F9 3E 15 75 C4 A9 A9 F4 11 AA 39 A4 30 1B C2 52 0C 7B 1D B7 6A A0 CB 6C 65 9D 02 03 01 00 01
Key Usage
Usages: Digital signature
Key encipherment
Critical:   Yes
Extended Key Usage
Allowed Purposes:   Server Authentication
Client Authentication
Critical:   No
Basic Constraints
Certificate Authority:  No
Max Path Length:    Unlimited
Critical:   Yes
Subject Key Identifier
Key Identifier: 43 DF 05 06 6D 35 6E 6C 87 00 ED 46 15 44 17 11 54 FF 57 70
Critical:   No
Extension
Identifier: 2.5.29.35
Value:  30 16 80 14 14 2E B3 17 B7 58 56 CB AE 50 09 40 E6 1F AF 9D 8B 14 C2 C6
Critical:   No
Extension
Identifier: 1.3.6.1.5.5.7.1.1
Value:  30 47 30 21 06 08 2B 06 01 05 05 07 30 01 86 15 68 74 74 70 3A 2F 2F 72 33 2E 6F 2E 6C 65 6E 63 72 2E 6F 72 67 30 22 06 08 2B 06 01 05 05 07 30 02 86 16 68 74 74 70 3A 2F 2F 72 33 2E 69 2E 6C 65 6E 63 72 2E 6F 72 67 2F
Critical:   No
Subject Alternative Names
DNS:    https-guide.de
DNS:    www.https-guide.de
Critical:   No
Extension
Identifier: 2.5.29.32
Value:  30 0A 30 08 06 06 67 81 0C 01 02 01
Critical:   No
Extension
Identifier: 1.3.6.1.4.1.11129.2.4.2
Value:  04 81 F3 00 F1 00 77 00 48 B0 E3 6B DA A6 47 34 0F E5 6A 02 FA 9D 30 EB 1C 52 01 CB 56 DD 2C 81 D9 BB BF AB 39 D8 84 73 00 00 01 8D 91 56 80 9B 00 00 04 03 00 48 30 46 02 21 00 F9 83 45 F5 6A 6E C4 DC 20 80 FF 5A D2 A1 C8 D5 35 D9 2B AC A4 61 AC F1 48 C6 43 80 90 2A 57 7E 02 21 00 E5 D3 94 8F C2 C3 7E B8 30 60 3C A0 5B BB 74 6D 3C 2B B3 5D 54 6F 48 33 2F 82 04 1D FE 55 28 C8 00 76 00 A2 E2 BF D6 1E DE 2F 2F 07 A0 D6 4E 6D 37 A7 DC 65 43 B0 C6 B5 2E A2 DA B7 8A F8 9A 6D F5 17 D8 00 00 01 8D 91 56 81 09 00 00 04 03 00 47 30 45 02 21 00 D9 09 1B 3E 60 21 C3 EB 40 43 1E AC E4 F3 F9 8F D7 EC A2 C6 24 86 87 3F 98 CA 88 97 7E 38 8C 58 02 20 01 F8 A6 CE 9B AE 08 C7 23 3E 4F C2 B2 AF 84 91 8A 67 34 E5 01 22 1C 46 94 C3 5C EE 52 E7 7C 75
Critical:   No
Signature
Signature Algorithm:    1.2.840.113549.1.1.11
Signature Parameters:   05 00
Signature:  02 14 C2 D6 33 4F C7 45 84 5B AE 6A 62 3A 2D 1C 93 D4 B0 63 7F 3F 1C 1D 42 79 68 3D C3 E7 80 8E 6C AB F1 F5 8C 2C 31 69 AC 36 0E 93 9D 0F C7 F0 01 F6 0A 31 DB 60 40 6D A8 29 37 88 46 39 FF 02 FA 5D 61 46 9B ED 2D 56 90 2E B5 2E 91 B0 EA 51 19 1F 67 69 F0 AA DC CB 4C 4B F0 17 02 51 1F 84 4F 6C 7E 65 BD D4 2A 39 1A 7D 93 56 F5 70 90 B9 18 BC 7F AB 65 A4 9E 41 A4 48 5C 24 24 3A D9 E5 39 63 5D 01 9C 16 64 F8 A8 92 57 5A E8 70 05 2D 54 CD C6 CB 59 B4 30 1E AD 05 76 B2 09 78 4E A0 70 66 3A 3C 3F CF 9F 75 FA 4F 1A 84 EC C0 0C DC 56 DE E5 FD 4D F6 A4 FF 5E 57 44 A4 69 F8 97 B9 62 92 95 FF CC 30 F8 B5 F8 B4 EE 2F 08 AE F6 45 A0 F8 41 2B 1B D8 B4 4E 44 7E 81 A0 B6 40 94 33 E2 97 89 41 0E B0 78 D2 88 EE 19 5F 0A 68 C9 AA F3 C4 9F D9 B0 92 4D 85 F5 A6 DF F9 6C EB 4E CB

1)如何手动验证签名?
我知道发行者是“Let's Encrypt”
我从 PEM 文件链中获取了 Let's Encrypt 的公钥

#PUBLIC KEY
exponent: 65537
modulo: BB:02:15:28:CC:F6:A0:94:D3:0F:12:EC:8D:55:92:C3:F8:82:F1:99:A6:7A:42:88:A7:5D:26:AA:B5:2B:B9:C5:4C:B1:AF:8E:6B:F9:75:C8:A3:D7:0F:47:94:14:55:35:57:8C:9E:A8:A2:39:19:F5:82:3C:42:A9:4E:6E:F5:3B:C3:2E:DB:8D:C0:B0:5C:F3:59:38:E7:ED:CF:69:F0:5A:0B:1B:BE:C0:94:24:25:87:FA:37:71:B3:13:E7:1C:AC:E1:9B:EF:DB:E4:3B:45:52:45:96:A9:C1:53:CE:34:C8:52:EE:B5:AE:ED:8F:DE:60:70:E2:A5:54:AB:B6:6D:0E:97:A5:40:34:6B:2B:D3:BC:66:EB:66:34:7C:FA:6B:8B:8F:57:29:99:F8:30:17:5D:BA:72:6F:FB:81:C5:AD:D2:86:58:3D:17:C7:E7:09:BB:F1:2B:F7:86:DC:C1:DA:71:5D:D4:46:E3:CC:AD:25:C1:88:BC:60:67:75:66:B3:F1:18:F7:A2:5C:E6:53:FF:3A:88:B6:47:A5:FF:13:18:EA:98:09:77:3F:9D:53:F9:CF:01:E5:F5:A6:70:17:14:AF:63:A4:FF:99:B3:93:9D:DC:53:A7:06:FE:48:85:1D:A1:69:AE:25:75:BB:13:CC:52:03:F5:ED:51:A1:8B:DB:15

我尝试使用简短的浏览器控制台 Javascript 手动验证签名

var modulo="BB:02:15:28:CC:F6:A0:94:D3:0F:12:EC:8D:55:92:C3:F8:82:F1:99:A6:7A:42:88:A7:5D:26:AA:B5:2B:B9:C5:4C:B1:AF:8E:6B:F9:75:C8:A3:D7:0F:47:94:14:55:35:57:8C:9E:A8:A2:39:19:F5:82:3C:42:A9:4E:6E:F5:3B:C3:2E:DB:8D:C0:B0:5C:F3:59:38:E7:ED:CF:69:F0:5A:0B:1B:BE:C0:94:24:25:87:FA:37:71:B3:13:E7:1C:AC:E1:9B:EF:DB:E4:3B:45:52:45:96:A9:C1:53:CE:34:C8:52:EE:B5:AE:ED:8F:DE:60:70:E2:A5:54:AB:B6:6D:0E:97:A5:40:34:6B:2B:D3:BC:66:EB:66:34:7C:FA:6B:8B:8F:57:29:99:F8:30:17:5D:BA:72:6F:FB:81:C5:AD:D2:86:58:3D:17:C7:E7:09:BB:F1:2B:F7:86:DC:C1:DA:71:5D:D4:46:E3:CC:AD:25:C1:88:BC:60:67:75:66:B3:F1:18:F7:A2:5C:E6:53:FF:3A:88:B6:47:A5:FF:13:18:EA:98:09:77:3F:9D:53:F9:CF:01:E5:F5:A6:70:17:14:AF:63:A4:FF:99:B3:93:9D:DC:53:A7:06:FE:48:85:1D:A1:69:AE:25:75:BB:13:CC:52:03:F5:ED:51:A1:8B:DB:15",
signature="02 14 C2 D6 33 4F C7 45 84 5B AE 6A 62 3A 2D 1C 93 D4 B0 63 7F 3F 1C 1D 42 79 68 3D C3 E7 80 8E 6C AB F1 F5 8C 2C 31 69 AC 36 0E 93 9D 0F C7 F0 01 F6 0A 31 DB 60 40 6D A8 29 37 88 46 39 FF 02 FA 5D 61 46 9B ED 2D 56 90 2E B5 2E 91 B0 EA 51 19 1F 67 69 F0 AA DC CB 4C 4B F0 17 02 51 1F 84 4F 6C 7E 65 BD D4 2A 39 1A 7D 93 56 F5 70 90 B9 18 BC 7F AB 65 A4 9E 41 A4 48 5C 24 24 3A D9 E5 39 63 5D 01 9C 16 64 F8 A8 92 57 5A E8 70 05 2D 54 CD C6 CB 59 B4 30 1E AD 05 76 B2 09 78 4E A0 70 66 3A 3C 3F CF 9F 75 FA 4F 1A 84 EC C0 0C DC 56 DE E5 FD 4D F6 A4 FF 5E 57 44 A4 69 F8 97 B9 62 92 95 FF CC 30 F8 B5 F8 B4 EE 2F 08 AE F6 45 A0 F8 41 2B 1B D8 B4 4E 44 7E 81 A0 B6 40 94 33 E2 97 89 41 0E B0 78 D2 88 EE 19 5F 0A 68 C9 AA F3 C4 9F D9 B0 92 4D 85 F5 A6 DF F9 6C EB 4E CB",
signature_decrypt;

modulo=BigInt("0x"+modulo.replace(new RegExp(":","g"),""));
signature=BigInt("0x"+signature.replace(new RegExp(" ","g"),""));

signature_decrypt=signature;
for (let i=0;i<16;i++)  //-- exponent: 65537 -> 2**16=65536
  {
  signature_decrypt=signature_decrypt**2n % modulo
  }

signature_decrypt=signature_decrypt*signature % modulo  //65537
console.log (signature_decrypt.toString(16));

我得到以下输出:

1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d060960864801650304020105000420bc56117d619d50579b700bd9e3fd275a2009234dbf413c89e13c0d12664188ff

由于我得到的填充,我认为这是正确的解密签名,但我不知道应该从 pem 文件的哪一部分构建 sha256 哈希值,因为我没有相等 - 或者我的解密是错误的完整的
pem 文件包括签名,所以我认为应该在之前的部分上制作sha256值,但具体在哪里。有人可以帮忙吗?

第二个问题:pem SHA256 中有两个证书时间戳

48:B0:E3:6B:DA:A6:47:34:0F:E5:6A:02:FA:9D:30:EB:1C:52:01:CB:56:DD:2C:81:D9:BB:BF:AB:39:D8:84:73
A2:E2:BF:D6:1E:DE:2F:2F:07:A0:D6:4E:6D:37:A7:DC:65:43:B0:C6:B5:2E:A2:DA:B7:8A:F8:9A:6D:F5:17:D8

谁制作的,它们是关于什么的,为什么是两个?- 有人可以链接一个页面,其中一个 pem 文件逐行解释,因为我搜索了它并且只得到了一般的 bla, bla, bla

certificates
  • 1 个回答
  • 30 Views
Martin Hope
Schmaehgrunza
Asked: 2024-02-18 02:21:25 +0800 CST

到应用程序的符号链接 - 工作目录

  • 5

假设我在名为 的文件夹中有一个 bash 脚本Programming,它从名为 的子文件夹中的文件读取数据data。
脚本中文件的路径都与此“Programming”文件夹相关。
echo "test" > ./data/test.txt。
因此工作目录应始终是“Programming”文件夹。
当脚本通过所有测试时,它就完成了,我想我可以轻松地将“Programming”文件夹的全部内容复制到 中的子文件夹中/opt,/opt/myapplication然后在/usr/bin名为 的文件夹中创建一个符号链接myapplication,该链接到中的脚本/opt/myapplication/bash_script使其在环境中可达。

但问题是,如果我现在从工作目录所在的任何地方调用 myapplication

$PWD= #actual shell directory at script start
$0=/usr/bin/myapplication
${BASH_SOURCE[0]}=/usr/bin/myapplication

我的申请失败了。我认为符号链接会将工作目录更改为文件所在的位置。

Unix 中通常的做法是什么?始终将工作目录设置为执行文件所在的位置,以使用相对路径?

bash
  • 1 个回答
  • 32 Views
Martin Hope
Schmaehgrunza
Asked: 2023-12-18 05:50:22 +0800 CST

文件时间戳 - 使用 libre Office writer 或 xed 编辑保存文件后出生时间发生变化

  • 5

我在 Linux Mint 21 上,我有一个 EXT4 文件系统
文件系统功能: has_journal ext_attr resize_inode dir_index filetype Needs_recovery extent 64bit flex_bg稀疏_superlarge_file巨大_file dir_nlink extra_isizemetadata_csum

我打开了一个文件 my_test:

touch my_test
stat my_test
  File: my_test
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 831h/2097d  Inode: 54          Links: 1
Access: 2023-12-17 22:26:37.610635694 +0100
Modify: 2023-12-17 22:26:37.610635694 +0100
Change: 2023-12-17 22:26:37.610635694 +0100
 Birth: 2023-12-17 22:26:37.610635694 +0100

然后用nano编辑它

nano my_test
stat my_test
  File: my_test
  Size: 12          Blocks: 8          IO Block: 4096   regular file
Device: 831h/2097d  Inode: 54          Links: 1
Access: 2023-12-17 22:27:32.207040986 +0100
Modify: 2023-12-17 22:27:48.387162937 +0100
Change: 2023-12-17 22:27:48.387162937 +0100
 Birth: 2023-12-17 22:26:37.610635694 +0100

你看到出生日期一模一样,然后我用 libre writer 打开它,编辑一些内容并保存

stat my_test
  File: my_test
  Size: 17          Blocks: 8          IO Block: 4096   regular file
Device: 831h/2097d  Inode: 55          Links: 1
Access: 2023-12-17 22:29:06.259760565 +0100
Modify: 2023-12-17 22:29:06.259760565 +0100
Change: 2023-12-17 22:29:06.267760627 +0100
 Birth: 2023-12-17 22:29:06.251760503 +0100

出生日期改变了 - 你看到有一个新的索引节点 - 为什么?

壳:

echo "hello" > my_test

保留出生日期

为什么 libre office writer 或 xed 更改出生日期,
这使得出生日期的整体意义变得毫无用处

他们是否使用了与文件系统功能相同的错误动态库?或者是什么?

filesystems
  • 1 个回答
  • 54 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