Detta är den första av många FreeBSD artiklar som planeras, jag tänkte göra en sorts serie där jag delar med mig av mina erfarenheter med mitt favoritsystem. Vi börjar lite lugnt och blir mer och mer avancerade.
Detta är som ni kanske gissat för folk som installerat FreeBSD och ska komma igång med det. Jag kanske skriver något om att installera FreeBSD någon gång men jag vill helst att ni ska komma igång snabbt så vi kan börja med hacking artiklarna. När ni bootar erat första FreeBSD system så använder ni antagligen csh skalet som också heter "c shell". Skalet som används på moderna FreeBSD system heter egentligen tcsh och är en förbättrad version av det gamla csh men det har döpts till csh i systemet för att man ska känna igen sig. I alla skal finns det fördefinerade variabler och även i eran användarmiljö finns dessa fördefinerade variabler som just kallas miljövariabler eftersom dom definerar hur eran miljö som ni arbetar i är konfigurerad.
En variabel kan vara vilka alfabetiska och/eller numeriska tecken som helst mellan a och z, de kan också innehålla bindestreck eller understreck och de börjar med ett dollartecken så att man känner igen vad som är variabler. En vanlig variabel är $SHELL som innehåller sökvägen till erat nuvarande skal, det är egentligen upp till de som skrivit skalet om dom vill ha med $SHELL variabeln eftersom alla dessa variabler är beroende av själva skalet men de flesta skal som jag känner till har några grund variabler definerade. Bland dessa kan man hitta bland annat $USER och $PATH, $USER visar helt enkelt vilken användare ni är inloggad i skalet som och $PATH visar vilka sökvägar som söks igenom när ni försöker köra igång program på kommandoraden.
Vi känner ju alla till cd kommandot men om man inte sitter och läser manualer på sin fritid som jag så kanske man inte vet att man kommer direkt till sin hemmakatalog genom att bara skriva cd och om du skriver "cd -" så kan du växla mellan två kataloger istället för att skriva hela deras långa sökväg. På tal om långa sökvägar så kan det ju vara väldigt jobbigt att navigera bland långa, krångliga och ibland svårstavade kataloger och filer så därför har csh en inbyggd funktion som hjälper dig stava och skriva klart hela filnamn. Om ni öppnar .cshrc som ligger i eran hemmakatalog så ser ni filen som styr hur erat skal ska uppföra sig, här kan ni göra personliga inställningar för just erat skal som gäller varje gång ni startar skalet. Ni ser att filen redan har lite innehåll och allt ni behöver lägga till är följande rader.
set autolist set filec
Med dessa två rader i eran .cshrc fil kan vi testa våra nya funktioner. Skriv nu början på ett kommando som tex vmstat, skriver ni bara v och trycker tab nu så kommer ni se en lista på vad som finns i $PATH katalogerna och börjar på v, det är ju lite för mycket så vi samlar kraft och skriver vm istället, när vi trycker tab igen så avslutas kommandot åt oss. Samma sak som med kommandon gäller när ni ska in i kataloger, om ni ska öppna en fil eller bara in i en annan katalog och ni redan är i en tom katalog så räcker det att bara trycka tab igen så avslutas allt. Som ett exempel så skriver ni "vi /usr/src/sys/i386/conf" och trycker tab, om ni bara har en fil i conf mappen så kommer allt automatiskt avslutas och ni kan bara trycka enter för att öppna den filen men om ni har mer än en fil så kommer ni se en lista på alla filer utan att använda ls kommandot.
Om ni installerar något nytt och märker att ni inte kan använda programmet ännu så beror det på att csh inte vet var det nya programmet finns ännu, eller att det finns alls. För detta har ni ett kommando som heter rehash och det räknar om alla $PATH sökvägar så att allt nytt kommer med, rehash tar ingen tid alls att köra. Det vi har gått igenom hittills räcker inte för att jag ska kunna trivas lika bra på kommandoraden i FreeBSD som Windows XPs peka & klicka miljö så vi fortsätter med något som i UNIX kallas "history".
Inte alla skal har stöd för history men om inte tcsh hade det så hade det nog inte varit standard skalet i FreeBSD. History eller kommandohistorian sparas i eran hemmakatalog i en fil som heter .history. Tänk på att alla kommandon ni skriver sparas här i ren text så en tumregel är att ALDRIG skriva lösenord som argument till kommandon. Det finns ett C bibliotek som gör att text som skrivs in inte studsar tillbaka till terminalen och detta bibliotek används när man ska skriva in lösenord så att inget syns.
History funktionerna är många och den enklaste är att bara trycka på uppåtpilen eller neråtpilen på tangentbordet så bläddrar man igenom sin history fil. Ni kan också använda kommandot histpry för att lista allt i .history filen och i vissa system så finns ett alias till history som bara är ett enkelt h, detta visar bara de senaste 25 kommandona med hjälp av det första argumentet för history programmet som är antalet kommandon som ska hämtas ur .history filen från slutet. Så "history 25" skulle vara samma sak som att skriva h i vissa system.
Det finns ännu ett sätt att hämta information ur .history filen och det är med speciella skal operatorer som bang och bang bang, jo jag vet ni fattar inget men på UNIX språk så är en bang ett utropstecken, ! är en bang och !! är bang bang. Skriver ni !! i erat skal så upprepas det senaste kommandot i .history. Vi skriver ett långt kommando som tex "vi /usr/src/sys/i386/conf/GENERIC" och efter att vi redigerat den filen vill vi kopiera den för att spara den nånstans, då skriver vi bara "cp !$ ~/GENERIC.bak" så har vi sparat den i våran hemmakatalog med namnet GENERIC.bak. Vi kan också skriva !3 för att upprepa nummer 3 i våran history lista.
Även om man har en grafisk x server så kommer man skriva många kommandon i BSD och personligen använder jag nästan bara x servern för att kunna ha massa terminaler. Eftersom man skriver så mycket i UNIX så finns det flera sätt att underlätta skrivandet till den nivå att man kan mäta sig med vilken windows användare som helst i snabbhet när man väl har lärt sig lite om det. I de flesta skal kan man använda ctrl+u för att rensa hela raden, ctrl+w raderar bara ett argument eller om du skriver en sökväg kan det radera bara en bit av sökvägen fram till första / beroende på vilken terminal typ du använder. I vissa terminaler raderar ctrl+w alltid till första mellanrummet eller om man har otur hela raden.
Med ctrl+y kan du få tillbaka något som du höll på att skriva, tex om du börjar skriva ett kommando och kommer på att du måste göra något annat först så kan du trycka ctrl+u, köra ett annat kommando och sen ctrl+y för att få tillbaka det första du höll på att skriva. Om ni får ett meddelande i eran terminal medan ni skriver ett långt kommando så är det bara att trycka ctrl+r så är ni tillbaka där ni var när meddelandet störde er.
På tal om konsollmeddelanden så jobbar man ofta med ssh om man är som jag och då syns inte konsollmeddelanden, om man inte vill hacka konsollen så kan man bara sätta in ett enkelt kommando i sin .cshrc för att ta del av viktiga meddelanden. Kör ni "tail -f /var/log/messages&" så ser ni allt som hamnar i messages loggen direkt i eran terminal. Sen finns det ett annat sätt också där vi manipulerar syslog.conf, om ni öppnar den filen ser ni ungefär något sånt här.
*.err;kern.debug;auth.notice;mail.crit /dev/console
Den raden talar om för syslogd exakt vad den ska logga till console enheten så här kan du minska felen som skickas runt om du vet att vissa av dom är onödiga för din miljö.
# uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log
Dessa två rader har till och med en kommentar som säger precis hur man kan rikta om alla meddelanden till en fil men kommentaren säger inte att man istället för en sökväg till en fil där kan sätta ett eller flera användarnamn separerade av kommatecken. Så om du ändrar raden så den ser ut så här.
console.info root,swehack
Nu kan du logga in med användaren swehack och få alla konsollmeddelanden även om du loggar in över ssh, detta fortsätter fungera om du använder su för att bli root eller någon annan användare så länge du loggade in med swehack över ssh(ingen loggar ju in med root över ssh för det ANTAR jag att alla har stängt av!). När ni gör ändringar för syslogd så måste den processen startas om och då skickar vi signal 1 till den, "killall -1 syslogd" så läser den in syslog.conf igen.
Man kan också ange att vissa tangenter ska vara genvägar till olika saker. Ett program som bland annat kan göra detta i terminalen är kbdcontrol, skriver ni kbdcontrol -f siffra "kommando" så binder ni en viss tangent till att skriva ut kommandot på kommandoraden när tangenten trycks ner, kommandot körs dock inte utan skrivs bara ut så man måste fortfarande bekräfta genom att trycka enter och det är ju bra i vissa fall.
För er med winddows tangenter på era tangentbord så har dom också eina egna siffror så att man kan tex starta x servern med windows tangenten eller något liknande. En keybinding kan endast vara 16 tecken lång med argument och allt. Om ni fastnar och måste ta bort en keybinding kan ni alltid göra det med -F argumentet som återställer alla till sitt ursprung.
Tangenters sifferkoder
Här följer en lista på alla siffror och vilken tangent dom står för. De tre sista finns inte med på alla tangentbord.
Siffra Tangent ========================================== 1-12 F1-F12 13-24 Shift+F1-Shift+F12 25-36 Ctrl+F1-Ctrl+F12 37-48 Shift+Ctrl+F1-Shift+Ctrl+F12 49 Home 50 Uppåt pil 51 Page Up 52 Num Lock (Avstängd) 53 Vänster pil 54 Numpad 5 (Med NumLock Av) 55 Höger pil 56 Numpad + (Med NumLock Av) 57 End 58 Pil ner 59 Page Down 60 Insert 61 Delete 62 Vänstra Windows Tangenten 63 Högra Windows Tangenten 64 Meny Tangent
Här har ni också min egna .cshrc fil för tillfället som exempel, den är inte för avancerad utan har endast sånt jag behöver och den ser till och med ut som standard filen fortfarande men någon av er kanske vill se den.
% more ~/.cshrc
alias h history 25
alias j jobs -l
alias la ls -a
alias lf ls -FA
alias ll ls -lA
alias FG ls -FG
alias foad shutdown -p now
alias ls ls -aFG
# A righteous umask
umask 77
set autolist
set filec
#set prompt='%B[%b%c%B]%% '
set prompt='%c %B>:%b '
setenv TERM xterm
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)
setenv EDITOR vim
setenv PAGER more
setenv BLOCKSIZE K
if ($?prompt) then
# An interactive shell -- set some stuff up
set filec
set history = 100
set savehist = 100
set mail = (/var/mail/$USER)
if ( $?tcsh ) then
bindkey "^W" backward-delete-word
bindkey -k up history-search-backward
bindkey -k down history-search-forward
endif
endif
rehash
set nobeep
setenv LC_CTYPE sv_SE.ISO8859-15
setenv LANG sv_SE.ISO8859-15
# for vim in rxvt terminal
stty erase "^?"Nu tänkte jag faktiskt skriva mer om miljön i FreeBSD och det är fullt möjligt att denna artikeln uppdateras men eftersom denna serien med FreeBSD artiklar ska börja lågt och bli mer och mer avancerad så kan jag inte vänta tills vi börjar med riktiga hacks. Håll span på sidan så kommer snart mera ska ni få se!