Vis dine scripts

Dette forum bruges på EGET ANSVAR til at lege med scripts og andre ting med risiko for at beskadige sit eget og andres systemer.
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Vis dine scripts

Indlæg af Christian.Arvai »

I forbindelse med at jeg selv er ved at lave en ny udgave af mit opstartsscript (til mig selv privat), tænkte jeg at det kunne være både sjovt og lærerrigt, hvis vi lavede en tråd hvor folk kan smide de scripts de laver i, sådan at vi kan hente lidt inspiration hos hinanden.

Lige en advarsel til andre brugere - bla. mit eget script ændre temmelig meget på opsætningen, og jeg fjerner også nogle standardprogrammer, så hvis i ikke kan gennemskue indholdet af et script her i sandkassen, skal i IKKE kører det !

Kode: Vælg alt

#!/bin/sh 
# Opstartscript til Ubuntu / 64 bit
# Skrevet af Christian Arvai
# Husk at kopiere indholdet af mappen hpstart ind i hjemmemappen før kørsel af scriptet !
#
# TIL ANDRE DER LÆSER / BRUGER DETTE SCRIPT :
# Dette script er lavet til min egen personlige opsætning af pc´en/ubuntu og kan, Pga. de store ændringer i opsætningen, ikke anbefales til brug af andre, men man kan selvfølgeligt bygge det om efter eget behov !!!
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install af aptitude."
echo ""
sudo apt-get install -y aptitude
echo ""
echo "Udført"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Opdatering af systempakker."
echo ""
sudo dpkg --configure -a
sudo apt-get check -y
sudo updatedb
sudo aptitude install -y build-essential
sudo aptitude update -y 
sudo aptitude safe-upgrade -y 
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Opgradering af kernel."
echo ""
echo ""
sudo aptitude install -y linux-image-generic linux-headers-generic
sudo aptitude update -y 
sudo aptitude safe-upgrade -y   
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af key´s, medibuntu og andre programmer,"
echo "som kræver at man godkender licenser under install."
echo ""
# key medibuntu
gpg --keyserver keyserver.ubuntu.com --recv 2EBC26B60C5A2783 && gpg --export --armor 2EBC26B60C5A2783 | sudo apt-key add -
# key vlc 1.0
gpg --keyserver keyserver.ubuntu.com --recv 7613768D && gpg --export --armor 7613768D | sudo apt-key add -
# key Ooo
gpg --keyserver keyserver.ubuntu.com --recv 60D11217247D1CFF && gpg --export --armor 60D11217247D1CFF | sudo apt-key add -
# install af medibuntu
sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list; sudo apt-get -q update; sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring; sudo apt-get -q update
# install af programmer - som kræver at man skal godkende licenser under install
sudo apt-get install -y aptitude ubuntu-restricted-extras wine cabextract hot-babe sensord sensors-applet
sudo wget http://www.kegel.com/wine/winetricks && sh winetricks allcodecs
# install af google earth 5.0
chmod +x ~/GoogleEarthLinux.bin && sudo ~/GoogleEarthLinux.bin && sudo rm -rf ~/GoogleEarthLinux.bin
# install af americas army
sudo chmod -R 777 ~/Spil/army && sudo ~/Spil/army/armyops250-linux.run && sudo aptitude purge ~/Spil/army
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Sletning af unødvendige mapper og programmer."
echo "Ændring af opdateringshåndtering, så den ikke kommer automatisk."
echo "Blokkering af Seneste Dokumenter."
echo ""
# sletning af mapper
sudo rm -rf ~/Musik ~/Examples ~/Videoklip ~/Offentligt ~/Dokumenter ~/Skabeloner /usr/share/sounds/ubuntu
# sletning af programmer
sudo aptitude purge -y totem-mozilla gnome-orca rhythmbox rhythmbox-dbg ekiga evolution-common   
# blokkering af Seneste Dokumenter
sudo rm -rf ~/.recently-used.xbel && mkdir ~/.recently-used.xbel
# ændring af opdateringshåndtering
gconftool -s --type bool /apps/update-notifier/auto_launch false
# ændring af ctrl-alt-backspace
sudo aptitude install -y dontzap && sudo dontzap --disable
# ændring af cpu opsætning under boot
sudo rm -rf /etc/init.d/rc && sudo mv ~/rc /etc/init.d
# Fjern 60 sekunders forsinkelse ved nedlukning af Ubuntu
gconftool-2 -s '/apps/indicator-session/suppress_logout_restart_shutdown' --type bool true
echo ""
echo "Udført"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af Danske sprogpakker."
echo "Fjernelse af Engelske sprogpakker."
echo ""
sudo aptitude purge -y language-support-en language-support-writing-en language-pack-gnome-en language-pack-gnome-en-base language-pack-en-base thunderbird-locale-en-gb language-pack-en
sudo aptitude install -y language-pack-da-base language-support-da language-support-writing-da language-pack-gnome-da language-pack-gnome-da-base
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af pakker til skrivebordmiljø og Compiz."
echo ""
sudo aptitude install -y compizconfig-settings-manager gnome-themes-extras gnome-raw-thumbnailer gnome-accessibility-themes-extras gnome-extra-icons community-themes gnome-splashscreen-manager
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Java og Flash."
echo ""
sudo aptitude install -y sun-java6-jdk sun-java6-plugin sun-java6-fonts flashplugin-nonfree
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Grafik."
echo ""
sudo aptitude install -y gimp inkscape freecad gpaint xpaint tuxpaint
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Internet."
echo ""
sudo aptitude install -y deluge-torrent skype amsn xchat gmail-notify
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Kontor."
echo ""
echo "Ingen pakker er pt indbygget"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Lyd og Video."
echo ""
sudo aptitude install -y vlc vlc-plugin-pulse mozilla-plugin-vlc non-free-codecs libdvdcss2 totem-plugins-extra sound-juicer soundconverter winff oggconvert audacity avidemux gnomebaker acidrip ogmrip mencoder ffmpeg ffmpeg2theora dvdauthor dvdstyler gaupol gtk-recordmydesktop cheese tuxguitar
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Læringsprogrammer."
echo ""
sudo aptitude install -y tuxtype tuxtype-data-nonfree tuxmath
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Spil."
echo ""
sudo aptitude install -y extremetuxracer planetpenguin-racer planetpenguin-racer-extras supertuxkart pingus supertux torcs xmoto alien-arena openarena nexuiz sauerbraten warzone2100 scorched3d lincity-ng gl-117 flightgear warsow trigger frozen-bubble childsplay gcompris gcompris-sound-da
sudo aptitude purge -y gcompris-sound-en
echo ""
echo "Udført"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Systemværktøjer."
echo ""
sudo aptitude install -y gmountiso clamav sysinfo gnome-schedule
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Tilbehør."
echo ""
sudo aptitude install -y shutter
sudo wget http://blogage.de/files/3531/download -O- | tar -xzf - && cd compiz-switch-0.4.0~source && sudo make install && sudo rm -rf ~/compiz-switch-0.4.0~source
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Videnskab."
echo ""
sudo aptitude install -y stellarium
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""


echo "Install Vedr. Administration."
echo ""
sudo aptitude install -y startupmanager gparted gufw firestarter gparted ntfsprogs
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install af andre programmer som ikke er direkte i Hovedmenuen."
echo ""
sudo aptitude install -y nautilus-image-converter bootchart bum deborphan mozilla-firefox-adblock mozilla-noscript openoffice.org openclipart-openoffice.org gthumb powertop pysdm glipper cups-pdf xpdf msttcorefonts seahorse brother-lpr-drivers-extra brother-cups-wrapper-extra rar p7zip p7zip-full alien
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Oprettelse af mapper og flytning af filer."
echo ""
mkdir ~/PDF
rm -rf ~/.mozilla && mv ~/skjulte_mapper/.mozilla ~
mv ~/skjulte_mapper/.notifier.conf ~
mv ~/skjulte_mapper/.compiz ~
mv ~/skjulte_mapper/.amsn ~
mv ~/skjulte_mapper/.Skype ~
mv ~/skjulte_mapper/.xchat2 ~
rm -rf ~/skjulte_mapper
mv ~/vlc ~/.config
mv ~/deluge ~/.config
mv ~/Spil/cod1 ~/.wine/drive_c
mv ~/Spil/cod2 ~/.wine/drive_c
sudo mv ~/ubuntu /usr/share/sounds
sudo mv ~/Tux /usr/share/amsn/skins
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Aktivering af scripts."
echo ""
sudo cp ~/opryd.sh ~/.gnome2/nautilus-scripts/opryd.sh && sudo chown root ~/.gnome2/nautilus-scripts/opryd.sh
sudo mv ~/opryd.sh /usr/local/bin && sudo chown root /usr/local/bin/opryd.sh
sudo mv ~/installspil.sh /usr/local/bin && sudo chmod +x /usr/local/bin/installspil.sh
sudo mv ~/avi2iso.sh /usr/local/bin && sudo chmod +x /usr/local/bin/avi2iso.sh
mv ~/resize_400x300 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_400x300
mv ~/resize_640x480 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_640x480
mv ~/resize_1024x768 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_1024x768
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""


echo "Ændring af interval mellem harddisk tjek under opstart af ubuntu."
echo "Bemærk at der vil komme fejlmeldinger, dette sker der intet ved !"
echo ""
sudo tune2fs -c5000 -i12m /dev/sda1
sudo tune2fs -c5000 -i12m /dev/sda2
sudo tune2fs -c5000 -i12m /dev/sda3
sudo tune2fs -c5000 -i12m /dev/sda4
sudo tune2fs -c5000 -i12m /dev/sda5
sudo tune2fs -c5000 -i12m /dev/sda6
sudo tune2fs -c5000 -i12m /dev/sda7
sudo tune2fs -c5000 -i12m /dev/sda8
sudo tune2fs -c5000 -i12m /dev/sda9
sudo tune2fs -c5000 -i12m /dev/sda10
sudo tune2fs -c5000 -i12m /dev/sda
sudo tune2fs -c5000 -i12m /dev/sdb
sudo tune2fs -c5000 -i12m /dev/sdc
sudo tune2fs -c5000 -i12m /dev/sdd
sudo tune2fs -c5000 -i12m /dev/sde
sudo tune2fs -c5000 -i12m /dev/sdf
sudo tune2fs -c5000 -i12m /dev/sdg
sudo tune2fs -c5000 -i12m /dev/sdh
sudo tune2fs -c5000 -i12m /dev/sdi
sudo tune2fs -c5000 -i12m /dev/sdj
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Afsluttende opdatering af systempakkerne."
echo ""
sudo dpkg --configure -a
sudo updatedb 
sudo aptitude update -y 
sudo aptitude safe-upgrade -y
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Oprydning af systemet."
echo ""
sudo deborphan  | xargs apt-get remove --purge -y
sudo apt-get autoremove -y --force-yes
sudo aptitude clean -y
sudo aptitude autoclean -y
sudo aptitude purge ~b
sudo aptitude purge ~c
rm -rf ~/.local/share/Trash/files
echo ""
echo "Udført."
echo ""
echo ""
echo ""

echo "Kørslen af scriptet er nu gennemført."
echo ""
echo "Denne computer lukker ned om 5 minutter !"
echo ""
sudo sleep 300
sudo poweroff
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

Rigtig god idé.
Selv bruger jeg ikke scripts så meget, men til backup af dokumenter og de systemfiler jeg manuelt redigerer i gør det livet lettere.

kommandoen "cls" er et lille script der kører "clear" for mig (jeg syntes clear er for besværligt at taste...)

Kode: Vælg alt

#!/bin/bash

back_docu_ext() {
rsync --delete-after -avz --exclude-from=/home/titanus/Linux/rsync-docu-ext /home/titanus /media/xBackup/Hyper/
rsync --delete-after -avz /usr/local/bin/ /media/xBackup/Hyper/local-bin/
}

copy() {
cp -u /etc/apt/sources.list /media/xBackup/Hyper/
cp -u /etc/apt/preferences /media/xBackup/Hyper/
cp -u /etc/hdparm.conf /media/xBackup/Hyper/
cp -u /etc/fstab /media/xBackup/Hyper/
cp -u /etc/exports /media/xBackup/Hyper/
cp -u /home/titanus/.mplayer/config /media/xBackup/Hyper/mplayer-config
cp -u /home/titanus/.bashrc /media/xBackup/Hyper/
}

cls && echo "Starting..."
if grep '/media/xBackup' /proc/mounts >/dev/null;
then
back_docu_ext
copy
else sudo mount /media/xBackup
back_docu_ext
copy
fi
sudo umount /media/xBackup
cls && echo "All done"

Jeg har så redigeret sudoer-listen så der ikke skal tastes kode ved "mount" og "umount".

Hilsen Nicky
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

christian.arvai skrev:I forbindelse med at jeg selv er ved at lave en ny udgave af mit opstartsscript (til mig selv privat), tænkte jeg at det kunne være både sjovt og lærerrigt, hvis vi lavede en tråd hvor folk kan smide de scripts de laver i, sådan at vi kan hente lidt inspiration hos hinanden.


Jeg har siddet og fedtet lidt rundt med mit eget backup-script i håbet om at få det til at afbryde ved fejl, eller skal jeg sige, ved returneringen af en exit status der ikke er 0. Dette kan gøres meget let ved at tilføje '- e' efter defineringen af bash på første linje (#!/bin/bash -e), problemet er at man ikke umiddelbart kan finde ud af hvorfor bash afsluttede scriptet. Eller mere præcist, jeg kunne ikke finde dokumentationen for de tilvalg man kan bruge under defineringen af bash, så jeg kender ikke baggrunden for '-e' tilvalget.

Egentlig burde man jo tjekke de programmer man kalder fra scriptet for at sikre de bruger 0 ved succes og noget andet ved fejl, men det kan man jo altid gøre senere, eller evt. ved at rette koden til at tjekke efter den exit status man forventer/vil have.

Pointen er at fejlen eller den uforudsete omstændighed der gør at scriptet ikke virker, skal rettes inden at en ordenlig backup kan udføres, så der er ingen grund til at scriptet kører færdig ved fejl. Jeg kunne forestille mig at det er sandt for de fleste scripts der udfører en række handlinger, så jeg tænkte jeg ville dele hvad jeg havde fundet ud af indtil videre.

Den følgende kode kan evaluere exit status på den/det netop kørte kommando/program:

Kode: Vælg alt

kommando/program
if [ $0 -eq 0 ]
then
echo "succes"
else
echo "fejl"
fi


I mit nuværende backup-script bliver der kørt en række af programmer som 'cp -u', 'rsync' og '(u)mount' og jeg regnede at indsætte funktionen på den næste handling i succes-feltet, og en exit-funktion i fejl-feltet som først skriver hvilken kommando der fejlede, og så afslutter scriptet.

Håber det kan inspirere
Hilsen Nicky
laoshi
Redaktør
Indlæg: 5515
Tilmeldt: 26. apr 2008, 20:52
IRC nickname: laoshi
Geografisk sted: Vejle

Re: Vis dine scripts

Indlæg af laoshi »

I mit eget oprydnings- opdaterings- og backupscript har jeg indlagt kontrol af om backupmediet (extern harddisk eller usb-nøgle) er mounted og om der er plads nok til backup'en. Fejl i processen pipes til en logfil. Hele processen kan følges ved at beskeder sendes til notify-send, så der kommer pop-ups i skærmens øverste højre hjørne, med passende ikoner på.
Og hvis man vil følge det hele på tæt hold, så kører processen jo forbi i den åbne terminal.

Det ser sådan ud i et af scriptets mange afsnit:

Kode: Vælg alt

#Der foretages overførsel af Dokumenter-mappen til en usb-nøgle.
function docsbackup {
exec 2>> $HOME/backup_fejl
clear
if [ ! -e /media/$usbd ]; then
echo -e "\n\t\t\tUSB ikke tilsluttet"
echo -e "\n\tSæt usb-nøglen i og tast Y for at fortsætte"
notify-send "USB-nøgle" "er ikke tilsluttet. Sæt den i og tast Y for at fortsætte" -i edit-delete
elif
[ $(du -s $HOME/Dokumenter/ | awk '{print $1}') -gt $(df /media/$usbd | awk '/^\// {print $4}') ]; then
notify-send "Mangler plads" "Der er ikke plads nok på usb-nøglen til en fuld backup" -i edit-delete
echo -e "\n\t\tDer er ikke plads nok på usb-nøglen til en fuld backup."
return
else
echo -e "\n\tMappen Dokumenter gemmes på usb-nøglen"
notify-send "Mappen Dokumenter" "gemmes på usb-nøglen." -i drive-removable-media-usb
rsync -vrtplz --progress --stats --delete $HOME/Dokumenter /media/$usbd
notify-send "Mappen Dokumenter" "er gemt på usb-nøglen." i drive-removable-media-usb
echo -e "\n\t\tMappen Dokumenter er nu gemt på usb-nøglen"
echo -en "\n\tTast Y for at vende fortsætte "
fi
}


usb-nøglen kaldes $usbd
"Von guten Mächten wunderbar geborgen
erwarten wir getrost was kommen mag.
Gott ist mit uns am Abend und am Morgen
Und ganz gewiss an jedem neuen Tag"

(Dietrich Bonhoeffer 1906-1945)

http://www.stromata.dk
https://wiki.ubuntu.com/FlemmingChristensen
https://launchpad.net/~laoshi
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Vis dine scripts

Indlæg af lath »

TitanusEramius skrev:
christian.arvai skrev:I forbindelse med at jeg selv er ved at lave en ny udgave af mit opstartsscript (til mig selv privat), tænkte jeg at det kunne være både sjovt og lærerrigt, hvis vi lavede en tråd hvor folk kan smide de scripts de laver i, sådan at vi kan hente lidt inspiration hos hinanden.


Jeg har siddet og fedtet lidt rundt med mit eget backup-script i håbet om at få det til at afbryde ved fejl, eller skal jeg sige, ved returneringen af en exit status der ikke er 0. Dette kan gøres meget let ved at tilføje '- e' efter defineringen af bash på første linje (#!/bin/bash -e), problemet er at man ikke umiddelbart kan finde ud af hvorfor bash afsluttede scriptet. Eller mere præcist, jeg kunne ikke finde dokumentationen for de tilvalg man kan bruge under defineringen af bash, så jeg kender ikke baggrunden for '-e' tilvalget.

Egentlig burde man jo tjekke de programmer man kalder fra scriptet for at sikre de bruger 0 ved succes og noget andet ved fejl, men det kan man jo altid gøre senere, eller evt. ved at rette koden til at tjekke efter den exit status man forventer/vil have.

Pointen er at fejlen eller den uforudsete omstændighed der gør at scriptet ikke virker, skal rettes inden at en ordenlig backup kan udføres, så der er ingen grund til at scriptet kører færdig ved fejl. Jeg kunne forestille mig at det er sandt for de fleste scripts der udfører en række handlinger, så jeg tænkte jeg ville dele hvad jeg havde fundet ud af indtil videre.

...


Hej Nicky.

Du kan med fordel bruge de pakker der hedder bashdb, og ddd.
bashdb er en debugging program - altså et prograam til at finde fejl i bash scripts. DDD er et grafisk debugger der blandt har support debugging af bash scripts - med dem er det meget nemmere at finde fejl i bash scripts.



bash dokumentationen kommer med pakken bash-doc, og lægger sig i:

Kode: Vælg alt

/usr/share/doc/bash-doc/

og

Kode: Vælg alt

/usr/share/doc/bash/

mapperne efter installation.



Med hensyn til kommandoers fejlkoder skal du kigge i deres man side med man læseren, nogle gange via en info side med en info eller en pinfo læser. (tryk på q-tast afslutter en man, info, og pinfo læser)
Med en brower kan du læse i man sider via http://manpages.ubuntu.com/manpages/, i søgefeltet øverst til højre skriver du hvad du leder efter. Hvis der er et hit, klikker du på det link under hvilken Ubuntu version du udvikler scriptet til (de ændrer sig normalt ikke, men det kan ske, så derfor er der link til en man side for hver ny ubuntu version)


"Advanced Bash-Scripting Guide", der kommer i abs-guide pakken indeholder information om - ja - avanceret bash scripting.
Du starter guiden ved at kopiere:

Kode: Vælg alt

file:///usr/share/doc/abs-guide/html/index.html

ind i en browser (nej - det er ikke en fejl at der er 3 stk / efter file:, prøv at overveje hvorfor - men det har den der har lavet bb-kode parseren tilsyneladende ment, så [url]-bb kode tagget virker ikke, selv om file:/// er gyldigt i Linux, UNIX, og BSD systemer).
Eksempel scripts til "Advanced Bash-Scripting Guide" finder du i:

Kode: Vælg alt

/usr/share/doc/abs-guide/examples

mappen. Der er mange eksempler på scripts. :)



bash har support for følgende funktionalitet, som også findes i binære programmer:

I binære programmer understøtter en C oversætter (compiler) noget der hedder __FILE__ og __LINE__. Bemærk at der 2 stk _-tegn foran og bagved. De kan bruges i fejlmeddelelser ved at __FILE__ indeholder den fil der arbejdes med lige nu. __LINE__ indeholder linienummeret der arbejdes med lige nu (i __FILE__).

Med de 2 er det nemt at lave asserts (kørsels-tidpunkt tests), hvor man skriver en/flere fejlmeddelelse(r) til syslog - et program der skriver fejl fra programmer ned i filen /var/log/syslog).
Advanced Bash-Scripting Guide, kapitel 29 "Debugging", har en fin assert funktion du kan bruge/rå-kopiere, der er også en god forklaring på asserts.

Skrivning til syslog foregår via et program der hedder logger, der kommer i pakken der hedder bsdutils. Man siden til logger finder du her:http://manpages.ubuntu.com/manpages/natty/en/man1/logger.1.html

$0 i bash svarer til __FILE__, og $LINENO svarer til __LINE__.
Vil du i et bashscript kun have filnavnet uden stien til programmet, så bruger du denne lille kodestump, som kun returnerer filnavnet:

Kode: Vælg alt

basename $0




Andre interessante pakker du kan kigge på er:
  • funcoeszz 65 klar til brug bash scripts:
    script with 65 useful mini applications

    Funcoes ZZ is a bash script that contains 65 useful applications,
    ready to run from command line on UNIX systems (Linux, BSD, Cygwin,
    Mac OS X, and others). This functions includes:
    Conversions and calculations (dates, hours, measure units, CPF, CNPJ)
    File manipulation (change name, extension, content)
    Data manipulation (statistics, filters, password generators)
    Internet site queries (dictionaries, translators, news, searches)
  • libbash
    a tool that enables bash dynamic-like shared libraries

    libbash is a tool for managing bash scripts that contain functions you may
    want to use in various scripts. It provides mechanism to define dependencies
    between scripts and facility for script loading

    Altså: du kan angive afhænigheder til et andet script, der indeholder bash funktioner du har brug for.
    De script indlæses ved brug af et indlæser-script der køres automatisk. (det er sådan binær kode shared libraries (*.so filer) fungerer)
  • libbash-doc Udvikler dokumentation til libbash

Mere hardcore pakke er bash-builtins til at lave DIY(Do It Youself=gør det selv) bash funktioner der er implementeret via C kode i et plugin:
bash-builtins
Bash can dynamically load new builtin commands. Included are the
necessary headers to compile your own builtins and lots of examples.


/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

Hej Lars

Tusind tak for dit svar. Som du nok har regnet ud er mit backup-script indgangen til at bruge bash og Linux på et højere niveau end jeg har gjort tidligere, og i den proces bliver dit svar uundværligt. Umiddelbart kender jeg ikke rigtig til noget af det du har skrevet om, så over de næste uger vil jeg arbejde mig igennem dit svar og ganske givet lære en masse nyt :)

Tak igen
Hilsen Nicky
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Vis dine scripts

Indlæg af Christian.Arvai »

Jeg har efterhånden flere gange selv oplevet, at jeg et stykke tid efter at jeg havde opdateret, sad og tænkte "hvad var det så lige præcist der skete denne gang". Så jeg har optimeret mit oprydningsscript, så det nu laver en fin "logbog" i hjemmemappen, hvor jeg så kan kikke hvis der skulle opstå behov for dette.

Jeg har også smidt "echo "`date`"" med, så jeg kan se start/stop tidspunktet :

Kode: Vælg alt

#!/bin/sh
# Oprydning og opdatering af Ubuntu.
# Skrevet af Christian Arvai.
#
echo "" > ~/Opdateringsoversigt
echo "Opstartstidspunkt for opdateringen :" >> ~/Opdateringsoversigt
echo "`date`" >> ~/Opdateringsoversigt
echo "" >> ~/Opdateringsoversigt
echo "Opdatering af systempakker starter." >> ~/Opdateringsoversigt
sudo dpkg --configure -a >> ~/Opdateringsoversigt
sudo apt-get check -y >> ~/Opdateringsoversigt
sudo updatedb >> ~/Opdateringsoversigt
sudo aptitude safe-upgrade -y >> ~/Opdateringsoversigt
sudo apt-get update -y  -m >> ~/Opdateringsoversigt
sudo apt-get upgrade -y --force-yes  -m >> ~/Opdateringsoversigt
echo "Opdatering af systempakker er færdig" >> ~/Opdateringsoversigt
echo "" >> ~/Opdateringsoversigt
echo "Oprydning i pakkearkiver starter" >> ~/Opdateringsoversigt
sudo apt-get autoremove -y --force-yes >> ~/Opdateringsoversigt
sudo apt-get clean -y --force-yes >> ~/Opdateringsoversigt
sudo aptitude clean -y >> ~/Opdateringsoversigt
sudo aptitude purge ~b >> ~/Opdateringsoversigt
echo "Oprydning i pakkearkiver er færdig" >> ~/Opdateringsoversigt
echo "" >> ~/Opdateringsoversigt
echo "Sletning af filer ift. script. starter" >> ~/Opdateringsoversigt
sudo rm -rf ~/.local/share/Trash/*/* >> ~/Opdateringsoversigt
sudo rm -rf ~/.evolution/mail/local/folders.db >> ~/Opdateringsoversigt
sudo rm -rf ~/.mozilla/firefox/*/Cache/* >> ~/Opdateringsoversigt
sudo rm -rf ~/.cache/* >> ~/Opdateringsoversigt
sudo rm -rf ~/.thumbnails/*/* >> ~/Opdateringsoversigt
sudo rm -rf ~/.thumb/*/* >> ~/Opdateringsoversigt
sudo rm -rf /var/log/*.*gz >> ~/Opdateringsoversigt
sudo rm -rf /var/log/*/*.*gz >> ~/Opdateringsoversigt
sudo rm -rf /var/backups/*.*gz >> ~/Opdateringsoversigt
sudo rm -rf /var/cache/apt/archives/*.deb >> ~/Opdateringsoversigt
sudo rm -rf /var/cache/fontconfig/* >> ~/Opdateringsoversigt
# Disse "rm" skal kun med i min egen private udgave.
sudo rm -rf ~/Netinfo
sudo rm -rf ~/netinfo
sudo rm -rf ~/GPUinfo
sudo rm -rf ~/danid.log
sudo rm -rf ~/nohup.out
sudo rm -rf ~/brasero-session.log
sudo rm -rf /media/extern_1/.Trash-1000/files/*
sudo rm -rf /media/extern_2/.Trash-1000/files/*
sudo rm -rf /media/extern_3/.Trash-1000/files/*
sudo rm -rf /media/extern_4/.Trash-1000/files/*
sudo rm -rf /media/extern_5/.Trash-1000/files/*
sudo rm -rf /media/extern_6/.Trash-1000/files/*
echo "Sletning af filer er færdig" >> ~/Opdateringsoversigt
echo "" >> ~/Opdateringsoversigt
echo "Afslutningstidspunkt for opdateringen :" >> ~/Opdateringsoversigt
echo "`date`" >> ~/Opdateringsoversigt
echo "" >> ~/Opdateringsoversigt
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

Hvis du er modig, kan
sudo rm -rf /media/extern_1/.Trash-1000/files/*
sudo rm -rf /media/extern_2/.Trash-1000/files/*
sudo rm -rf /media/extern_3/.Trash-1000/files/*
sudo rm -rf /media/extern_4/.Trash-1000/files/*
sudo rm -rf /media/extern_5/.Trash-1000/files/*
sudo rm -rf /media/extern_6/.Trash-1000/files/*

ikke bare erstattes med
sudo rm -rf /media/extern_*/.Trash-1000/files/*

?? ;)


(det bør nok lige nævnes i hastige vendinger, at jeg faktisk ikke ved om det vil virke som man tror, eller om det bare sletter alt...)
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Vis dine scripts

Indlæg af Christian.Arvai »

Hmmm. Godt nok er jeg rimelig frisk på at teste alt, men det forslag kræver vist at jeg sikre mig, fjerner alle externe Hdd, og smider et usb-stick ind til testen, så jeg ikke risikere at rydde en hel Hdd hehe
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

Hehe, forsigtighed er nok påkrævet.

Men hvis du tester det, så skal du nok gøre det med 2 eksterne
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Vis dine scripts

Indlæg af lath »

Kode: Vælg alt

sudo rm -rf /media/extern_[1-6]/.Trash-1000/files/*

er det samme som
sudo rm -rf /media/extern_1/.Trash-1000/files/*
sudo rm -rf /media/extern_2/.Trash-1000/files/*
sudo rm -rf /media/extern_3/.Trash-1000/files/*
sudo rm -rf /media/extern_4/.Trash-1000/files/*
sudo rm -rf /media/extern_5/.Trash-1000/files/*
sudo rm -rf /media/extern_6/.Trash-1000/files/*


/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Vis dine scripts

Indlæg af Christian.Arvai »

Så har jeg fået opdateret mit "opstarts-script" til Ubuntu 12.04. I kan jo evt. nøjes med at pille enkelte kommandoer ud, i stedet for at kører det hele. Der blev hentet ca 1gb data, hvoraf de ca 300mb var alm. opdateringer.


OG som jeg også skrev i første indlæg:
Lige en advarsel til andre brugere - bla. mit eget script ændre temmelig meget på opsætningen, og jeg fjerner også nogle standardprogrammer, så hvis i ikke kan gennemskue indholdet af et script her i sandkassen, skal i IKKE kører det !


Kode: Vælg alt

#!/bin/sh 
# Opstartscript til Ubuntu / 64 bit
# Skrevet af Christian Arvai
# Husk at kopiere indholdet af mappen hpstart ind i hjemmemappen, før kørsel af scriptet !
# Husk at aktivere div softwarekilder, før kørsel af scriptet !
#
# TIL ANDRE DER LÆSER / BRUGER DETTE SCRIPT :
# Dette script er lavet til min egen personlige opsætning af pc´en/ubuntu og kan, Pga. de store ændringer i opsætningen, ikke anbefales til brug af andre, men man kan selvfølgeligt bygge det om efter eget behov !!!

echo ""
echo "Install af aptitude."
echo ""
sudo apt-get install -y aptitude
echo ""
echo "Udført"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Tilføjelser af softwarekilder."
echo ""
sudo apt-add-repository "deb http://archive.canonical.com/ubuntu/ precise partner"
sudo apt-add-repository "deb http://archive.canonical.com/ubuntu/ precise-updates partner"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise multiverse"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise-updates multiverse"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise main restricted"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise-updates main restricted"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise universe"
sudo apt-add-repository "deb http://dk.archive.ubuntu.com/ubuntu/ precise-updates universe"
sudo apt-get update -y 
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Opdatering af systempakker."
echo ""
sudo dpkg --configure -a
sudo apt-get check -y
sudo updatedb
sudo aptitude update -y 
sudo aptitude safe-upgrade -y 
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Opgradering af kernel."
echo ""
echo ""
sudo aptitude install -y linux-image-generic linux-headers-generic
sudo aptitude update -y 
sudo aptitude safe-upgrade -y   
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af key´s, medibuntu og andre programmer,"
echo "som kræver at man godkender licenser under install."
echo ""
# install af medibuntu
sudo -E wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && sudo apt-get --quiet update && sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && sudo apt-get --quiet update
# install af programmer - som kræver at man skal godkende licenser under install
sudo apt-get install -y ubuntu-restricted-extras wine cabextract
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Java og Flash."
echo ""
sudo aptitude install -y icedtea-plugin flashplugin-installer
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af Danske sprogpakker."
echo "Fjernelse af Engelske sprogpakker."
echo ""
sudo aptitude install -y language-pack-da-base language-support-da language-support-writing-da language-pack-gnome-da language-pack-gnome-da-base language-pack-da
sudo aptitude purge -y language-support-en language-support-writing-en language-pack-gnome-en language-pack-gnome-en-base language-pack-en-base thunderbird-locale-en-gb language-pack-en
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Grafik."
echo ""
sudo aptitude install -y gimp gimp-data-extras gimp-plugin-registry gimp-texturize gimp-resynthesizer inkscape freecad gpaint xpaint tuxpaint f-spot dia pdfedit
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Internet."
echo ""
sudo aptitude install -y deluge-torrent skype emesene xchat gmail-notify lernid dropbox chromium-browser
# ppa til Firefox - next
sudo apt-get update && sudo apt-get upgrade && sudo add-apt-repository ppa:mozillateam/firefox-next
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Kontor."
echo ""
sudo aptitude install -y libreoffice-base libreoffice-l10n-da libreoffice-l10n-en-gb
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Lyd og Video."
echo ""
sudo aptitude install -y vlc vlc-plugin-pulse mozilla-plugin-vlc non-free-codecs libdvdcss2 totem-plugins-extra sound-juicer soundconverter winff oggconvert audacity avidemux acidrip ogmrip k3b mencoder ffmpeg ffmpeg2theora dvdauthor dvdstyler gaupol gtk-recordmydesktop cheese pavucontrol asunder gnome-mplayer kino
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Læringsprogrammer."
echo ""
sudo aptitude install -y tuxtype tuxtype-data-nonfree tuxmath
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Programmering."
echo ""
sudo aptitude install -y bluefish
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Systemværktøjer."
echo ""
sudo aptitude install -y gmountiso clamav clamtk sysinfo gnome-schedule cryptkeeper gconf-editor bleachbit
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Tilbehør."
echo ""
sudo aptitude install -y shutter convertall parcellite virtualbox
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Videnskab."
echo ""
sudo aptitude install -y stellarium
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install Vedr. Administration."
echo ""
sudo aptitude install -y gparted gufw firestarter synaptic
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Install af andre programmer som ikke er direkte i Hovedmenuen."
echo ""
sudo aptitude install -y nautilus-image-converter bootchart bum gthumb powertop pysdm glipper cups-pdf xpdf msttcorefonts seahorse brother-lpr-drivers-extra brother-cups-wrapper-extra rar p7zip p7zip-full alien php5-cli pastebinit build-essential
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Installering af pakker til skrivebordmiljø og Gnome."
echo ""
sudo aptitude install -y gnome-panel gnome-tweak-tool compizconfig-settings-manager gnome-themes-extras gnome-raw-thumbnailer gnome-accessibility-themes-extras gnome-extra-icons community-themes myunity
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Install af evt eksisterende .deb-filer i hjemmemappen."
echo ""
cd ~/ && sudo dpkg -i *.deb
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Blokkering af Seneste Dokumenter under Gnome."
echo ""
sudo rm -rf ~/.local/share/.recently-used.xbel && mkdir ~/.local/share/.recently-used.xbel
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Fjern 60 sekunders forsinkelse ved nedlukning af Ubuntu."
echo ""
gconftool-2 -s '/apps/indicator-session/suppress_logout_restart_shutdown' --type bool true
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Få den gamle scrollbar tilbage."
echo ""
sudo aptitude remove -y overlay-scrollbar liboverlay-scrollbar3-0.2-0 liboverlay-scrollbar-0.2-0
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Få den gamle programmenulinje tilbage."
echo ""
sudo aptitude remove -y appmenu-gtk indicator-applet-appmenu indicator-appmenu
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Få kontrol over Ubuntus opstartsprogrammer igen."
echo ""
mkdir -p ~/.config/autostart
cd ~/.config/autostart
cp /etc/xdg/autostart/*.desktop .
sed -i "s/NoDisplay=true/NoDisplay=false/g" *.desktop
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""

echo "Sletning af unødvendige mapper og programmer."
echo ""
# sletning af mapper
sudo rm -rf  ~/Eksempler ~/Videoklip ~/Offentligt ~/Skabeloner /usr/share/sounds/ubuntu
# sletning af programmer
sudo aptitude purge -y totem-mozilla gnome-orca rhythmbox rhythmbox-dbg ekiga evolution-common indicator-messages
echo ""
echo "Udført"
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Oprettelse af mapper og flytning af filer."
echo ""
mkdir ~/PDF
rm -rf ~/.mozilla && mv ~/skjulte_mapper/.mozilla ~
mv ~/skjulte_mapper/.notifier.conf ~
mv ~/skjulte_mapper/.Skype ~
mv ~/skjulte_mapper/.xchat2 ~
rm -rf ~/skjulte_mapper
mv ~/vlc ~/.config
mv ~/deluge ~/.config
sudo mv ~/ubuntu /usr/share/sounds
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Aktivering af scripts."
echo ""
sudo cp ~/opryd.sh ~/.gnome2/nautilus-scripts/opryd.sh && chmod +x ~/.gnome2/nautilus-scripts/opryd.sh
sudo mv ~/opryd.sh /usr/local/bin && sudo chmod +x /usr/local/bin/opryd.sh
sudo mv ~/avi2iso.sh /usr/local/bin && sudo chmod +x /usr/local/bin/avi2iso.sh
sudo mv ~/panik.sh /usr/local/bin && sudo chmod +x /usr/local/bin/panik.sh
mv ~/resize_400x300 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_400x300
mv ~/resize_640x480 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_640x480
mv ~/resize_1024x768 ~/.gnome2/nautilus-scripts && chmod +x ~/.gnome2/nautilus-scripts/resize_1024x768
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Ændring af interval mellem harddisk tjek under opstart af ubuntu."
echo "Bemærk at der vil komme fejlmeldinger, dette sker der intet ved !"
echo ""
sudo tune2fs -c5000 -i12m /dev/sda1
sudo tune2fs -c5000 -i12m /dev/sda2
sudo tune2fs -c5000 -i12m /dev/sda3
sudo tune2fs -c5000 -i12m /dev/sda4
sudo tune2fs -c5000 -i12m /dev/sda5
sudo tune2fs -c5000 -i12m /dev/sda6
sudo tune2fs -c5000 -i12m /dev/sda7
sudo tune2fs -c5000 -i12m /dev/sda8
sudo tune2fs -c5000 -i12m /dev/sda9
sudo tune2fs -c5000 -i12m /dev/sda10
sudo tune2fs -c5000 -i12m /dev/sda
sudo tune2fs -c5000 -i12m /dev/sdb
sudo tune2fs -c5000 -i12m /dev/sdc
sudo tune2fs -c5000 -i12m /dev/sdd
sudo tune2fs -c5000 -i12m /dev/sde
sudo tune2fs -c5000 -i12m /dev/sdf
sudo tune2fs -c5000 -i12m /dev/sdg
sudo tune2fs -c5000 -i12m /dev/sdh
sudo tune2fs -c5000 -i12m /dev/sdi
sudo tune2fs -c5000 -i12m /dev/sdj
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Afsluttende opdatering af systempakkerne."
echo ""
sudo dpkg --configure -a
sudo updatedb 
sudo aptitude update -y 
sudo aptitude safe-upgrade -y
echo ""
echo "Udført."
echo ""
echo ""
echo ""
echo ""
echo ""

echo "Oprydning af systemet."
echo ""
sudo rm -rf ~/var/cache/apt/archives/*.deb
sudo apt-get autoremove -y --force-yes
sudo aptitude clean -y
sudo aptitude autoclean -y
echo ""
echo "Udført."
echo ""
echo ""
echo ""

echo "Kørslen af scriptet er nu gennemført."
echo ""
echo "Denne computer lukker ned om 5 minutter !"
echo ""
sudo sleep 300
sudo poweroff
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Vis dine scripts

Indlæg af lath »

TitanusEramius skrev:Jeg har så redigeret sudoer-listen så der ikke skal tastes kode ved "mount" og "umount".


Hej Nicky

Den findes allerede og den hedder pmount, og skal bare installeres:

- og nu kan du så rette din sudoers til det den var før, så dit system er lige så sikkert som det var før

FYI
Jeg har for nogen tid siden lavet lidt C kode der starter setuid root, og bagefter starter et andet program, dvs du kan starte et program uden at være root, selv om programmet altid kører som om det var root (det er det 'setuid root' betyder).
Programmet du starter bestemmes af indholdet i en tekststreng i programmets C kildekode - og det skulle også være her i sandkassen, det var noget med et diskette drev som skulle mountes uden at operatøren af en værkstedsmaskine (CNC?) behøvede at være administrator.
Jeg har i indlæget skrevet hvordan du skal oversætte det til et binært program med en C compiler.

/Lars

Edit.
Har først lige nu opdaget at det her ikke var en helt ny tråd - hehe :)
håber at informationerne er nyttige alligevel
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Vis dine scripts

Indlæg af NickyThomassen »

Jeg læser ihvertfald det hele, men det sene svar skyldes at jeg har gået og spekuleret over
lath skrev:FYI
Jeg har for nogen tid siden lavet lidt C kode der starter setuid root, og bagefter starter et andet program, dvs du kan starte et program uden at være root ...

og hvad det egentlig betyder. Jeg siger ikke at det er let at strikke sammen i C, men hvis man bare kan lave det, hvorfor har vi så ikke set det blive misbrugt? Umiddelbart virker det på mig som den letteste måde at kompromittere et Linux-system på, men jeg misser måske noget?

En ting jeg lage mærke til i den forbindelse, er at GNOME2 må bruge en tilsvarende funktion. Hvis man ikke automatisk beder X om at starte GNOME2 i Debian, så skal det startes med 'startx', efter at man er logget på som almindelig bruger (og kommandoen kræver ikke sudo). Når GNOME2 så er startet, så kan man trykke "System --> Sluk..." og slukke computeren på trods af, at de eneste kommandoer der kan lukke systemet (shutdown, halt og init (ved at skifte run-level)) kræver root.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Vis dine scripts

Indlæg af lath »

TitanusEramius skrev:Jeg læser ihvertfald det hele, men det sene svar skyldes at jeg har gået og spekuleret over
lath skrev:FYI
Jeg har for nogen tid siden lavet lidt C kode der starter setuid root, og bagefter starter et andet program, dvs du kan starte et program uden at være root ...

og hvad det egentlig betyder.

Et set uid root program starter som om det var startet af root brugeren, altså superbrugeren, uanset hvilken bruger der rent faktisk startede programmet.

Prøv at køre den her kommando i en terminal:

Kode: Vælg alt

ls -l /usr/bin/sudo

og minsandten om sudo kommandoen ikke er et set uid root program. Det er iøvrigt også tilfældet for gksudo.

Når du tænker over det så giver det også god mening, fordi at en almindelig bruger skal kunne starte sudo for at starte et program der kræver superbrugerrettigheder. Det sudo og gksudo gør er så at execve (køre) det program du vil starte med superbrugerrettigheder, hvis adgangskoden er korrekt. Årsagen til at det lykkedes for sudo og gksudo at køre et program med superbrugerrettigheder er kun fordi det selv har superbrugerrettigheder. (programmer arver sit forældreprograms rettigheder), medmindre forældre-programmet, eller programmet startet af dens forældrer får tildelt ekstra rettigheder såsom set uid root, eller dropper ekstra rettigheder.

TitanusEramius skrev:Jeg siger ikke at det er let at strikke sammen i C, men hvis man bare kan lave det, hvorfor har vi så ikke set det blive misbrugt? Umiddelbart virker det på mig som den letteste måde at kompromittere et Linux-system på, men jeg misser måske noget?

af den grund at:
  • en almindelig bruger der oversætter kildekode til et program kun er den brugerens ejendom
  • programmet er ikke superbrugerens program, det kræver at chown og chgrp kører i superbrugertilstand for at de kan ændre det til superbrugerens ejendom
  • For at sætte set uid root bitten til 1 (aktiveret) for et program skal chmod programmet køre med superbrugerrettigheder
  • execute og set uid root bits sættes til 0, hvis programmet kopieres og/eller flyttes, og så fortolker kernen det sådan at programfilen ikke længere er et program, men kun en almindelig datafil

Man skal med andre narre en superbruger til aktivt at give tilladelser til programmet, som de ikke skal have.
Det er det der kaldes Social Engineering.

TitanusEramius skrev:En ting jeg lage mærke til i den forbindelse, er at GNOME2 må bruge en tilsvarende funktion. Hvis man ikke automatisk beder X om at starte GNOME2 i Debian, så skal det startes med 'startx', efter at man er logget på som almindelig bruger (og kommandoen kræver ikke sudo). Når GNOME2 så er startet, så kan man trykke "System --> Sluk..." og slukke computeren på trods af, at de eneste kommandoer der kan lukke systemet (shutdown, halt og init (ved at skifte run-level)) kræver root.

  • startx scriptet starter helt sikkert et program der kører setuid root, som når det har sat X op opgiver sine rettigheder og bliver den bruger der startede programmet igen senere. (/usr/bin/X)
  • luk system etc, starter helt sikker også et set uid root porgram, og det virker fint

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags