Classmate S

just for fun

Friday, September 29, 2006

linux下对用户的管理

查找UID>999的所有用户的信息

awk -F: ‘$3 > 999 { print $0}’ /etc/passwd

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

sunzhe:x:1000:1000:sunzhe:/home/sunzhe:/bin/bash

debian中,不同的UID段代表不同类型的用户。

IDs 0-99 are for system accounts.

IDs 100-999 are for user-installed programs and daemons, such as Postfix, Fetchmail, gdm, dictd, and so on.

IDs 1000-29999 are ordinary user accounts.

IDs 30000-65533 are reserved, according to the Debian policy manual, but you may use them however you like.

ID 65534 is user “nobody,” an account with no rights or permissions.

sunzhe@debian:~$ id sunzhe

显示如下

uid=1000(sunzhe) gid=1000(sunzhe) groups=1000(sunzhe),20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev)

useradd -m newusername 添加新用户

passwd -e username 使现有密码过期

passwd username 设置密码

useradd -D 显示新建用户的默认配置

adduser username 这个命令从头配置各项,感觉比useradd好用一些

finger username 查看指定用户的配置

usermod -l a b 将用户b的登录名改成a

usermod -u 1200 a aid改成1200

usermod -d /server1/home/a/ -m a ahome文件夹转移

userdel username 删除用户但不删该用户的home文件夹

userdel -r username 全部删掉

ps U username(or UID) 查找所有运行进程

kill PID 杀掉进程

passwd -l username 锁住帐号

passwd -u username 解锁

groupadd newgroup 增加一个组

groupadd -r newgroup 增加一个系统组

su root身份运行

exit 返回

Sunday, September 24, 2006

debian内核的升级

linux内核从2.4到2.6有很大的变化,这些变化导致以往简单的内核升级已经不能有效地实施了.

debian的内核升级也是如此.这里的方法适合从2.4到2.6以及从2.6到2.6的升级.

首先以root登录,安装必要的软件包

apt-get install kernel-package ncurses-dev fakeroot wget bzip2

不过据我发现 ncurses-dev在新版中已经不存在了,安装好ncurses-bin和ncurses-base就足够了.

从kernel.org下载最新的内核压缩包(Full的)到/usr/src,并在其中解压,

运行 make menuconfig进入终端中的界面配置,

也可以用

make xconfig 或

make qconfig 或

make gconfig

这三种方式会进入图形界面。

还可以运行

make oldconfig 引入以前的配置进行配置(等同于前几种方式手动引入以前的内核配置文件)。

配置可以借助以前的配置文件,一般会在/boot/中.

不过就是我最信任的debian的默认配置文件也不能让人满意,还是要自己更改才行,尤其是很多没用的驱动.

在配置好内核之后就是将它编成deb的安装包,这样便于管理,执行下面两条指令

make-kpkg clean

fakeroot make-kpkg –revision=yourname.1.0 kernel_image

这个的时间真是长阿,在我这里接近1小时,因为包括了内核编译和安装的准备!

最终会生成一个deb文件。

如果生成deb文件不幸失败,就运行

make clean 清理然后再配置。

如果一切顺利,进入下一步

apt-get install module-init-tools initrd-tools procps

dpkg -i “生成的deb文件名”

很快就会完成.

最后配置启动需要的东西

cd /boot/
mkinitrd -o /boot/initrd.img-2.6.17.13 2.6.17.13

这里我的版本号是2.6.17.13,编译不同的内核要换成不同的版本号。

最后更改/boot/grub/menu.lst.

将启动项配置好。

恭喜你,完成了!

重新启动试试吧。

linux下光盘镜像及移动存储的挂载

linux把一切设备都作为文件对待,有很方便的一面.可惜我理解的不过深刻,错把文件当成设备.导致没办法把镜像挂载在光驱上,呵呵呵.

原来把光盘镜像挂载在系统上是这样的:

1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型.常用类型有:
  
光盘或光盘镜像:iso9660
  DOS fat16文件系统:msdos
  Windows 9x fat32文件系统:vfat
  Windows NT ntfs文件系统:ntfs
  Mount Windows文件网络共享:smbfs
  UNIX(LINUX) 文件网络共享:nfs

2.-o options 主要用来描述设备或档案的挂接方式.常用的参数有:
  
loop:用来把一个文件当成硬盘分区挂接上系统
  ro:采用只读方式挂接设备
  rw:采用读写方式挂接设备
  iocharset:指定访问文件系统所用字符集
  3.device 要挂接(mount)的设备.
  4.dir设备在系统上的挂接点(mount point).

从光盘制作光盘镜像文件,执行下面的命令:

   #cp /dev/cdrom /home/name/mydisk.iso 或
   #dd if=/dev/cdrom of=/home/name/mydisk.iso

将文件和目录制作成光盘镜像文件,执行下面的命令:

   #mkisofs -r -J -V mydisk -o /home/name/mydisk.iso /home/name/ mydir

光盘镜像文件的挂接(mount):

   #mkdir /mnt/cdrom
   #mount -o loop -t iso9660 /home/name/mydisk.iso /mnt/cdrom

当然,其他格式的镜像也可以用这种方法挂载,如i㎎等

对于硬盘的挂载,我早有应用

fdisk –l或sfdisk -l 或 more /proc/partitions查看分区状况

#mount -t ntfs /dev/sda6 /mnt/usbhd1
#mount -t vfat /dev/sda5 /mnt/usbhd2

对于中文的问题,这样解决

#mount -t ntfs -o iocharset=utf8 /dev/sda6 /mnt/usbhd1
#mount -t vfat -o iocharset=utf8 /dev/sda5 /mnt/usbhd2

我使用的apt源

http://ftp2.jp.debian.org/debian/ etch main

至少在哈尔滨网通上这个服务器速度很快,日本的服务器.

stable更新的实在是太慢了,unstable又实在是不可靠,我的系统被搞垮过几次.

testing最适合日常使用了.

linux的引导和启动

GRUBLILO更灵活,我在这几天里深有体会。

GRUB只要更改配置文件就可以,而LILO还要将配置重新写入。LILO还会不显示配置错误的label,在我的印象中GRUB是会显示配置不正确的label的。(未验证,以后闲得无聊时验证验证)

另外不得不说的是LILO在启动时无法使用命令和编辑。

备份MBR

dd if=/dev/hda of=/root/hda.mbr bs=512 count=1

debianGRUB的配置文件在 /boot/grub/menu.lst

LILO的配置文件在/etc/lilo.conf

GRUB中第一个分区是/dev/hda0,而在LILO中是/dev/hda1,这个差点整死我。

MBR中前446个字节是启动的代码,后66个字节是分区表。

lilo, grub-installfdisk /mbr都是对前446个字节进行写入。cfdisk和其他的分区程序是对后66个字节操作。

使用knoppixMBR进行备份的方法:

sudo dd if=/dev/hda of=/home/knoppix/mbr_backup bs=512 count=1

清除MBR446字节的启动代码方法:

sudo dd if=/dev/zero of=/dev/hda bs=446 count=1

清楚全部MBR的方法:

sudo dd if=/dev/zero of=/dev/hda bs=512 count=1

恢复MBR

sudo dd if=/home/knoppix/mbr_backup of=/dev/hda bs=446 count=1

MBR中移除GRUBMBR

sudo install-mbr /dev/hda

如果系统不能启动,首先要挂载boot文件夹,建立一个文件夹

mkdir /bootmnt

挂载/boot,例如

mount /dev/discs/disc0/part3 /bootmnt

使用同样方式挂载/root

mkdir /rootmnt

mount /dev/discs/disc0/part4 /rootmnt

运行这条指令可以使root权限执行命令

chroot /rootmnt

这时可以进行备份等很多重要的工作。

并可以进行修复等工作,使linux可以工作。

linux中man的使用

man是很有用的东西,就像词典,是必备。使用好man是很有价值地。

man里通常包含以下分段

1 Executable programs or shell commands

2 System calls

3 Library calls

4 Special files (usually found in /dev)

5 File formats and conventions

6 Games

7 Miscellaneous

8 System administration commands

9 Nonstandard kernel routines

n New documentation, which may be moved later

l Local documentation, specific to your system

每个分段就是一个分类,有些关键字可能在一个分类中,有些则在多个分类中。

查找在第一个分段中的grep的信息

man 1 grep

查找grep在哪些分段中有信息

man 1 grep

查找命令,如字数统计

apropos count words

man -k count words

aproposman k的效果是一样的。

如果man的数据库损坏了,就可能不能查找信息了,这时可以直接查找该项的man数据

$ whereis -m cat

然后用man读出

$ man /usr/share/man/man1/cat.1.gz

如果还是不行,可以尝试重建数据库

# mandb

重建如果失效,使用这种方法查找

$ locate / cat. | egrep -w ‘cat\.[1-9][a-zA-Z]*[.gz]?’

不使用man浏览器浏览man中的内容

$ zcat /usr/share/man/man1/cat.1.gz | nroff -man | less

还有一种比较恐怖的浏览方式

zless /usr/share/man/man1/cat.1.gz

man的配置文件在 /etc/manpath.config

其中有这么一段,我的是这样的

# every automatically generated MANPATH includes these fields

#

#MANDATORY_MANPATH /usr/src/pvm3/man

#

MANDATORY_MANPATH /usr/man

MANDATORY_MANPATH /usr/share/man

MANDATORY_MANPATH /usr/X11R6/man

MANDATORY_MANPATH /usr/local/man

可以自己添加路径的。

$ manpath用来查看所有的man路径。

用本地打印机打印man中的页,如

$ man -t finger | lpr

使用网络打印机打印man中的页,如

$ man -t finger | lpr -P printername

打印信息页

$ info finger | lpr

$ info finger | lpr -o cpi=12 -o page-left=54 -o page-right=54 -o page-top=54 \ -o page-bottom=54

man中的信息导出到文件

$ man bash | col -b > bash.txt

$ info bash | col -b > bash.txt

debian中apt的使用

debian可以使用apt管理软件包,非常方便。

apt安装软件很简单

/etc/apt/sources.list这个文件是apt源的列表,通过修改这个列表,可以加入不同的源。

安装软件包使用

# apt-get install tuxkart

覆盖安装软件包用

# apt-get install reinstall tuxkart

同时安装多个软件包可以使用一个列表

# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga

只下载,不安装,不解包使用

# apt-get -d install tuxkart

运行前测试使用(没搞明白什么意思)

# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga dry-run

升级软件包时也用apt-get install 命令

可以使用dpkg来建立和安装软件包

# cd /usr/src

# apt-get build-dep tuxkart

下载并建立软件包

# apt-get -b source tuxkart

安装软件包

# dpkg -i tuxkart.deb

更新debian系统的软件包

首先要更新软件包的列表

# apt-get update

下面这条命令升级所有已安装的软件包,但不删除任何软件包,所以不能解决软件包的依赖问题

# apt-get -u upgrade

这条命令升级软件包,并解决软件包依赖问题

# apt-get -u dist-upgrade

如果要运行一个混合的系统(同时运行包括testing,unstable,stable等不同的软件包)

# apt-get update

对默认的软件包类型,可以直接安装(这里是stable

# apt-get install tuxkart

安装testing的软件包

# apt-get -t testing install tuxkart

自己确定要安装的软件包的版本号

# apt-get install tuxkart=0.2.0-3

查看已经安装的所有软件包并导出到文件

$ dpkg -l | tee dpkglist

查找所有与关键字有关的软件包

$ dpkg -l ‘*gnome*’

查找与关键字有关并已安装的软件包

$ dpkg -l | grep gnome

列出与指定软件包相关的文件

$ dpkg -L gnome-applets

查找一个文件属于什么软件包

$ dpkg -S boing.wav

列出一个软件包的完整信息

$ dpkg -s kpoker

查找已下载,但未安装的软件包

$ dpkg –yet-to-unpack

检查破损软件包和依赖关系

# apt-get check

删除不需要的已下载软件包

# apt-cache autoclean

删除cache中所有软件包

# apt-cache clean

显示部分安装的软件包

$ dpkg –audit

检查部分安装的软件包的状态

$ dpkg -l vpw

然后对其进行完全安装或删除的处理

处理软件包冲突

# apt-get -f install

# dpkg –configure -a

# apt-get -f install

在linux下查看计算机的设备信息

查看在pci总线上的所有设备

# lscpi

# lspci -v

# lspci -vv

更新pci设备的资料

# update-pciids

查看内核找到的所有设备

$ dmesg | less

也可以查找指定的设备,如usb设备

$ dmesg | grep -i usb

ISA设备

$ dmesg | grep -i isa

内存

$ dmesg | grep -i memory

还有很多种设备都可以查找

显示cpu信息

$ cat /proc/cpuinfo

显示内存信息

$ cat /proc/meminfo

proc文件夹中包含了计算机上各种硬件的信息,可以用cat查看

cpu状况直接输出到发声设备

# cat /proc/kcore > /dev/dsp

相当有趣,不过要心理素质好,因为有人在的话一定会挨骂

sfdisk -l fdisk -l 显示当前硬盘的信息

debian安装JDK

由于版权问题,jdk并没有包含在debian中官方apt源中,需要手动进行安装。

首先进入sun的主页,下载最新的JDK(目前是jdk1.5 update8)要选择bin格式的linux安装包。

然后安装用来安装jdk的一些辅助软件包
#apt-get install java-package java-common fakeroot
这时如果有自动安装找不到的包,可以到debian.org查找并安装。

将下载的bin软件包转成deb软件包
fakeroot make-jpkg jdk-1_5_0_08-linux-i586.bin

然后安装生成的deb包即可
dpkg -i sun-j2sdk1.5_1.5.0+update08_i386.deb

安装成功后进行验证
java --version
我的结果是
java version “1.5.0_08″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)
哈哈哈哈,成功!

有可能在linux中已经有了其他的java vm,可以在其中选择默认的,
用下面的命令就可以
sudo update-alternatives --config java
更改默认的java编译器用这一条
update-alternatives --config javac

完毕