Booting a computer to run Linux is quite a complex procedure. Happily it's understandable, so correctable when things break.
The bootloader could point to a kernel that's not there, or adds a boot parameter that incorrect. A.k.a. a typo. Review your Grub or Lilo configuration and try again. Grub is a lot easier to debug, is has a minimalistic shell included.
You could have built a kernel that's not suitable for your computer. I hope you have left and old kernel on your system, use Grub to select that kernel and boot it.
Init is quite simple, it reads /etc/inittab and starts RC. When you have "played around with" /etc/inittab and made a typo somewhere, you might need to boot of a CD to fix the typo.
This is the part where many "errors" can occur, like: "Apache is not starting". Review the startup script in /etc/init.d, review that there a script and it has no errors in it. Also read the article about controlling daemons.
These modern day computers are so fast, that "cat"-ting a file scrolls by at an unreadable speed!
Here is a small shell script to slowly cat files or standard input:
#!/bin/sh
# A program to slowly cat file or standard input.
if [ "$1" ] ; then
file="$1"
else
file="-"
fi
cat "$file" | while read line ; do
echo "$line"
sleep 1
doneAnd here is how to use it:
$ scat mylongfile
line 1
line 2
line 3
$ cat mylongfile | scat
line 1
line 2
line 3Amazing what computers can do!
I tried to explain what "chrooting" is to a group of starting Linux gurus. It seemed rather difficult to explain. So, maybe an illustrated article will explain what chroot is.
From chroot's manpage:
chroot - run command or interactive shell with special root directoryAnd in my own words:
chroot starts a process in a directory which looks like the root directory to that process.Here is an example of how chroot can be used to reset a root password on an existing system. (Even works when the bootloader (grub) has a password set.)
mkdir /mnt/a && mount /dev/sda5 /mnt/a && mount /dev/sda3 /mnt/a/usrchroot /mnt/a /bin/shHere is a screenshot to illustrate the procedure: (click to enlarge)
If you are a normal (non-root) user on Fedora Core 9, you are able to reboot a machine without the usage of a password. Reboot initiates all kind of scripts that should normally be run as root, while "reboot" does not have a set user id bit set:
$ which reboot
/usr/bin/reboot
$ ls -l /usr/bin/reboot
lrwxrwxrwx 1 root root 13 2008-11-11 22:18 /usr/bin/reboot -> consolehelper
$ ls -l /usr/bin/consolehelper
-rwxr-xr-x 1 root root 3904 2008-08-03 09:10 /usr/bin/consolehelper
$ file /usr/bin/consolehelper
/usr/bin/consolehelper: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, strippedFrom the man page of consolehelper I find:
consolehelper is a tool that makes it easy for console users to run system programs, doing authentication via PAM (which can be set up to trust all console users or to ask for a password at the system administrator’s discretion).And in /etc/pam.d/reboot there is:
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_console.so
#auth include system-auth
account required pam_permit.soAnd from the manpage of pam_console.so:
pam_console.so is designed to give users at the physical console (virtual terminals and local xdm-managed X sessions by default, but that is configurable) capabilities that they would not otherwise have, and to take those capabilities away when the are no longer logged in at the console.So; reboot is permitted by non-root users when they are logged into the console. To test this, login to a machine, try "reboot":
reboot: Need to be rootThe "set user id"-bit (or setuid-bit) is a potentially dangerous permission type. Wrong usage of setuid can result in unauthorized access to your system.
When a setuid bit is set to an executable, the script will be executed as if it was executed by the owner of the file. So for example this script has a setuid bit set:
$ ls -l myscript.sh
-rwsr-xr-x 1 root wheel 200 Nov 5 10:47 myscript.shImagine that this script contains the command "reboot"; in that case anybody would be able to reboot the machine.
Very easy:
# chmod 4755 myscript.sh# chmod u+s myscript.shHere is a small demonstration, first showing that a user can't write to /etc/passwd.
$ echo "foo bar" >> /etc/passwd
-bash: /etc/passwd: Permission denied# chmod u+s /bin/echo$ echo "foo bar" >> /etc/passwd
$See the dangerous situation we have just created? Undo it by executing # chmod u-s /bin/echo.
# find / -perm -4000Most people on the windows platform know Cygwin. ("Cygwin is a Linux-like environment for Windows.") As I never use Windows, I feared programs like these, but it turns out cygwin is quite usable. It's even possible to run shell scripts that normally run on my Mac OS X machine.
Download the installer, select all packages you want. (Don't worry, all "generic" tools (ls, cd, grep, awk, ps, bash) are installed by default.) I added "openssh", "netcat", "xterm" and some others. Dependencies will be resolved automatically. The installer downloads everything. You can run the installer again to add extra packages.
You end up with a "Cygwin" icon. Double click it to start your terminal. It's not really a terminal, but looks quite like it.
Some things are strange or missing, like "top" that's missing, permissions (ls -al) look strange, just as the directory structure. But; take some distance from these details and conclude that you have "bash" running on your windows machine!
Have you ever used the command comm? It's a Linux command used to compare two (sorted) files. Comm produces three columns of output:
1: Lines only in file 1.
2: Lines only in file 2.
3: Lines in bothe files.
You can surpress columns by using options like "-1", "-2", "-12" and so on.
Imagine file 1 contains:
$ cat file1
A
B
CAnd file 2 contains:
$ cat file2
A
C
DThan these options (left) would produce this output (right):
| Option | output | explanation |
| -1 | ACD | Show lines only in file 2 and in both files |
| -2 | ABC | Show lines only in file 1 and in both files |
| -3 | BD | Show lines in file 1 and in file 2, but not in both files |
| -12 | AC | Show lines in both files |
| -13 | D | Show lines only in file 2 |
| -23 | B | Show lines only in file 1 |
| -123 | (no output) | Surppress all columns |
When you are new to Linux or don't use Linux on a daily basis, finding out how file permissions work can be challenging. Here is an as short as possible guide, which can be applied on UNIX, Linux, Mac OS X, FreeBSD, OpenBSD, and other UNIX-like operating systems. We'll call those systems *nix in this guide.
*nix splits permissions in thee groups for files and directories:
Besides ownership of files and directories, certain permissions can be given as well:
These permissions are set using chmod. (Change Mode.) Ownsership of file is altered with chown. (Change Ownser)
Chmod wants to know what permissions you give to a file or directory. This value is built up on four fields.
The zeroth field represents the special bits. (Set User id, Set Group id and Stikcy bit, see below.) Most users will not set this bit, which makes it "0" by default, which means: "No special permissions set."
The first field represents the permissions you give to the Owner.
The second field represents the permissions you give to the Group.
The third fiels represents the permissions you give to the World.
Chmod uses numerical arguments to set permissions, to illustrate it a bit: chmod 750 myscript.sh would change permissions for the file myscript.sh.
Read permissions equals a value of 4.
Write permissios equals a value of 2.
Execute permissions equals a value of 1.
Add the numbers representing the permissions you'd like to give to a Owner, Group or World.
So here is a list of common permissions:
Some "weird" permissions, mostly because they are broken or very rare:
There are some special permissions you can give, these permissions go into the zeroth field. You'd use chmod like this to set no special permissions: chmod 0750 myscript.sh.
So 4750 would mean the file may be executed by the owner and the group, and will be executed as the owner.
Imagine a script would have 4775 permissions and would be owned by root:users; a user could edit the script, and the world could execute it with roots permission!
Just to remind you once more; Set Group or User id bits are dangerous, know what you are doing when using them!
When you would like to use TFTP on your Mac OS X machine, take these simple steps:
-l option with <string>-l</string>, but that's optional.launchdctl load /System/Library/LaunchDaemons/tftp.plist will do that.tail -f /var/log/system.logNow place the required files in /private/tftpboot and you are done!
Have you ever used the "Location" facility in Mac OS X? It changes network settings for you when you work from different locations, like "work", "home", "mobile" or any other setting. As far as I can tell it's designed to change:
What's missing here is SSH settings. You configure your ssh-client in ~/.ssh/config manually. In my case I can login a machine from home directly, but when I am somewhere else, I need to use a step-stone.
That would mean I'd have to change ~/.ssh/config every time I am on a different location! Here is a solution to the problem, inspired by an article about Location based scripts.
location=$(scselect 2>&1|grep ' \* ' | awk '{print $NF}' | sed 's/(//g;s/)//g')
if [ -f ~/.ssh/config.$location ] ; then
rm ~/.ssh/config
ln -s ~/.ssh/config.$location ~/.ssh/config
fichmod 750 ~/.locationchanger to do that.<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>tech.inhelsinki.nl.locationchanger</string>
<key>ProgramArguments</key>
<array>
<string>/Users/robertdb/.locationchanger</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration</string>
</array>
</dict>
</plist> launchctl load ~/Library/LaunchAgents/LocationChanger.plist to do this, or reboot.From now on the script ~/.locationchanger will be started when changing Location.
Some items that might be changed when you switch locations are using a stepstone to ssh to machines or using corkscrew to puch through http proxies.
This tool uses scselect, an apple tool that confiures or prints locations.
SCSELECT(8) BSD System Manager's Manual SCSELECT(8)
NAME
scselect -- Select system configuration "location"
SYNOPSIS
scselect [-n] [new-location-name]
DESCRIPTION
scselect provides access to the system configuration sets, commonly
referred to as "locations". When invoked with no arguments, scselect
displays the names and associated identifiers for each defined "location"
and indicates which is currently active. scselect also allows the user
to select or change the active "location" by specifying its name or iden-
tifier. Changing the "location" causes an immediate system re-configura-
tion, unless the -n option is supplied.
At present, the majority of preferences associated with a "location"
relate to the system's network configuration.
The command line options are as follows:
-n Delay changing the system's "location" until the next system boot (or
the next time that the system configuration preferences are changed).
new-location-name
If not specified, a list of the available "location" names and asso-
ciated identifiers will be reported on standard output. If speci-
fied, this argument is matched with the "location" names and identi-
fiers and the matching set is activated.
SEE ALSO
configd(8)
HISTORY
The scselect command appeared in Mac OS X Public Beta.
Mac OS X November 4, 2003 Mac OS X| About | Consultancy | Articles | Contact |
|
|
|
|
|
| References | Red Hat Certified Architect | By Robert de Bock | Robert de Bock |
| Curriculum Vitae | By Fred Clausen | +31 6 14 39 58 72 | |
| By Nelson Manning | robert@meinit.nl |