Kebmans blogg

Hvordan få tilgang til delte Windows-filer fra Linux

Posted in Data, Fildeling, Internett, Networking by kebman on 30/07/2015

Kjører du en versjon av Linux er det som regel en smal sak å få tilgang til filer delt fra Windows-maskiner på hjemmenettverket. Her er hvordan!

Kjøpte nylig en Raspberry Pi 2 Model B, og ønsket tilgang til filene jeg har delt fra Windows PCen min, dermed kommer guiden til å ta utgangspunkt i det. Men har du et annet Linux-system, så frykt ikke! Pi-en bruker en versjon av Debian Linux kallt Raspian, dermed vil denne guiden funke for de fleste andre UX-distribusjoner også.

Forhåndskunnskaper:

  1. Du må være komfortabel med command line prompts og bruk av terminalverktøy.
  2. Du må allerede ha fungerende internett-tilgang på UX-enheten din.
  3. Du må allerede ha filer som er delt på hjemmenettverket ditt fra Windows-PCen din.
  4. Du må vite IP-ene til de forskjellige enhetene, enten ved å bruke windows > cmd > ipconfing på Windows, ifconfig på UX-enheten, eller ved å bruke Advanced IP scanner
  5. UX-enheten din bør være koblet til samme hjemmenettverk som PCen din, men det er ikke et absolutt krav så lenge du vet hvordan du setter opp port-forwarding.

Mangler en av punktene over, må du finne ut av hvordan du order det selv. Tips: Google er din venn!

Logg inn på UX-enheten din, enten via terminalen eller via command prompt. Er du på en annen maskin kan du bruke PuTTy fra PC (må lastes ned), eller logge inn via SSH fra Mac eller andre UX-maskiner. Hvordan du gjør det har ikke så mye å si, og vil ikke bli dekket av denne guiden. Siden jeg er lat, gadd jeg ikke fysisk gå heeelt ned gangen og bort til Pi-en min, så istedenfor brukte jeg PuTTy.

Opprett en mappe på Linux-maskinen som du kommer til bruke til å vise alle Windows-filene dine i. Du kan både kalle den hva du vil og legge den hvor du vil, men jeg har valgt å kalle den windows-share og å legge den på hjemmemappen min. Du trenger ikke angi hele filbanen hvis du allerede er i hjemmefolderen din, men jeg har likevel gjort det for ekstra klarhet. Alt etter hvordan UX-system du er på, kan det hende at hjemmemappen din har en litt annen adresse enn den som er vist. Min hjemmemappe er selvsagt /home/pi/.

I terminalen, skriv:

mkdir /home/pi/windows-share

OK, det var den enkleste delen av guiden! Så må du koble til Windows-maskinen. Her er et eksempel på hvordan du kan gjøre det:

sudo mount -t cifs //255.0.0.128/delt-windows-folder \
-o user=dittbrukernavn /home/pi/windows-share

sudo betyr at du må være superbruker for å få det til. mount er programmet som finner den delte mappen din. Så er det noen kommandoer som sendes til mount-programmet, inkludert IPen til Windows-maskinen din, og hvilken delt mappe du ønsker å få tilgang til.

Etter \-tegnet må du trykke enter.  Du vil da få en >-prompt, og der må du skrive en kommando for brukernavn og hvilken UX-mappe du vil dele til. Så trykker du enter en gang til for å finalisere.

Oppsummert trenger du altså å vite IP-en til din Windows-maskin, og navnet på mappen du deler med nettverket. Så må du ha brukernavnet til Windows-maskinen din. Sist men ikke minst må du huske på hvilken mappe du ønsker å dele filene med på UX-enheten din.

Og det var det! Har du gjort det riktig, skal du nå kunne gå inn i mappen windows-share på UX-enheten din og se alle filene som er delt til den fra Windows-PCen din. Her er et eksempel på hva du kan prøve:

cd /home/pi/windows-share
ls

Med det vil du kunne se og bruke alle de delte filene på UX-enheten din.

Reklamer

Gi nye filetternavn til flere filer samtidig

Posted in Programmering, Scripting, Teknologi by kebman on 23/12/2012

Sannsynligvis har du vært borti at du trenger å gi nytt filetternavn til flere filer av samme type. Det er noe skikkelig herk, så derfor skrev jeg et lite Perl-script for å gjøre jobben raskere.
Her er det:

#!/usr/bin/perl
# ChSuff v1.0 by Kebman
# Change the suffixes of all files of a given type in a dir
use strict;
use warnings;
use File::Copy;

if ($#ARGV +1 == "2") {
	if ($ARGV[0] eq $ARGV[1]) {
		print "Sorry arguments cannot be equal.\n";
	} else {

		# -- Main Code -- #
		my $old_suffix = "." . "$ARGV[0]";
		my $new_suffix = "." . "$ARGV[1]";

		my @old_filenames = grep (-f, <*$old_suffix>); # store only files with old suffix

		if (scalar(@old_filenames) == 0) { # If there are 0 occurences of given file
			print "Sorry, there are no files with the suffix $old_suffix\n";
		} else {
			my $old_length = length($old_suffix); # Check length of input
			my $old_name;
			my $new_name;
			my $without_suffix;

			foreach $old_name (@old_filenames) { # trip trough the array of filenames
				# remove old suffix with subrstr()
				$without_suffix = substr($old_name, 0, -$old_length);
				# rename the suffix of each file
				$new_name = "$without_suffix" . "$new_suffix";
				move($old_name, $new_name);
			}
		}
		# ---- #
	}
} else {
	print "\033[2J"; # These two incantation clears the screen
	print "\033[0;0H"; # ... and resets the cursor
	print "chsuff v1.0 by Kebman\nRename the suffixes of all files of a certain type in a dir\n";
	print "---\nUSAGE: chsuff [old suffix] [new suffix]\n---\n";
	print "Example: chsuff txt html\n";
	print "Will change the old suffixes all .txt-files to .html in the directory you're in\n";
}

Så langt fungerer det på Mac OS X og dermed sikkert også på Linux-maskiner, men det er usikkert om det vil fungere på en Windows PC grunnet bruken av glob. Føl deg i så fall fri til å skrive om på kildekoden bare du husker å gi meg litt cred. 🙂

For ordens skyld, glem nå det lille programmet som på de fleste systemer kalles «rename». 😉

Problem med dobbellagring av filer

Posted in Programmering, Programvare, Teknologi by kebman on 23/07/2010

For hvert uerstattelig bilde jeg tok, måtte det tas backup. Siden jeg ikke var så nøye med hvordan jeg gjorde det, har det endt opp i et bildekaos som bare tar mer og mer plass på harddiskene mine. Her er hvordan jeg er i ferd med å løse problemet.

Sjekk også Organisering: Nøkkelen til fotografisk lykke.

Jeg har lenge hatt proble med dobbellagring av filer, spesielt siden jeg driver med foto og jeg tar backup i hytt og pine. Dette har utviklet seg til et reelt problem som tar opp svært mye diskplass, uten at det er lett å gjøre noe med av redsel for å slette filer jeg egentlig har lyst å beholde. Løsningen er selvfølgelig programvare som finner duplikater og dobbellagrede filer, men det var lettere sagt enn gjort å finne.

Gjør det selv

Jeg har lett litt rundt, men ikke funnet noen produkter som gjør akkurat det jeg ønsker på en tilfredsstillende måte. Min kompis Lars Thomas sa at det ikke var noe problem for en kar som meg, og at jeg bare fikk skrive programmet selv. «Hehehehe» var alt jeg klarte å svare på det, men siden det nå tross alt er ferie tok jeg faktisk på meg utfordringen.

Siden jeg er i den heldige situasjon å jobbe på et UX-basert system* (Mac OS X) med Perl forhåndsinstallert, skriptingspråket som også kalles «The Swiss Army Chainsaw», satte jeg i gang med det. Til nå har dette egentlig bare vært en glede å holde på med.

De nødvendige steg

Å komme frem til et program som presenterer dobbellagrede filer har mange mindre steg. Det aller første man må gjøre er å finne ut hvordan man åpner ei fil og sjekker innholdet. Så er det jo greit å kunne få ei liste over filene i ei mappe, for eksempel, slik at man kan åpen alle filene. Deretter må man finne ut hvordan man sammenligner disse på mest mulig effektiv måte.

Sjekk summen

Tilfeldigvis finnes det allerede små programmer som lager sjekksum (checksum) av filer, og forhåndssintstallert med de fleste UX-systemer er MD5. De er egentlig ment for å sjekke at en fil som ble sendt over nett ikke har blitt ødelagt på veien ved å lage en sjekksum utav fila. Er sjekksummen den samme som da den ble sendt, er ingenting forandret i filen. Samme teknikken kan brukes til å finne duplikater. Istedenfor at man prøver å sammenligne hele filer opp mot hverandre, som er upraktisk siden noen filer er svære, kan man bare sammenligne sjekksummen. Har man to filer med samme sjekksum, er sjansen stor for at det er dobbellagring ute og går.

Under er scriptet jeg har har fått til så langt. Alt du lurer på står kommentert i grått. Jada, vet det er overkommentert, men da lærer du lettere.

Perl-skriptet:

#!/usr/bin/perl
# Lager sjekksum av alle filene i en mappe, og printer dem til skjerm.

use strict;
use warnings;
use Digest::MD5 qw(md5_hex); # Importerer MD5 biblioteket. Tingen som gjør det mulig å lage sjekksum av filer.
use Cwd; # Dette biblioteket importeres for bedre kontroll over mappevisning.
#
# Håndtering av mapper:
#
opendir(DIR, "."); # Åpner mappen du er i.
# my @files = readdir(DIR); # lister opp ALLE filene, inkludert ./ og ../.
# my @files = grep(/\.$filetype$/,readdir(DIR)); # Mulighet for å lese kun filer av type $filetype. Kommentert ut. Variabelen $filetype må også deklareres om det skal funke siden vi bruker "strict".

my @files = grep( -f ,readdir(DIR)); # Lister opp alle filer, unntaken mapper og symbolske lenker. De sistnevnte forhindres av UNIX-kommandoen "grep -f", som du også kan kjøre fra terminalen, f.eks med en pipe når du bruker UNIX-kommandoen "ls" (samme som "dir" i DOS, altså å liste opp filene i en mappe).
closedir
(DIR); # God praksis.
# Deklarerer variabler siden vi bruker "strict":
my $file; # For øyeblikket tom, men vil bli fylt for hvert element i arrayen @file_liste ettersom den blir loopet igjennom.
my $pwd = &Cwd::cwd()."/"; # Får tak i den fulle statiske adressen (tråden/path) til mappen du er i. Ekvivalenten til UNIX-kommandoen "pwd".
#
# Håndtere sjekksummering av filer:
#
foreach $file (@files) { # Loop igjennom alle filene i nåværende mappe (directory).
   open(FILE, $file) or die "Får ikke åpnet '$file': $!"; # Åpne hver fil.
   binmode(FILE); # Åpne hver fil som binærdata.

   my $md5 = Digest::MD5->new; # Opprette en ny metode for sjekksummering av en fil, så lenge (while) slutten av datastrømmen enda ikke er nådd.
   while (<FILE>) {
      $md5->add($_);
   }
   close(FILE); # Alltid god praksis.
   print $md5->b64digest, " $pwd$file\n"; # Print MD5 sjekksum til skjerm for hver fil i arrayen @file_list.
}
Creative Commons License
Checksum Files in Dic by Kebman is licensed under a Creative Commons Attribution 3.0 Unported License.

Alt skriptet gjør til nå er å åpne mappen skript-filen ligger i, lese igjennom alle filene, lage en sjekksum av dem med MD5, og skrive resultatet til skjermen. Intet mer. Men i alle fall kan det brukes til å finne duplikater i samme mappe ved å inspisere sjekksummene.

Resultatet blir seende slik ut når du kjører det fra terminalen:

MacBook-Pro-usr:checksum_test usr$ perl Checksum_Files_in_Dic.pl
N03psjKibdP/7GV3itPLXw /Users/usr/dup_test/23.txt
tTE3ieMQOwLCyaRtWenETg /Users/usr/dup_test/24.txt
N03psjKibdP/7GV3itPLXw /Users/usr/dup_test/3 en.txt
c4kPP/IdNgVZcbwYN9HjeA /Users/usr/dup_test/4 en.txt
nF0fIWxHfWb5NPbytia0cg /Users/usr/dup_test/5.txt
N03psjKibdP/7GV3itPLXw /Users/usr/dup_test/99.data.txt

En bedre versjon ville istedenfor skrevet resultatene fra alle valgte mapper til en database, gjort en sammenligning der, og så kun printet eventuelle duplikater til skjerm. En liten database holder, som f.eks SQLite, som også allerede er installert på de fleste Mac-er.

Føl deg fri til å stjele Perl-koden min og bruke den som du måtte ønske. 🙂 Den er CC-lisensiert for fri bruk av både private og kommersielle aktører.

* UX-basert system er et system basert på operativsystemet UNIX. Dette systemet har mange avarter. Mest kjent er kanskje Linux, men det gjelder også Mac OS X og mange flere.