2007-7-20 11:42
admin
Linux Commands
[quote]目錄 :
位置 項目名稱
[list=1][*]Basics
[*]Printing
[*]Text
[*]File systems
[*]Parted
[*]Logical volumes
[*]Disk drives
[*]Users
[*]Processes
[*]Searching
[*]Time
[*]Audio
[*]CDs
[*]Firewire
[*]Wine
[*]Security
[*]Services
[*]Kernel
[*]Patch
[*]RPM
[*]Perl
[*]Archives
[*]Keyboard
[*]X Windows
[*]SSH
[*]Images
[*]Programming
[*]Scanner
[*]Networking
[*]Firewall
[*]Email
[*]Spam
[*]Apache
[*]MySQL
[*]DNS
[*]Router
[*]Bash
[*]Devices
[*]DHCP
[*]Configuration
[*]Regular expressions
[*]Bugs
[/list][/quote]
[b]Basics[/b]
Files and directories
ls # Show current directory contents
ls -l $path # Show details about the file or directory
cd $dir # Change current directory to $dir
cd .. # Change current directory to parent directory
pwd # Show current directory path
mkdir $dir # Create a directory
cp $src(s) $dst # Copy $src file(s) to $dst
cp $src(s) $dir # Copy $src file(s) into the directory $dir
mv $src $dst # Move $src to $dst. Also used to rename files.
mv $src(s) $dir # Move a group of files into a directory
rm $file(s) # Remove (delete) files
rmdir $dir(s) # Delete empty directory(s)
rm -rf $dirs(s) # Delete files and/or directory(s) with their contents
> $file # Erase the contents of a file Copy a hierarchical directory
cp -a $sourceDir $destDirBackup a hierarchical directory
rsync -a --delete $sourceDir $destDir
1) Sym links, ownership, permissions and hidden files are copied.
2) A trailing "/" on either dir means "contents of".
3) Only the files that need to be copied get copied.
4) Files in the destDir but not in source are deleted. Change the owner of a file
chown owner file # owner only
chown owner.group file # owner & group
chown .group file # group only
chown owner. file # owner & group=ownerChange the permissions of a file
chmod changes fileName
The changes are a comma separated list of expressions.
Each expression is of the form:
users+permissions # Add permissions
users-permissions # Remove permissions
The users can be one or more of the letters:
u User (Oner of the file)
g Group (Group of users)
o Others (Everyone else)
OR:
a All (Same as "ugo", the default)
The permissions can be one or more of the letters:
r Read
w Write
x Execute
The user classes are specified in the order
UserGroupOther, with three bits for each to
enable or disable ReadWriteExecute.
Example:
chmod u+rwx,g+rw,o-rwx aFile
Numerical equivalent:
chmod 760 aFileShow disk usage of current dir or selected dir
du -s <dir>Write to stdout
echo anythingWrite to a file
echo anything > <path> Append to a file
echo anything >> <path> Update the modified time for a file
touch <path> Quickly create an empty file
> <path> Show differences between files
diff -r leftDir rightDir Show files that differ without details
diff -r -q leftDir rightDir Trace execution of a shell script
sh -x <fileName> Monitor additions to a log file
tail -f <fileName> Make a symbolic link
ln -s <path> <name> List files in color
ls --color=tty
(Alias this to ls) List a single column of names only
ls -1 List directories only
find -type d -maxdepth 1
(Alias this to lsd) List files in order of modification time
ls -lrt List all open files and sockets
lsof Run a shell script so it changes the environment
source .bash_profile (or whatever script you changed) Run a command relative to another root file system
chroot newroot command Execute a shell script and echo the commands for debugging
sh -x yourScript
2007-7-20 11:48
admin
Printing
Print a file on the default printer
lpr myfile Print a file on a selected printer
lpr -P printer myfile Show a list of available printers
lpstat -p Show the default printer
lpstat -d Set the default printer for the user
lpoptions -d LaserJet Set the default printer for everyone
lpadmin -d LaserJet Show what's on the print queue
lpq Remove a job from the print queue
lprm nn Remove all jobs queued by the user
lprm - Control the printers (has help for commands)
lpc Web interface for CUPS
http://localhost:631/ Configure a remote Windows printer
Determine the remote printer name:
smbclient -L hostname -U username
(In this case, the printer was called "Deskjet")
1) Device: Windows Printer via Samba
2) URI: smb//administrator:password@sparksvaio/Deskjet
3) Driver: HP New Deskjet Series Cups v1.1 (en) Configure a local printer-port printer
Determine the remote printer name:
smbclient -L hostname -U username
(In this case, the printer was called "Deskjet")
1) Device: Parallel Port #1 (Hewlett-Packard HP LaserJet 4000 Series)
2) Driver: HP LaserJet Series CUPS v1.1 (en) Configure printers on a Linksys print server
1) Select LPD/LPR Protocol.
2) Device URIs for each port:
lpd://Sc0405b5/L1
lpd://Sc0405b5/L2
3) Select the drivers
HP New Deskjet Series Cups v1.1 (en)
HP LaserJet 4000 Series PS (en) CUPS directory for manufacturer's ppd files
/usr/share/cups/model CUPS ppd files added by me
hp4000.ppd.gz
hp970Cse.ppd
These came from the sourceforge project sponsored by HP.
The hp970Cse.pdd requires foomatic which requires a TON of
perl stuff. If you don't want all this, the cup built-in
"New Deskjet" works fine.
2007-7-20 11:48
admin
Text
Check spelling of a text file
ispell myFile.txt Check spelling of one word: script version
echo $1 | ispell -a | sed -n -e '/^\&/p' -e '/^\#/p'
Put this expression in a shell script on your PATH. Cut out part of lines cols n-m
cut -c n-m path Cut out part of lines n-eol
cut -c n- path
2007-7-20 11:49
admin
File systems
Format a floppy disk
fdformat /dev/fd0H1440
mkfs -t msdos /dev/fd0H1440 1440
When putting ext2 on a floppy, omit the su reserve:
mkfs -t ext2 -m 0 /dev/fd0H1440 1440
Some-but-not-all floppies can be enlarged:
fdformat /dev/fd0u1722 Mount filesystems
mount -t iso9660 -ro /dev/hdc /mnt/cdrom
mount -t vfat /dev/hda5 /mnt/dos
mount -t ext2 /dev/sda3 /mnt/jazz
mount -t ntfs /dev/hda1 /mnt/nt
mount -t smbfs //sparks750/c /mnt/sparks750
(See fstab below for more smbfs options)
mount -t hfs /dev/sda /mnt/jazz -o afpd -o uid=500
(Currently, the afpd option hangs up the Mac...)
mount -t nfs mac.sparks.com:/root /mnt/macroot
To support nfs mounts, remote system must have /etc/exports:
/root *.sparks.com(rw) Make and mount 1Meg file system inside a file
dd if=/dev/zero of=MyDiskImage.ext2 bs=1k count=1000
mkfs -t ext2 MyDiskImage.ext2
mkdir here
mount -t ext2 -o loop MyDiskImage.ext2 here Make and format a Macintosh filesystem inside a file
dd if=/dev/zero of=MacDiskImage.hfs bs=1k count=whatever
hformat -l "HD1" MacDiskImage.hfs Show free space on all drives
df Show details about a linux file system
tune2fs -l /dev/hdax Create an ext3 file system
mkfs -t ext2 -j /dev/hdax Convert ext2 to ext3
tune2fs -j /dev/hdax Resize a file system (offline)
Revert from ext3 to ext2 if necessary (see below)
I have heard that this step is unnecessary.
unmount /dev/hda1
e2fsck -f /dev/hda1
resize2fs /dev/hda1 newSizeInBlocks
mount /dev/hda1 /mnt/point
If newSize is not specified, the file system will grow to
fill the partition.
After shrinking a file system, you can shrink the partition to match.
After growing a partition, you can grow the file system to match. Revert an ext3 file system to ext2
umount /dev/hda1 # Unmount the partition
tune2fs -O ^has_journal /dev/hda1 # Turn off journaling
e2fsk -y /dev/hda1 # Check for errors
mount -t ext2 /dev/hda1 /mnt/point # Remount as ext2
cd /mnt/point # Go to root directory
rm -f .journal # Remove the journal
You must update entry in fstab if this is a permanent change.
Ext3 should be reverted to ext2 before resizing. Convert an ext2 file system to ext3
tune2fs -j /dev/hda1
Edit fstab to indicate ext3
If this is the root partition, you need to use an initrd to boot.
See redhat documentation for details. Create and use an encrypted dm_crypt volume
This is the new and prefered way to handle file system encryption.
See the next section on the older "cryptoloop" method.
You need a device to access a whole drive, a partition, a logical
volume or a loopback file. We will use "myDev" for this example.
A new filesystem will be created in this example.
Create a dm_crypt mapping to the device
cryptsetup create mymap mydev
You will be prompted for the passphrase.
The default cipher is AES 256.
Now you can create and mount any normal filesystem:
mkfs -t ext2 /dev/mapper/mymap
mount -t ext2 /dev/mymap /mnt/mymount
When you are finished using the volume:
umount /mnt/mymount
cryptsetup remove mymap
When mounting a previously-created dm_crypt volume:
cryptsetup create mymap mydev
mount /dev/mapper/mydev /mnt/mymount Create and use an encrypted cryptoloop volume
This is the older and depricated method for using an encrypted
loopback filesystem. It depends on patched versions of of losetup
that are not part of recent Linux distributions.
First make a big file of random stuff:
dd if=/dev/urandom of=myfile bs=1M count=50
Load the crypto module group and your selected cypher:
modprobe cryptoloop
modprobe cipher-twofish
Mount the file as an encrypted loopback device:
losetup -e twofish /dev/loop0 myfile
You will need to answer these questions:
Available keysizes (bits): 128 192 256
Keysize: 128
Password :
Now you can create and mount any normal filesystem:
mkfs -t ext2 /dev/loop0
mount -t ext2 /dev/loop0 /mnt/myMount
When you are finished using the volume:
umount /mnt/myMount
losetup -d /dev/loop0
To mount a previously-created cryptoloop volume:
mount -t ext2 -o loop,encryption=twofish myfile /mnt/myMount
2007-7-20 11:49
admin
Parted
Preparation
Run parted from a boot floppy if you need to resize root.
Unmount other partitions first.
First use df to see how much space is used if you intend
to shrink a working partition. Partition types (ptype)
primary, logical, extended File system types (ftype)
ext2, FAT, hfs, linux-swap, ntfs, reiserfs Flags
boot, root, swap, hidden, raid, lvm, lba Show the current layout
print Resize a partition
resize minor start end Create an unformatted partition
mkpart ptype start end Create a new primary ext2 partition
mkpartfs ptype ftype start end Remove a partition
rm pnumber Change the partition state flag
set pnumber flag state Perform a simple check
check pnumber Make a new partition table (Destroys the whole disk)
mklabel type Label types
msdos, bsd, mac, pc98, sun, loop
Note: You can match the decimal sizes of adjacent
partitions. Parted takes care of details.
2007-7-20 11:50
admin
Logical volumes
Terminology
Physical Volume - A whole disk or a partition on a disk.
Volume Group - A collection of physical volumes.
Logical volume - A "partition" on a Volume Group. Getting started
If LVM has never been used on a system, first run
vgscan to create the /dev directory and other structures.
Each partition must have a partition type of 0x8E. (Use fdisk)
(This does not apply if you are using a whole disk.) Define each physical volume
pvcreate /dev/hdb # A whole disk
pvcreate /dev/hda3 # A partition
An error may be reported if you try to create a physical
volume from a whole disk that had partitions defined.
To destroy the partition table for a whole disk:
dd if=/dev/zero of=/dev/hdb bs=1K count=1
blockdev --rereadpt /dev/hdb Create a volume group using several physical volumes
vgcreate myVG /dev/hdb /dev/hda3
Note: If you are using devfs, you must use the whole physical name
not just the symbolic link in /dev. For example:
/dev/ide/host0/bus0/target0/lun0/part1 Extend a volume group by adding another physical volume
vgextend /dev/myVG /dev/hda5 Reduce a volume group by removing a physical volume
vgreduce /dev/myVG /dev/hda3
This can be done live, but you have to make sure all
the extents in use on the physical volume are moved
to another volume. To do this before executing the
command shown above, you would use:
pvmove /dev/hda3 Create a logical volume
lvcreate --size 200M --name myVol myVG
You can now use this logical volume like a normal partition
mkfs -t ext2 /dev/myVG/myVol
mount -t ext2 /dev/myVG/myVol /mnt/myMP Extend a logical volume to a specific size
lvextend --size 12G /dev/myVG/myVol
Does NOT extend the size of the file system! Extend a logical volume by adding a specific size
lvextend --size +1G /dev/myVG/myVol
Does NOT extend the size of the file system! Extend the file system and logical volume at the same time
e2fsadm --size +2G /dev/myVG/myVol
Sadly, there is no e2fsadm for LVM version 2...Extend the file system and logical volume (the old way)
You have to unmount first
umount /mnt/myMP
Grow the volume
lvextend --size +40G /dev/myVG/myVol
Check the filesystem (It makes you do this before the resize)
e2fsck -f /dev/myFG/myVol
Resize the file system to take up all the available space
resize2fs /dev/myVG/myVol Reduce a file system and logical volume at the same time
e2fsadm --size -200M /dev/myVG/myVol Activate all volume groups at boot time
vgscan
vgchange --available y Remove a logical volume
umount /mnt/myMP
lvchange --available n /dev/myVG/myVol
lvremove /dev/myVG/myVol Remove a volume group
Make sure all the logical volumes are unmounted!
vgchange --available n /dev/myVG
vgremove /dev/myVG Snapshots
A snapshot lets you do a backup of the instantanious state of
a logical volume. You create a snapshot, back it up, and then
delete the snapshot. The state of the snapshot volume is frozen
while you're making the backup, while the original volume keeps
changing.
lvcreate --size 200M --snapshot --name snapVol /dev/myVG/myVol
mount -t ext2 /dev/myVG/snapVol /mnt/snap
rsync -a --delete /mnt/snap/ /mnt/backups/myVol
umount /mnt/snap
lvremove /dev/myVG/snapVol Diagnostics
pvscan # Display all physcial volumes
lvscan # Display all logical volumes
pvdisplay /dev/hda4 # Display the state of a physical volume
vgdisplay /dev/myVG # Display the state of a volume group
lvdisplay /dev/vg1/archVol # Display the state of a logical volume My server layout
vgscan
pvcreate /dev/hdb
vgcreate vg1 /dev/hdb
lvcreate --size 30G --name backVol vg1
lvcreate --size 40G --name archVol vg1
lvcreate --size 4G --name tempVol vg1
mkfs -t ext2 -j /dev/vg1/backVol
mkfs -t ext2 -j /dev/vg1/archVol
mkfs -t ext2 /dev/vg1/tempVol
pvcreate /dev/hda4
vgcreate vg2 /dev/hda4
lvcreate --size 5G --name homeVol vg2
lvcreate --size 9G --name wwwVol vg2
lvcreate --size 1G --name spoolVol vg2
lvcreate --size 3G --name tempVol vg2
mkfs -t ext2 -j /dev/vg2/homeVol
mkfs -t ext2 -j /dev/vg2/wwwVol
mkfs -t ext2 -j /dev/vg2/spoolVol
mkfs -t ext2 /dev/vg2/tempVol
2007-7-20 11:50
admin
Disk drives
Basic hdparm syntax
hdparm options /dev/hda Options
-c 1 I/O support mode 1 (32 bit)
-c 2 I/O support mode 2 (16 bit)
-c 3 I/O support mode 3 (32 bit & sync)
-m 16 Multi sector count 16 on
-A 1 Enable drive read-ahead
-a 8 Drive read-ahead count
-d 1 DMA On
-u 1 Enable interruptable driver (dangerous)
-X 66 Ultra DMA mode 2 (dangerous, unnecessary)
-X 34 Multiword DMA mode 2 (dangerout, unnecessary)
-S n Spindown time in 5sec tics (0 <= n <= 240)
-t Perform & display drive test results
-T Perform & display Linux disk cache test Example tuning for my computer
The big Maxtor on the HP has these settings.
I think the PIO mode works best.
hdparm -A 1 -a 8 -m 16 -d 1 -c 2 Boot time settings for hdparm
/etc/sysconfig/harddisks
2007-7-20 11:51
admin
Users
Prompt for new password
passwd Change your login shell program
chsh Shut down and reboot or halt
shutdown -r now
shutdown -h now Adding or removing users
useradd userName
userdel name
In Redhat Land, useradd also creates and adds the
new user to a new unique group with the same name.Adding or removing groups
groupadd name
groupdel name Changing passwords
passwd
passwd user Adding or removing users from a group
gpasswd -a user group
gpasswd -d user group Change all sorts of stuff at once
usermod loginName \
-g newLoginGroup
-G newGroup1,...,newGroupN
-l newLoginName
-d newHomeDirectory
-u newUID
Using -G, the user will be removed from any group not listed.
Using -l, the user still has their old home directory.
You can't change the login name of a user who is currently logged in.
See man page for more options. Log into a remote system with no password
rlogin remoteIP
The .rhosts file must be in the remote login directory.
It contains the ipNames of allowed users.
You can add a local username if not the same as remote.
The .rhosts file must have read privilages only for owner.
/etc/xinetd.d/rlogin must not be disabled.
If you want to rlogin from a root account
/etc/securetty must have an entry for "rlogin".
2007-7-20 11:51
admin
Processes
Show the current process list
ps ax Kill a process by name
killall name Kill a process by id number
kill pid Kill a process that is being difficult
kill -s 9 pid Run a command in the background
command & Put an active command into the background
First break with control Z, then
bg List all the jobs you have running
jobs Bring a job back to the forground
fg Stop a background job
kill Suspend a backgroud job
stop Fix terminal that has fonts garbled by a binary dump
Just type: <control>V <control>O
2007-7-20 11:51
admin
Searching
Find path to an executable file
which command Find and print file names
find adirectoryPath/ -name <pattern> Find and apply a command to each file found
find path/ -name <pattern> | xargs <command> Find and apply a command (old way)
find path -name <pattern> -exec <com> {} \; Find a pattern with recursive search and show file names
find path -name "<filePattern>" -exec grep -l <pattern> {} \; Find a pattern in any and all files with recursive search
find path | grep <pattern> Find and and confirm before doing a command
find path/ -name <pattern> -ok <com> {} \; Find a pattern in files
grep <pattern> <files...> Find a pattern in files with recursive search (new way)
grep -rl <pattern> <start directory>
2007-7-20 11:52
admin
Time
Update the clock from a time server (Three steps)
rdate -u -p -s ns.scruz.net # This gets the time and sets system time
hwclock --systohc # Write system time to cmos
hwclock --adjust # Apply a rate adjustment
# The startup scripts normally take care of this:
hwclock --hctosys <opt> # Read system time from cmos
The <opt> may be --localtime or --utc. For localtime, you
need to have an /etc/localtime file which can be a copy or
link to zoneinfo file. (These are in /usr/share/zoneinfo) Schedule a command for later execution
Specific time
at 10:25pm
Relative time
at now + 1 minute
at 4pm + 3 days
A prompt will appear for you to enter commands.
Finish with EOF (control D)
Show your pending jobs:
atq
Remove a job:
atrm <job number> Start a timed server as the master clock (put in rc.local)
timed -M -F localhost Start a timed client
timed Use cron for periodic script execution
Use a bash script in one of these directories:
cron.daily
cron.hourly
cron.monthly
cron.weekly Using 'at' from inside a bash script
at 3am <<-EOF
service tomcat restart
EOF
2007-7-20 11:52
admin
Audio
Play samples from a file
play test.wav Use 'play' on systems with artsd (such as kde)
On these systems, /dev/dsp is always tied up by artsd.
Use the artsdsp command to run any program that would
normally access /dev/dsp directly:
artsdsp play test.wav Record samples to a wav file
Record a "normal" stereo wav file:
rec -c 2 -f U -r 44100 -s w -v 8.0 test.wav
Options:
-c 2 Two channels (stereo)
-r 44100 Sample rate
-f Sample encoding:
s Signed linear (2's compliment)
u Unsigned linear
U U-law (logarithmic) U.S. standard
A A-law (logarithmic) EU. standard
a ADPCM (Adaptive Differential Pulse-Code Modulation)
i IMA_ADPCM
g GSM
-s Sample size:
b 8 bit bytes
w 16 bit words
l 32 bit long words
f 32 bit floats
d 64 bit floats
D 80 bit IEEE floats
-t File format:
au Sun
cdr CD track
gsm GSM 06.10 Lossy Speech Compression
wav Windows RIFF (Header contains all params)
-v Set the volume
1.0 No change
2.0 Linear increase by 2.0
0.5 Linear decrease by 2.0
8.0 About right to balance with other .wavs
The file format can be specified by giving the file
a matching extension.
ADPCM, IMA_ADPCM & GSM are intended for speech compression.
U-law would be appropriate for music. Play sounds concurrently
esdplay
(Some people make this an alias for 'play') Reroute microphone through esd
esdrec | esdcat Play an mp3 file
mpg123 yourfile.mp3 Convert an mp3 file to a wav
mpg123 -s yourfile.mpg > yourfile.raw
The above command will display the bit rate and the sample rate.
The output is 16 bit, signed pcm, little endian. No header.
sox -c 2 -w -s -r xxx yourfile.raw yourfile.wav
The xxx value must be the sample rate displayed by mpg123.
You can pipeline mpg123 into sox. Use a - for the sox input.
An easier way to do both steps:
lame --decode yourfile.mp3 yourfile.wav Use sox to play (almost) any sound file
sox inputOptions inputFile outputOptions outputFile
Do a "man soxexam" to see many examples.
Format options
Channels
-c n Where n = 1,2 or 4
Sample rate
-r rate Where rate is in Hertz
Sample size
-b 8 bits
-w 16 bits
-l 32 bits
Encoding
-s Signed linear
-u Unsigned linear
-U U-law (U.S. logarithmic)
-A A-law (Euro logarithmic)
-a ADPCM (Adaptive pulse-code modulation)
-i IMA_ADPCM
-g GSM
-f Floating point
Input file format is controled by the file extension:
.wav (You don't need to specify other options)
.au (Options may or may not be needed) Convert a wav to an mp3
lame [-b bitrate] infile.wav outfile.mp3
2007-7-20 11:52
admin
CDs
Using cdrecord with non-scsi drives
The primary tool described in the following sections is "cdrecord".
The most current versions of this program accept normal Linux
CD device names, e.g. "/dev/cdrom" and support both SCSI and
ATAPI drives.
Earlier versions of cdrecord only worked with SCSI drives and
required the bizarre "x,y,z" drive name notation. Create a data CDR readable by Linux (-r) or Windows (-J)
nice --18 mkisofs -l -J -r -V MyVolumeName sourceDirectory/ \
| cdrecord speed=x dev=/dev/cdrom -data -
To make a CDRW, add blank=fast to cdrecord options.
Speed should be 8 for CDRs and 4 for CDRW on my HP 9200. Create an ISO image file from a directory of files
mkisofs -l -r -J -V MyVolumeName -o myISOfile.iso.bin sourceDirectory/ Copy a raw DATA CD at the sector level. Source is on /dev/cdrom
cdrecord -v dev=/dev/cdrom speed=2 -isosize /dev/cdrom Make a normal audio cd with tracks taken from mp3 files
mpg123 -s file1.mp3 \
| cdrecord speed=x dev=/dev/cdrom -audio -pad -swab -nofix - Fixate the CD
cdrecord dev=/dev/cdrom -fix Rip a music CD track
cdparanoia [-d device] trackRange result.wav Rip all the tracks on an audio cd to a set of wav files
One wav per track:
cdparanoia 1- -B Rip and convert one track to one mp3
cdparanoia trackNumber - | lame -b 160 - result.mp3 Record an audio cd from a directory full of wav files
One wav per track:
cdrecord speed=s dev=/dev/cdrom -audio *.wav Track range examples
1- # Entire CD
-- -3 # Beginning through track 3
2-4 # Tracks 2 through 4 Create a CDR from an ISO image
cdrecord speed=4 dev=/dev/cdrom -data imageFile.iso.bin
For cdrw, add: blank=fast Create an ISO image file from a CD
readcd dev=/dev/cdrom f=myImageFile.iso.bin Dealing with older versions of cdrecord
Older versions of cdrecord require scsi drivers or
scsi emulation with atapi drives. The following sections
show how to deal with this situation. Make your ide cdrom look like a scsi device
The cdrecord program wants to see scsi devices:
The cdrom module must be loaded first, but it will
normally be loaded if it was operating in ide mode.
Otherwise, do an "insmod cdrom" first.
rmmod ide-cd
insmod cdrom
insmod sr_mod
insmod ide-scsi
The scsi-mod will be loaded if you have
a real scsi interface in your machine.
Otherwise, # it must be loaded before sr_mod. Restore the cd to normal (IDE) operation
rmmod sr_mod ide-scsi
insmod ide-cd Make atapi cd drives look like scsi at boot time
For this example, assume you have two ide drives:
hdc and hdd.
Method 1: Add this line in lilo.conf to the kernel section:
append="hdc=ide-scsi hdd=ide-scsi"
Method 2: Add these lines to /etc/modules.conf:
options ide-cd ignore=hdc
options ide-cd ignore=hdd
pre-install sg modprobe ide-scsi
pre-install sr_mod modprobe ide-scsi
pre-install ide-scsi modprobe ide-cd Devices for the cd drives in scsi mode
/dev/scd0 cdram
/dev/scd1 cdrom
/dev/scd1 dvd Device names for cd drives in ide mode
/dev/hdc cdram
/dev/hdd cdrom
/dev/hdd dvd List all SCSI devices visible to cdrecord in x,y,z format
The cdrecord program will use "dev=x,y,z" notation where x,y,z are
shown by the command:
cdrecord -scanbus
2007-7-20 11:52
admin
Firewire
Load the firewire packet module
modprobe ieee1394 Load the firewire card controller
modprobe ohci1394
The ohci module will recognize your disk as a SCSI device
and automatically load the serial bus protocol (sbp2) module.
If you need to see what's going on for debugging, do a
tail -f /var/log/messages in another shell window before
you load the module. Scan the bus for the SCSI address
cdrecord --scanbus
Mine was at SCSI addresss 2,0,0 so it is /dev/sdb.
If the result had been 1,x,y it would be on /dev/sda. Use fdisk to find the partition name
fdisk /dev/sdb
I found the DOS partition on the ipod at /dev/sdb2 Create a mount point
mkdir /mnt/ipod Mount the device by hand
mount -t vfat /dev/sb2 /mnt/ipod Example fstab entry
/dev/sb2 /mnt/ipod vfat noauto 0 0 Mount the device when an fstab entry exists
mount /mnt/ipod Before you remove the device!
umount /mnt/ipod
rmmod sbp2
After the rmmod, the iPod will tell you that
it's ok to disconnect. This precaution should
be observed before unplugging any firewire disk. Remounting (With firewire and ohci already loaded)
modprobe sbp2
mount /mnt/ipod
2007-7-20 11:53
admin
Wine
Changes in /etc/wine/wine.conf
[Drive C]
"Path" = "/mnt/win"
[wine]
# In this section, change all the paths: substituting
# winnt for windows if that applies to your windows
# installation mounted at /mnt/win
# iPod support for EphPod
[Drive G]
"Path" = "/mnt/ipod"
"Type" = "hd"
"Label" = "iPod Drive"
"Filesystem" = "win95"
# To share EphPod config file with windows
# Drive E is where Windows sees the server
[Drive H]
"Path" = "/mnt/server"
"Type" = "network"
"Label" = "Server"
"Filesystem" = "win95"
2007-7-20 11:53
admin
Security
Use RPM to verify all packages
rpm -Va
The code letters:
S file Size differs
M Mode differs (includes permissions and file type)
5 MD5 sum differs
D Device major/minor number mis-match
L readLink(2) path mis-match
U User ownership differs
G Group ownership differs
T mTime differs
c A configuration file
A streamlined report that ignores date-only changes:
rpm -Va | grep -v ".......T"
To make this a cron job that mails the result:
rpm -Va | grep -v ".......T" | mail myself@mydomain
To skim off acceptable changes
rpm -Va | grep -v ".......T" | grep -vf rpmChanges | \
mail myself@mydomain
Append any new acceptable changes to the rpmChanges file.
2007-7-20 11:53
admin
Services
Control individual services
service <serviceName> <selector>
Typical selectors are: start, stop, restart, status.
If you run the command without a selector, it will display
a list of possible selectors. Standard run levels identify groups of system services
0 Halt
1 Single user
2 Multiuser, no networking, local additions
3 Multiuser, networking, local additions
4 Multiuser, networking, no local additions
5 Same as 3 plus X Windows Login
6 Reboot Change the run level of the system immediately
telinit newLevelNumber
Each runlevel has an associated list of services that should
be stopped or started. These services are configured using
the chkconfig command described below. Change the run level the system will use after reboot
This is done by editing the file:
/etc/inittab
Inside, you will find an expression that looks like this:
id:3:initdefault::
In the example shown above, "3" is the run level used at boot time.
If you wanted to have an X-Windows splash screen with a login dialog,
you would change this number to "5". Configuring runlevels
For each runlevel, we need to specify which services start and which
services should shut down. We also need to specify the order in which
services start or shut down to allow for interdependencies.
A collection of directories and symbolic links are used to perform
these functions. A directory exists for each run level X:
/etc/rc.d/rcX.d
Each run level directory contains symbolic links. The links all
point to the service control files found in:
/etc/rc.d/init.d
The name of the link begins with the letter "S" if the service
should start. The name of the link begins with "K" if the service
should be stopped (Killed.)
The link names also determine order of starting or stopping:
Following the S or K is a two-character integer that determines
the order of execution relative to the other links in the directory.
Higher numbers make the service start later.
After the ordering digits, the service name appears. For example,
the following link will start networking at relative step 10 of
runlevel 3:
/etc/rc.d/rc3.d/S10network
Networking gets turned off in runlevel 1, so we find this link:
/etc/rc.d/rc1.d/K90network
The Linux boot process uses these links to start or stop the
appropriate services at boot time or when you explicitly switch
the run level using the telinit command.
You can maintain all these links by hand: The important idea is to keep
them complimentary: If you create start links on levels 2 and 5,
you should have kill links on 0,1,3,4, and 6.
The chkconfig command is supposed to help you maintain these links.
It doesn't start or stop a service, it only creates or deletes the
symbolic links.
The chkconfig command obtains run level and starting order information
from a special comment found inside each service control file.
A typical comment in a service control file looks like this:
# chkconfig: 2345 90 60
This was extracted from my /etc/rc.d/init.d/crond control file.
The comment suggests that the crond service should start on
runlevels 2345 at relative position 90. By the complimentary
priciple, it should have kill links on levels 0, 1 and 6 at relative
position 60.
Install both start and kill links for a newly installed service:
chkconfig --add serviceName
Remove all start and kill links for a service at all run levels.
chkconfig --del serviceName
Some service control files will have a minus character for the list
of run levels. For example, my Samba control file (smb) contains:
# chkconfig - 91 35
To install a new service like this you first use:
chkconfig --add serviceName
This will put kill links on every level.
Then you specify the levels where you want the service to run:
Add start links and remove kill links from specified levels:
chkconfig --level levelString serviceName on
Add kill links and remove start links from specified levels:
chkconfig --level levelString serviceName off
If you don't use the "--level levelString" option, the default
levels 2345 will be used.
Example to start Samba at runlevels 345:
chkconfig --level 345 smb on
It often happens that people try to maintain the links
by hand and get everything messed up. To clean house when you
are uncertain about a service configuration, first get rid of all
the links using:
chkconfig --del serviceName
2007-7-20 11:54
admin
Kernel
View the startup messages
dmesg Slow down the boot process so you can see what happens
Add 'confirm' (no quotes) to the lilo command line:
Example, At the lilo promp:
LILO: vmLinuz confirm Display all system version information
uname -a Display only the kernel version string
uname -r Specify the root device on a boot floppy
rdev /dev/fd0 /dev/hda7 Show the root device for an image file
rdev anImageFile Set the root device for an image file
rdev anImageFile /dev/hda7 Add a device entry
mknod /dev/name type major minor
Where type is p b c or u Make a ramdisk root file system image with support for PCMCIA
pcinitrd --all myInitrdFile Mount a RAM disk root file system image so you can poke around inside
mount -t ext2 -o loop myInitrdFile /mnt/initrd
(You have to gunzip compressed images first) Core dump file size
ulimit -c <size>
You can disable core dumps by putting "ulimit -c 0" in
/etc/profile Controlling PCMCIA slots
cardctl { suspend, resume, status, eject, insert } slot#
cardinfo # X interface for cardctl Copy raw kernel image to floppy device (obscure way)
dd if=/boot/vmlinuz of=/dev/fd0 bs=8192 DOS command to boot with a commpressed RAM disk root file system
loadlin vmlinuz initrd=myGZippedFileSystemImage Change a dynamic kernel parameter (example)
echo anInteger > /proc/sys/kernel/file_max Update module dependancies after editing /etc/modules.conf
depmod -a Tell lilo you have edited lilo.conf
lilo Tell the kernel to flush the write-behind cache
sync Write something in the system log (Great for system script debugging)
logger -t MyProgram "This is a message"
Also see "man initlog" for debugging init.d scripts. Building a new kernel
Update /usr/src/linux symbolic link to point at sources.
Go into /usr/src/linux
Backup .config to a safe place if you want to keep a copy.
make mrproper (Will delete old .config)
make xconfig (Fill in the blanks and write the .config file)
OR Copy in an old .config file and do:
make oldconfig
Edit the Makefile to bump the version number!
make dep clean bzImage install ;
make modules modules_install
If your root device has a modular driver
you will need an initial ram disk at boot time.
For kernel/module version set xx.yy.zz use:
mkinitrd /boot/initrd-xx.yy.zz xx.yy.zz
This will build a ramdisk file system image that contains
all the loadable modules for block devices described in your
/etc/conf.modules file. See also pcinitrd for PCMCIA boot
devices.
Add another entry for your old kernel to lilo.conf & run lilo.
Move any modules you don't build (like dpc)
Some versions of gcc are not compatible with some kernels.
Redhat supplies a "kgcc" for these systems. Update PCMCIA
OBSOLETE: This is part of the kernel make process now!
Preserve the Redhat-modified /etc/pcmcia/network script.
In the pcmcia-cs source directory:
make clean config
Answer the questions: Symbols from the source tree and
don't say yes to the plug & play bios question.
make all install
Restore the redhat version of /etc/pcmcia/network Patch a kernel
Put the patch file in /usr/src (above 'linux') and cd there.
Then:
patch -s -p0 < patchfile Test a patch before you apply
Add the --dry-run option Copy raw kernel image to make a bootable floppy device
cp zImage /dev/fd0 Cross compiling a kernel
Build cross versions of binutils and gcc:
Define the appropriate CROSS_COMPILE prefix and
use ./config & make as usual.
Make a separate copy of kernel sources.
Don't update the /usr/src/linux symbolic link.
The /usr/src/linux must point to your host kernel source.
Edit the Linux Makefile in the new kernel sources.
The CROSS_COMPILE must match the one used for the
binutils & gcc. Example:
ARCH := ppc
CROSS_COMPILE =powerpc-linux-
Proceed as usual. Re-lilo a linux boot partition that is not the running system
The need for this arrises when you forget to lilo a new kernel.
Boot from a CD or floppy, mount the target Linux partition. Then:
chroot linuxPartition lilo
2007-7-20 11:54
admin
Patch
Create a patch file
oldVersion # Path to the unmodified files
newVersion # Path to the modified files
diff -rN oldVersion newVersion > patchFile
-r Perform diff recursively
-N Support creating new files Apply a patch file
You should be in the directory above oldVersion:
patch -u -s -p0 < patchFile
-s Silent
-p0 Don't modify file path names in the patch
-pN Remove first N components of file path names
-d p Switch to the directory named by p
2007-7-20 11:54
admin
RPM
Install or remove a package
rpm -i package.rpm # Install a package
rpm -U package.rpm # Update an installed package
rpm -F package.rpm # Freshen (Update only if installed)
rpm -e packageName # Remove a package Queries
rpm -qip package.rpm # Describe a non-installed package
rpm -qlp package.rpm # List files in a non-installed package
rpm -qa # List all installed packages
rpm -qf afile # See which package installed a file
rpm -qR package # Find out what a package needs
rpm -qa | grep <pat> # See which packages have pat in name List packages by the source Linux distribution
rpm -qai | grep Dist | awk -F': ' '{print $3}' | sort | uniq -c Build a binary rpm using a source rpm
rpmbuild --rebuild your.src.rpm
The result is in /usr/src/redhat/RPMS/i386 Build a new source rpm from an installed source rpm
rpm -i xxxx.src.rpm
You can now tamper with the tgz in /usr/src/redhat/SOURCES
rpmbuild -bs /usr/src/redhat/SPECS/xxxx.spec
The result is in /usr/src/redhat/SRPMS Create a binary rpm from a tar.gz that contains a .spec
rpmbuild -tb yourpackage.tar.gz Obtain a set of updates from Redhat
up2date -u -d
The downloaded files are in /var/spool/up2date Install rpm on an empty linux partition mounted on 'mp'
rpm --root mp --initdb Create a cpio archive from an rpm and write to an archiveFile
rpm2cpio rpmFile > archive.cpio Expand a cpio archive
cpio -mid < archive.cpio Unpack an rpm on one step
rpm2cpio rpmFile | cpio -mid Use query formats
The whole format is one "string"
Each tag specification looks like this: %{NAME}
You usually want a newline at the end:
rpm -q xmms --qf "%{SIZE}\n"
Between the "%" and the opening brace "{" you can
specify field sizes, or any other C printf formatting chars.
Positive integers select right alignment in the field.
Negative integers select left alignment in the field:
rpm -qa --qf "%-30{NAME} %10{SIZE}\n"
Some header tags select arrays of values.
Use square brackets to iterate over the set.
You can specify more than one array tag inside the query:
rpm -q xmms --qf "[%-50{FILENAMES} %10{FILESIZES}\n]"
Normally, all tags inside square brackets must be array tags.
If you want to print a fixed tag as a label on each line, add
an "=" char to the fixed-tag name:
rpm -q xmms -qf "[%{=NAME} %{FILENAMES}\n]"
Display a list of all rpms sorted by size:
rpm -qa --qf "%-50{NAME} %10{SIZE}\n" | sort -nk 2,2
Display a list of all "devel" packages sorted by size:
rpm -qa | grep devel | \
xargs rpm -q --qf "%-50{NAME} %10{SIZE}\n" | \
sort -nk 2,2 List all the available header tags for query formats
rpm --querytags Show the value of a header element
rpm -q packageName --qf "%{SIZE}\n" List the sizes of selected packages
rpm -qa | grep devel | xargs rpm -q --qf "%{NAME} %{SIZE}\n" Fix a hoarked rpm database
Symptom: All rpm commands "hang up"
Find and kill all processes running rpm or up2date:
ps ax | grep rpm
ps ax | grep up2date
(Kill them by hand)
Remove all rpm database lock files:
rm -f /var/lib/rpm/__db*
This usually gets things going. If not:
First make a backup of the database:
cp -r /var/lib/rpm /var/lib/rpm.copy
Then rebuild the database
rpm --rebuilddb
This takes some time, but if it hangs forever, repeat
the "Find and kill rpm" step and proceed with:
cd /var/lib/rpm
db_verify Packages
(You may need to install db4-utils)
If db_verify reports errors, try:
cp Packages Packages.backup
db_dump Packages.backup | db_load Packages
rpm --rebuilddb
If all these steps fail, you are in big do-do. Signature verification errors
Recent versions of Redhat require signature verification
when processing packages. If you havn't imported the
Redhat GPG signature, you will get errors of the form:
warning: ... V3 DSA signature: NOKEY, key ID ...
To fix this, first obtain a copy of the file RPM-GPG-KEY.
If you are creating your own rpm-based distribution, the
file is widely available on the web.
On a Redhat system, it can be found using:
find /usr -name RPM-GPG-KEY
When you have the file, execute the following expression:
rpm --import RPM-GPG-KEY
頁:
[1]
2
3
重要聲明:本論壇是以即時上載留言的方式運作,XD Forum Pro - 專業論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。
由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,例如侵害您的版權,請以電郵方式聯絡我們,並寫上貴公司或機構的相關資料(例如商業登記號及版權持有證明)以便我們查實後盡快處理有關問題。XD Forum Pro - 專業論壇有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切管理及法律追究之權利。 |
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.