Nowe posty

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Paweł Kraszewski

Strony: [1] 2 3 ... 166
1
Bash, skrypty powłoki / Odp: Operacje na bitach.
« dnia: 2019-08-10, 21:44:36 »
Można np tak (Rust stable):
use std::{
    fs::File,
    io::{BufWriter, Result, Write},
};

fn add_data<W>(f: &mut W, dict: &str, len: u8, prefix: &str) -> Result<()>
where
    W: Write,
{
    // Po kolei dla każdego znaku słownika
    for i in dict.chars() {
        // Wpis składa się z dotąd wyliczonego przedrostka i znaku słownika
        let curr = format!("{}{}", prefix, i);

        if len <= 1 {
            // Jeżeli to ostati znak danego "słowa", zapisz je do pliku
            writeln!(f, "{}", curr.as_str())?;
        } else {
            // Jeżeli nie, wywołaj rekurencyjnie ze słowem jako prefiksem
            add_data(f, dict, len - 1, curr.as_str())?;
        }
    }
    Ok(())
}

fn main() -> Result<()> {
    // Pomijamy args(0) (nazwa pliku)
    let mut args = std::env::args().skip(1);

    // jak w ogóle nie ma len to ustawiamy na 8, jak jest na sparsowany string
    let len = args
        .next() // Następny element args
        .unwrap_or("8".to_string()) // Jeżeli nie ma, to zastąp 8-ką
        .parse::<u8>() // Sparsuj jako u8
        .expect("Bledna dlugosc"); // Jak się nie uda sparsować, wyświetl błąd

    // jak w ogóle nie ma dict to ustawiamy na "01", jak jest na podany string
    let dict = args
        .next() // Następny element args
        .unwrap_or("01".to_string()); // Jeżeli nie ma, to zastąp "01"

    // Nazwa pliku zawiera max długość i słownik
    let fname = format!("dict_{}_{}.txt", len, dict);

    // Otwieramy buforowany plik wyjściowy
    let mut file = BufWriter::new(File::create(fname)?);

    // Jedziemy długości od 1 do len włącznie (to ten = po ..)
    for clen in 1..=len {
        add_data(&mut file, dict.as_str(), clen, "")?;
    }
    Ok(())
}
i test (tutaj słownik podajemy bez spacji!)
> time target/release/rust_dict_gen 6 0123456789ABCDEF
2,91s user 0,05s system 99% cpu 2,963 total

> ls -al dict_6_0123456789ABCDEF.txt
-rw-r--r--  1 pawel  pawel  124076832 10 sie 21:39 dict_6_0123456789ABCDEF.txt

> wc -l dict_6_0123456789ABCDEF.txt
 17895696 dict_6_0123456789ABCDEF.txt


2
Bash, skrypty powłoki / Odp: Operacje na bitach.
« dnia: 2019-08-10, 20:29:34 »


W BASH-u robisz takie rzeczy in-memory???

#!/usr/bin/env bash

BITS=${1:-8}
shift

if [ "$1" ]; then
DICT="$@"
else
DICT="0 1"
fi

next_gen() {
local PREV=$1
local THIS=$2

if [ "$PREV" -a -f "$PREV" ]; then
# Jest poprzednia generacja, powiel ją po kolei z każdym
# elementem słownika
for S in $DICT; do
sed "s/^\\(.*\\)\$/$S\\1/" "$PREV" >> "$THIS"
done
else
# Nie ma - zacznij od słownika
for S in $DICT; do
echo $S >> "$THIS"
done
fi
}

PREV=""

# Pojedź kolejne generacje
for THIS in $(seq -w $BITS); do
next_gen "part_${PREV}.txt" "part_${THIS}.txt"
PREV=$THIS
done

# Zrób jeden plik z wynikiem
cat part_*.txt > dict.txt
rm -f part_*.txt
i teraz
./gen.sh   # generacja ciągów 1..8 bitów
./gen.sh  4 # generacja ciągów 1..4 bitów
./gen.sh  10 # generacja ciągów 1..10 bitów
./gen.sh  4 a b c # generacja ciągów 1..4 znakowych kombinacji  słownika a b c
./gen.sh  6 0 1 2 3 4 5 6 7 8 9 A B C D E F  # generacja ciągów 1..6 cyfrowych liczb szesnastkowych
ostatni:
> time ./gen.sh 6 0 1 2 3 4 5 6 7 8 9 A B C D E F

46,22s user 0,13s system 99% cpu 46,364 total

> ls -al dict.txt
-rw-r--r--  1 pawel  pawel  124076832 10 sie 20:26 dict.txt

> wc -l dict.txt
 17895696 dict.txt

3
Bash, skrypty powłoki / Odp: Operacje na bitach.
« dnia: 2019-08-10, 06:21:13 »
Dla mnie otworzyć to otworzyć. Plik może mieć i 100TB, ale otwarcie go nie robi nic, co mierzalnie zwiększyłoby zajętość pamięci (pewnie kernel zajmie 1 stronę, 4kB, albo i nie).

Inna sprawa to wczytać cały plik do pamięci. No tu nic nie zrobisz.

* Co to za plik, że z Basha po nim jeździsz? Jakiś tekst, czy binarka?
* Jakie naprawdę operacje na nim chcesz robić (bo że wczytać całość do RAM to już wiemy)

Co do dostępu z poziomu basha do wielkiego pliku binarnego: możesz używać polecenia dd do czytania fragmentu pliku od bajtu X o długości Y bajtów i do nadpisania bloku w istniejącym pliku od bajtu Z.

Co do dostępu do wielkich plików z poziomu "normalnych" języków, do tego służy mmap, otwierasz plik i mapujesz go do pamięci jako tablicę. I tu jest magia, on nie musi się mieścić w pamięci, kernel sam ładuje do przestrzeni wirtualnej fragmenty, do których piszesz i czytasz, potencjalnie usuwając fragmenty, do których nie odnosiłeś się przez jakiś czas (takie LRU).
Jak masz struktury (np C) stałej długości i bez wskaźników (czyli struktura zawiera w sobie wszystkie dane i są tylko elementu typu char imie[32] a nie ma żadnych typu char * imie), to możesz zmmapować tablicę takich struktur na plik i mieć taką bieda-bazę danych indeksowanych integerem.

4
Inne / Odp: Najlepsze słuchawki do trawmaju
« dnia: 2019-07-30, 15:45:03 »
Nie dousze a wokółuszne: Sennheiser HD 4.50 BTNC.

5
XFCE / Odp: Info w .xsession-errors
« dnia: 2019-07-21, 20:27:16 »
Od jakiegoś czasu pojawia mi się w .xsession-errors taka informacja
/usr/bin/iceauth:  creating new authority file /run/user/1000/ICEauthority
I szczerze, nie mam pojęcia co z tym mogę zrobić.
Jakieś pomysły?

Nic nie zrobić.

Plik powinien bardziej nazywać się .xsession-debug, bo różne programy plują tam niekoniecznie błędami... Twój konkretnie przypadek wynika z tego, że cały katalog /run jest na ramdysku i jest od nowa tworzony przy każdym starcie maszyny. A iceauth uprzejmie donosi, że znowu założył w tym katalogu plik ICEauthority.


6
Inne / Odp: Odpowiedni monitor 34 vs 27 4K
« dnia: 2019-07-13, 22:36:57 »
VESA to sterownik do grafiki

VESA (właściwie to VBE) to rozszerzenie BIOS-u VGA (przerwanie 10h) o obsługę trybów wyższych niż 640×480x4. Wszystkie dedykowane sterowniki zasadniczo pomijają VBE, gadając bezpośrednio z chipami graficznymi. Driver Xorg vesa_drv.so jest dla rzadkich przypadków "chipsetów z du*y", gdy nie ma natywnego drivera i Linux musi się posiłkować BIOS-em do zarządzania. VBE jest częściej wykorzystywane do trybów graficznych konsoli (driver kernelowy uvesafb.ko).

7
Ale może przypatrzyłabyś się dlaczego "STRONA JEST NIEBEZPIECZNA, ZABLOKOWALIŚMY JĄ DLA CIEBIE, DODAJ WYJĄTEK I PRZEJDŹ LUB ZABIERZ MNIE STĄD"? Jaka jest konkretnie przyczyna tego błędu? Lisek dość dokładnie opisuje, co konkretnie mu się nie podoba.

Bo może ktoś wpier*lił ci się w sesje TLS na MITM i rozkuwa cały ruch po drodze (np zainfekowany czymś modemorouter)? A FF próbuje cię przed tym chronić?

8
Poczytaj, jak działają prawa plikowe w Uniksowatych. To jest coś całkiem innego, niż w Windows/Netware.

W skrócie:
* Tworzysz nową grupę ( np "projekt151" )
* W plikach/katalogach, do których ma być dostęp tej grupy ustawiasz na nią właściciela grupowego chown :projekt151 PLIK/Katalog  (ten dwukropek przed nazwą grupy jest ważny)
* Dodajesz odpowiednich użytkowników do tej grupy usermod -a -G projekt151 LOGIN_USERA .

I voila, kilku konkretnych użytkowników ma dostęp do danego obszaru dysku.

Ewentualnie poczytaj o xattr i spinaniu tego z sambą i DC. Dalej nie wiem, nie korzystam.

9
Sieć / Odp: kde - drp, x11vnc
« dnia: 2019-06-26, 08:35:16 »
1/ Może chodzić o generację kluczy SSL. Poczytaj tutaj o parametrach związanych z SSL.

2/ Jest parę rozwiązań, poczytaj o:
 * LTSP - miałem salę 30 komputerów bootowanych po PXE i zapinających się na pojedynczy serwer terminalowy.
 * NoMachine/NX.


10
Instalacja / Odp: Debian https w apt
« dnia: 2019-06-25, 11:56:15 »
Moje dlaczego nie:

* HTTPS nie daje się cache'ować (u mnie w robocie na przykład wszystkie debianowate przechodzą przez centralny apt-cache-ng).
* Daje dodatkowe obciążenie dla serwerów, co jest nie "niemierzalne" przy tysiącach użytkowników.
* Nie podnosi bezpieczeństwa, bo po ściągnięciu i tak sprawdzane są sumy kontrolne i podpisy cyfrowe.

Ewentualnie podnosi poufność i bagiety nie podjadą mi prewencyjnie pod blok jak tylko ściągnę tor-a albo transmission.

11
Jeżeli zaś potrzebujesz usunąć wszystkie pozostałe dowiązania twarde do pliku, to jest problem - dowiązanie jest relacją jednokierunkową. Dowiązanie wie do jakiego jest pliku, plik nie wie, gdzie są jego dowiązania (poza wiedzą ile ich jest).

Trzeba to robić przeszukując całe drzewo katalogów (a w każdym razie dany mountpoint) i sprawdzając, czy któryś plik to nie jest hardlink do naszej "ofiary". Można to zautomatyzować przez finda:

find / -samefile PLIK_WZORCOWY 

wyszuka wszystkie pliki będące twardymi dowiązaniami do tego samego obszaru danych co PLIK_WZORCOWY. Potem trzeba odfiltrować potrzebne elementy i skasować resztę.

12
Jeżeli coś może zmienić swój format, wymuś własny:

#!/bin/sh

# Z df wyświetl tylko kolumny z punktem montowania i zajętością
# | pomiń wiersz nagłówka (a.k.a. zacznij wyświetlać od drugiej linii)
# | wytnij procenty
# | parsuj te dwa pola do zmiennych _PA (mountpoint) i _US (użycie)

df --output="target,pcent" | tail -n+2 | tr -d '%' | while read _PA _US
do
    if [ $_US -le 90 ]; then
        echo " [INFO] Server X $(date +%FT%T) Zajete miejsce na dysku: ${_PA} wynosi ${_US}%"
    else
        echo " [ERROR] Server X $(date +%FT%T) Zajete miejsce na dysku: ${_PA} wynosi ${_US}%"
    fi
done

13
Jaką dystrybucję wybrać? / Odp: Samba server
« dnia: 2019-06-10, 09:40:23 »
A tak sobie myślę - zamiast tracić czas (i potencjalnie dane przy błędzie konfiguracji), czemu nie np. FreeNAS albo coś podobnego (tutaj jest większe porównanie)? Poza aspektem edukacyjnym, oczywiście?

14
Bash, skrypty powłoki / Odp: Skrypt tworzący użytkownika
« dnia: 2019-06-07, 17:11:55 »
Dlatego  jest
Cytuj
jest lekko poprawniejsze.
a nie
Cytuj
jest poprawnie.

15
Bash, skrypty powłoki / Odp: Skrypt tworzący użytkownika
« dnia: 2019-06-07, 15:58:51 »
while [ czy != 0 ] ;

jest zawsze prawdziwe. Łańcuch "czy" jest zawsze różny od łańcucha "0".

while [ "$czy" != "0" ] ;

jest lekko poprawniejsze. Cudzysłowy, bo złośliwy użytkownik może podać coś ze spacjami w środku.

Strony: [1] 2 3 ... 166