AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-594253

Schmaehgrunza's questions

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

como usar soquete de domínio unix com bash

  • 5

Primeiro de tudo - eu sei fifos para IPC, mas li sobre soquetes de domínio unix , que são bidirecionais e eu queria testar isso, o que é possível com linha de comando e bash.
Perguntei ao Chat GPT, mas as informações que obtive foram inúteis e os exemplos não funcionaram.
Eu queria conseguir que dois processos pudessem escrever simultaneamente um para o outro ou ler, sem o conceito de um fifo.
Se eu definir um descritor de arquivo para leitura em um fifo. eu também posso escrever com dois processos ou mais para o fifo. mas os dados são misturados, e o primeiro leitor lê todo o conteúdo misturado.
o processo A deve receber o que o processo B escreve, e o processo B deve receber o que o processo A escreve.

Consegui fazer isso funcionar com o seguinte código de teste:

arquivo bash: processA

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

Arquivo 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

terminal 1:

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

No Processo A :
Depois disso, posso escrever no soquete Unix por meio de "/proc/$PID/fd/6",
ler do soquete Unix com stdin
e o stdout vai para o terminal.

terminal 2:

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

No Processo B :
Depois disso, posso escrever no soquete Unix com stdout,
ler do soquete Unix com "/proc/$PID/fd/5",
escrever no terminal com /dev/ttx
e stdin no teclado.


Primeira pergunta: Por que os descritores de arquivo 5 e 6 não são herdados dos subprocessos abertos na substituição de processo?
Tenho que obtê-los exportando o PID - por quê?

Segunda pergunta: os processos A e B podem se comunicar bidirecionalmente, mas preciso abrir mais dois processos principais, que estão executando o comando exec para redirecionamento do descritor de arquivo e iniciando a substituição do processo
exec 5< <(PID=$$ bash processB | nc -U unixSocket).
Mas o que eu finalmente quero é uma comunicação entre o processo principal e o processo filho, e nada mais.
Agora eu tenho: o principal 1 abre o filho 1, o principal 2 abre o filho 2, e o filho 1 pode se comunicar bidirecionalmente com o filho 2.

Obrigado pela sua ajuda antecipadamente

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

calcular df espaço disponível [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
Crie uma imagem de disco formatada em FAT que possa caber em arquivos 1G (2 respostas)
Fechado há 3 dias .

Eu fiz uma partição de 5 GB -> /dev/sdd2
então criei um sistema de arquivos sudo mke2fs -N 700 -t ext4 -L test2 /dev/sdd2
e configurei o espaço reservado root para 0sudo tune2fs -r 0 /dev/sdd2

sudo dumpe2fs -h /dev/sdd2mostra:

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/sdd2mostra:

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

4798176−4781768=16408

Onde estão os 16 MB? Como o df calcula o espaço disponível - fórmula? Por que os inodes são 1216, defini 700?

Alguém pode me ajudar?

Agradecimentos especiais a Marcus Müller.

Isso está certo?. eu tentei uma estatística de partição para melhor conhecimento do sistema de arquivos, salve como dfe, requer sudo por causa do
uso de informações de dumpe2fs, por exemplo: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 respostas
  • 51 Views
Martin Hope
Schmaehgrunza
Asked: 2024-05-14 04:51:51 +0800 CST

entendendo DEVPATH /BUS/USB em /sys/bus/usb

  • 6

placa-mãe:
tenho 6 portas USB2.0 e 2 portas USB3.0 no painel traseiro da placa-mãe.
Tenho conectores 3xUSB2.0 e conectores 1xUSB3.0 integrados.

Na frente da minha torre alta:
tenho uma interface USB com 2 portas USB2.0 que estão conectadas a um dos conectores USB 2.0 da placa-mãe e tenho 2 portas USB3.0 que estão conectadas ao conector USB3.0 da placa-mãe.

saída de:
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

Eu tenho,
2 controladores xUSB3.0 listados seriais 02:00.0, 03:00.0
3xUSB2.0 controladores EHCI seriais 00:12:2, 00:13.2, 00:16.2
4xUSB2.0 controladores OHCI 00:12.0, 00:13:0, 00:14,5, 00:16,0

como tenho dois controladores USB3.0 e 4 portas USB 3.0,
acho que um controlador gerencia 2 portas USB 3.0. Mas por que tenho tantos controladores USB2.0?
Todos os controladores OHCI compartilham o mesmo IRQ e todos os controladores EHCI compartilham o mesmo IRQ.
Existem apenas dois controladores para USB2.0 e listados várias vezes?

quando olho para o caminho, /sys/bus/usb/devices vejo pastas de usb1 para usb11.
Portanto, cada porta USB acessível externamente tem um número de barramento próprio. Mas eu tenho 12 portas USB externas???

fica ainda mais estranho para mim quando mergulho no ônibus número 3, onde meu pendrive está localizado.
/sys/bus/usb/devices/usb3
o arquivo serial mostra "0000:00:13.2" e o produto "EHCI Host Controller", essa é a informação que o lspci mostra, esse é o controlador.

mas se eu procurar, /sys/bus/usb/devices/usb3/3-0:1.0
ele mostra as pastas usb3-port1....5 e na porta 5 uma pasta de dispositivo está listada no meu stick USB.

O que isso significa?
A porta USB externa, onde meu pendrive está conectado, tem o barramento número 3 e depois tem 5 portas -??????????
e na quinta porta meu pendrive está conectado, onde estão as outras portas?
Eu realmente não entendo isso. Alguém pode me ajudar?

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

valor de retorno de uma função

  • 5

Alguém pode me explicar por que o valor de retorno de uma função bash é sempre ecoado na função e depois consumido por my_var=$(my_func arg1 arg2 ..), quando examino exemplos de código.

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

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

em vez de usar isso, o que não abriria um subshell

declare g_RV  #-- global return value for all functions

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

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

porque eu uso o segundo método e me pergunto se isso falharia no primeiro método em alguns casos. Deve haver uma causa, porque todo mundo está abrindo um subshell.

EDIT: por causa dos comentários de Kusalananda e Paul_Pedant
eu adicionei uma chamada de função recursiva com g_RV - LAF function , listo todos os arquivos de um diretório $1, ou faço isso recursivamente se $2 INT>0
e então chamadas de função dentro de uma função para outras funções (veja funções de soma!

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 respostas
  • 84 Views
Martin Hope
Schmaehgrunza
Asked: 2024-02-29 08:28:32 +0800 CST

Compreender um arquivo PEM e verificar a assinatura manualmente

  • 5

Estou brincando com o RSA para aprender e compreender.

recebi o seguinte arquivo PEM do navegador (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) Como posso verificar a assinatura manualmente?
eu sei que o emissor é "Let's Encrypt",
obtive a chave pública do Let's Encrypt da cadeia de arquivos PEM

#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

tentei verificar a assinatura manualmente com um pequeno Javascript do console do navegador

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));

obtive a seguinte saída:

1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d060960864801650304020105000420bc56117d619d50579b700bd9e3fd275a2009234dbf413c89e13c0d12664188ff

Por causa do preenchimento que obtive, acho que esta é a assinatura descriptografada correta, mas não sei de qual parte do arquivo pem devo construir o valor hash sha256, porque não obtive igualdade - ou minha descriptografia está errada.
O arquivo pem completo inclui a assinatura, então acho que o valor sha256 deveria ser feito na parte anterior, mas onde exatamente. alguém pode ajudar?

2ª pergunta : existem dois carimbos de data/hora do certificado dentro do 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

quem fez isso e do que se trata, por que dois? - alguém pode vincular uma página, onde um arquivo pem é explicado linha por linha, porque eu procurei por ele e geralmente só obtive bla, bla, bla

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

Link simbólico para aplicativo - diretório de trabalho

  • 5

Digamos que eu tenha um script bash em uma pasta chamada Programming, que lê dados de arquivos em uma subpasta chamada data.
Os caminhos no script para os arquivos são todos relativos a esta pasta "Programação".
echo "test" > ./data/test.txt.
Portanto o diretório de trabalho deve ser sempre a pasta “Programação”.
Quando o script passa em todos os testes, ele está concluído e pensei que poderia facilmente copiar todo o conteúdo da pasta "Programação" para uma subpasta em /opt, digamos /opt/myapplication, e então fazer um link simbólico na /usr/binpasta chamada myapplication, que vincula ao script em /opt/myapplication/bash_scriptpara torná-lo acessível no ambiente.

Mas o problema é que se eu chamar myapplication de qualquer lugar onde o diretório de trabalho esteja

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

e meu aplicativo falha. Achei que o link simbólico mudaria o diretório de trabalho para onde o arquivo está localizado.

Qual é a prática comum no Unix de definir sempre o diretório de trabalho, onde o arquivo executado está localizado, para usar caminhos relativos?

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

carimbos de data/hora do arquivo - alterações na hora de nascimento após a edição e salvamento de um arquivo, com o libre office escritor ou xed

  • 5

Estou no Linux Mint 21, tenho um sistema de arquivos EXT4
Recursos do sistema de arquivos: has_journal ext_attr resize_inode dir_index tipo de arquivo need_recovery extensão 64 bits flex_bg sparse_super large_file arquivo enorme dir_nlink extra_isize metadata_csum

eu abri um arquivo 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

então editei com 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

Você vê a data de nascimento exatamente igual, então eu abri com o librewriter, editei algo e salvei

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

data de nascimento alterada - Você vê que há um novo inode - por quê?

Concha:

echo "hello" > my_test

mantém a data de nascimento

por que o escritor do escritório livre ou corrigido muda a data de nascimento,
isso torna inútil todo o sentido da data de nascimento

eles estão usando a mesma biblioteca dinâmica errada com funções do sistema de arquivos? ou o que?

filesystems
  • 1 respostas
  • 54 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve