Dela upp filer med split

Någonsin haft problem att föra över stora filer? Det har jag. När överföringen närmar sig ungefär 4,294,967,296 byte så tar det plötsligt stopp. Ingenting hjälper.

Jag orkade inte reda ut om det var FileZilla (på måldatorn, som kör Windows) eller sshd (på källdatorn, som kör OpenBSD) som bråkade. I stället kommer verktygslådan fram. Problemet är nämligen kvickt avhjälpt med ett par gamla unix-verktyg.

På källdatorn, gör:

$ split -b2000m stor-fil.zip stor-fil.zip.

Du kommer få flera filer, 2G stora, som heter stor-fil.zip.xaa, stor-fil.zip.xab, stor-fil.zip.xac och så vidare. För över dem.

På måldatorn är det sedan bara att klistra ihop dem igen (vilket givetvis sker i Cygwin):

$ cat stor-fil.zip.x* > stor-fil.zip

split och cat duger inte bara till stora, binära filer. Med split kan du ange ett regular expression att dela filen vid, och alltså även dela upp textfiler på olika listiga sätt, om du vill.

Ett annat sätt att flytta enorma filer, trots sådana här uppenbara 32 bit-goofar, är med en vanlig pipe. Från källdatorn:

$ cat stor-fil.zip | ssh <måldator> "cat > stor-fil.zip"

Men det är ju inte lika kul.

Ladda hem från Youtube

Tidigare har jag berättat hur man kan ladda hem från SVTPlay, och nu är det dags för Youtube. Jag tänker även berätta hur du kan göra för att konvertera en video till en ljudfil, genom att helt sonika lyfta över det i en egen fil.

Precis som tidigare, så är anledningen till att jag själv gör så här att jag kör ett 64-bitars OpenBSD, och då går det inte att använda Flash. Youtube kommer framöver att gå över till HTML5, och då slipper jag det här krånglet. Du kan pröva deras testversion detta här.

Det absolut enklaste sättet att tanka hem Youtube-videor är att använda sajten KeepVid.com. Det gör du så här:

  1. Gå till videon på Youtube.
  2. Kopiera adressen ur adressfältet.
  3. Klistra in adressen på KeepVid.com och klicka på Download-knappen.
  4. Högerklicka på länken som visas och välj Spara som…

Men detta fungerar inte felfritt! Dessutom är det skönt att kunna genomföra samma grej från ett terminalfönster eller i ett script, åtminstone för mig. Nu kommer jag först att berätta hur du laddar hem en video på det viset, och sedan hur man kan göra för att automatisera litet grand.

Ladda hem videon

Du behöver programmet youtube-dl, som i själva verket är ett Python-script. Se alltså till att ha Python installerat.

Windowsbrukare kan också använda det, och lätt övermäktiga instruktioner för hur scriptet kan installeras finns här.

På *nix-system måste youtube-dl.py dessutom vara körbar. Eftersom det är bra att hålla ordning på sin hemkatalog, så lägger vi scriptet i mappen ~/bin.

$ chmod +x youtube-dl.py
$ mkdir ~/bin
$ mv youtube-dl.py ~/bin/

Nu kollar vi att den går att köra:

$ youtube-dl.py
ksh: youtube-dl.py: not found

Hoppsan! Händer detta mumlar du följande trollformel, så är problemet omedelbart löst på obestämd tid.

$ echo 'export PATH=$PATH:$HOME/bin' >> .profile; export PATH=$PATH:$HOME/bin

Du kan även få permission denied när du kör filen. Lösningen är att köra scriptet så här istället:

$ python ~/bin/youtube-dl.py

Resten är lätt. Surfa till Youtube-sidan med videon, kopiera adressen, och kör scriptet med den enligt följande:

$ youtube-dl.py -bt "http://www.youtube.com/watch?v=yek2D4Kjwgc"

Glöm inte citat-tecknen! Eller snarare: Om du inte vet när de egentligen behövs, så använd dem alltid. (Just här behövs de egentligen inte.)

Youtube på volley

Har man inte Flash kan man inte se videon i webbläsaren. Om man bara vill slå en flukt på videon men inte tanka hem den, är det omständigt att behöva ladda hem den först.

Då kan man använda sig av samma lösning för nedladdning som ovan, men fånga videon »i luften« och spela upp den direkt istället! Så här skapar du ett script som fixar biffen:

Ersätt "mplayer" med kommandot för den mediaspelare du föredrar.

Nu kan du spela upp videor direkt, busenkelt:

$ youtube.sh http://www.youtube.com/watch?v=yek2D4Kjwgc

Scriptet kan spela upp flera videor på rad om du klistrar in adresserna efter varandra.

Hur du plockar loss ljudet

Först och främst ska du se till att du har FFmpeg installerat.

Sedan måste du bestämma om du vill ha en mp3-fil eller en m4a-fil. Vill du ha ljudet i mp3-format, börja med att tanka hem videon så här:

$ youtube-dl.py -o dummy.flv http://www.youtube.com/watch?v=yek2D4Kjwgc

När nedladdningen är färdig så plockar du loss ljudspåret enligt det följande:

$ ffmpeg -vn -acodec copy -i dummy.flv ljudfil.mp3

Strax har du en fil som heter ljudfil.mp3.

Vill du istället ha ljudet i m4a-format, får du ändra parametrarna något.

$ youtube-dl.py -bo dummy.mp4 http://www.youtube.com/watch?v=yek2D4Kjwgc
$ ffmpeg -vn -acodec copy -i dummy.mp4 ljudfil.m4a

Och det var faktiskt det hela.

Att köra Firefox på eget konto

Uppdatering: Även om man fortfarande kan använda det här tipset, så finns numera en förbättrad version att använda i stället. Den kommer dessutom med löpande uppdateringar… :-)

* * *

Som webbparanoid står man inför ständiga faror. Tänk om min webbläsare har något farligt säkerhetshål, som någon otrevlig webbsida jag råkar besöka får för sig att utnyttja för att ladda upp alla mina filer, eller än värre ta bort dem helt?

Problemet går givetvis att lösa på flera sätt, och lika givet är att ingen lösning är fullkomlig. Den jag tänker lägga fram här torde fungera som försvar mot de flesta »opersonliga« attacker man kan råka ut för. Om någon däremot faktiskt är ute efter dig så har du nog ingen glädje av det.

Vad vi kommer att göra är att ordna så att Firefox (och faktiskt vilka program du vill) kan köras utan rättigheter till din home-katalog. Simpelt som en plätt.

The following takes place in a unix-like environment. Du måste ha sudo och XTerm installerat.

Skulle sudo bråka med dig, se avsnittet längre ned om sudo.

  1. Skapa en ny användare på ditt system, och döp den till något smart. Låt oss kalla den _web. Ge den en egen home-katalog som heter /home/web.
  2. Spärra all tillgång till din egen home-katalog för andra användare än du själv:

    $ chmod -R og-rwx $HOME

  3. Kontrollera att användaren _web berövats sådan tillgång:

    $ echo "Den här textfilen får du inte läsa." > ~/kontrollfil.txt
    $ sudo -u _web cat ~/kontrollfil.txt
    Password:
    cat: /home/jesper/kontrollfil.txt: Permission denied

    Sedan kan du ta bort testfilen:

    $ rm ~/kontrollfil.txt

    Om inget permission blev denied så har du ett konstigt filsystem. Lämna en kommentar!
  4. Kopiera din webbläsares inställningskatalog till den nya användaren. Använder du Firefox heter den .mozilla och kör du Opera är det .opera. Kopiera katalogen såhär:

    $ sudo cp -r $HOME/.mozilla /home/web/
    $ sudo chown -R _web._web /home/web/.mozilla

    Och liknande för Opera:

    $ sudo cp -r $HOME/.opera /home/web/
    $ sudo chown -R _web._web /home/web/.opera

    En del andra webbläsare sparar sina inställningar i en katalog inuti katalogen .config, däribland Midori. För att kopiera en sådan katalog måste du gå litet annorlunda tillväga.

    $ sudo -u _web mkdir /home/web/.config
    $ sudo cp -r $HOME/.config/midori /home/web/.config
    $ sudo chown -R _web._web /home/web/.config

  5. Med ett par enkla trollformler kan du nu köra igång din webbläsare under en annan användare, men med samma inställningar som dem du kopierade från ditt vanliga konto. Men trollformler är inte roliga att komma ihåg, så vi automatiserar det hela med ett skalskript. I exemplet lägger vi det i filen $HOME/bin/webuser.sh, och detta är vad den skall innehålla: (Eventuellt klagar någon insatt läsare på att $HOME-variabeln får samma värde flera gånger om. Men det verkar faktiskt krävas i vissa sammanhang, och jag är osäker på varför.)
  6. Sista stegets utförande lämnar jag som en övning åt läsaren. Det som måste skapas är en ikon, ett menyalternativ eller något annat fiffigt, som vid aktivering gör bruk av den smått makalösa trollformeln ovan:

    xterm -geometry 20x1 -e 'sudo sh $HOME/bin/webuser.sh WEBBLÄSARE'

    Det sista ordet ska givetvis inte vara »WEBBLÄSARE«, utan det kommando som din webbläsare startas med. Till exempel firefox. Om du får välja mellan att köra kommandot i ett terminalfönster eller inte, så kan du välja att låta bli.

Vad kommer hända när du dubbelklickar på den där ikonen? Jo, en pytteliten ruta dyker upp på skärmen som frågar efter lösenord. Det är sudo som frågar, och i sina flesta inkarnationer är det lösenordet till ens eget konto det ber om. Vanligtvis frågar sudo inte heller efter lösenordet oftare än kanske var tionde eller tjugonde minut. Programmet kommer nämligen ihåg lösenordet åt dig en stund efter att du matat in det.

Om sudo bråkar!

Om sudo inte vill låta dig hålla på med sådant precis hur som helst, så kan du lägga till följande rad i slutet av filen /etc/sudoers – men akta dig! Om du råkar göra den filen ogiltig kan du bli utelåst från ditt eget system!

user    ALL=(ALL) SETENV: ALL

Första ordet ska förstås inte vara user, utan ditt eget användarnamn på din burk. Detta är viktigt! Gör du fel, som sagt, så får du rejäla problem, och kommer sitta och svära över att du aldrig lärt dig ed, en texteditor anpassad för en tid då man hade skrivare istället för datorskärmar. (Jag skojar inte.)

Ett sätt att undvika sådana missöden är att försöka redigera filen med följande kommando:

$ sudo env EDITOR=gedit visudo

Ersätt gedit med den texteditor du gillar att använda. När du ändrat färdigt i filen och sparar och stänger, så kommer visudo kontrollera att filen är riktig. Har du gjort något tokigt kommer den ge dig en chans att reparera skadan innan det är för sent.

Och till sist, om du inte gillar att sudo kommer ihåg dina lösenord, lägg till följande rad långt upp i /etc/sudoers, bland de andra Defaults-raderna, om du har några.

Defaults timestamp_timeout =0

Det var allt!