Novell Ubuntu Linux命令大全使用方法

转自:Novell Ubuntu Linux命令大全使用方法: http://www.lslnet.com/linux/docs/linux-7400.htm

*********************************************************************************************************

Novell Ubuntu Linux命令大全使用方法

蓝森林 http://www.lslnet.com 2007年4月28日 20:01

  1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件

文件管理 # ls ls -l或ll 列出当前目录下文件的详细信息

文件管理 # pwd pwd 查看当前所在目录的绝对路经

文件管理 # cd cd .. 回当前目录的上一级目录

文件管理 # cd cd - 回上一次所在的目录

文件管理 # cd cd ~ 或 cd 回当前用户的宿主目录

文件管理 # cd cd ~用户名 回指定用户的宿主目录

2 文件管理 # mkdir mkdir 目录名 创建一个目录

文件管理 # mkdir mkdir –p 递归式去创建一些嵌套目录

文件管理 # rmdir Rmdir 空目录名 删除一个空目录

3 文件管理 # rm rm 文件名 文件名 删除一个文件或多个文件

文件管理 # rm rm -rf 非空目录名 递归删除一个非空目录下的一切,不让提式-f

4 文件管理 # cat cat文件名 一屏查看文件内容

5 文件管理 # more more文件名 分页查看文件内容

6 文件管理 # less less 文件名 可控分页查看文件内容

7 文件管理 # grep grep字符 文件名 根据字符匹配来查看文件部分内容

8 文件管理 # mv mv 路经/文件 /经/文件 移动相对路经下的文件到绝对路经下

文件管理 # mv mv 文件名 新名称 在当前目录下改名

9 文件管理 # cp cp /路经/文件 ./ 移动绝对路经下的文件到当前目录下

10 文件管理 # find find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录

11 文件管理 # ln ln 源文件 链接名 创建当前目录源文件的硬链接

ln /home/test /usr/test1 在/usr下建立/home/test的硬链接

12 文件管理 # ln Ln -s a b 创建当前目录下a的符号链接b

13 文件管理 # touch touch file1 file2 创建两个空文件

14 磁盘管理 # df df 用于报告文件系统的总容量,使用量,剩余容量。

15 磁盘管理 # du du -b /home 查看目前/HOME目录的容量(k)及子目录的容量(k)。

16 磁盘管理 # fdisk fdisk -l 查看系统分区信息

17 磁盘管理 # fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区

18 磁盘管理 # mkfs.ext3 Mkfs.ext3 /dev/sdb1

为第一块SCSI硬盘的第一主分区格式化成

ext3的文件系统

mkfs.ext2 Mkfs.ext2/dev/sdb2 格式化成ext2文件系统

19 磁盘管理 # mount mount -t 文件系统类型 设备路经 访问路经 磁盘管理 # 文件系统类型

ISO9660 光驱文件系统

vfat Fat文件系统(windows)

挂载光驱 # mount –t iso9660 /dev/cdrom /mnt/cdrom

挂载FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区

17 磁盘管理 # Umount /mnt/cdrom 卸载/mnt/cdrom为空

18 文件权限 # chmod chmod u+s file 为file的属主加上特殊权限

chmod g+r file 为file的属组加上读权限

chmod o+w file 为file的其它用户加上写权限

chmod a-x file 为file的所有用户减去执行权限

chmod 765 file 为file的属主设为完全权限,属组设成读写权,其它用户具有读和执心权限

19 文件权限 # chown chown root /home 把/home的属主改成root用户

20 文件权限 # chgrp chgrp root /home 把/home的属组改成root组

21 打印管理 # redhat-config-printer-tui 进入安装打印机界面

22 打印管理 # lp lp –d hptr file 打印file到hptr的打印机上

23 打印管理 # lpq Lpq –P 打印机名 查看打印机的状态

24 打印管理 # lprm Lprm –P 打印机名 a 删除打印机内的打印作业

25 打印管理 # disable Disable –r “changing paper” HPtr 禁用打印机并提示原因

26 打印管理 # enable Enable HPtr 重新启用被禁用的

27 用户管理 # useradd Useradd 创建一个新的用户

28 用户管理 # groupadd Groupadd 组名 创建一个新的组

29 用户管理 # passwd Passwd 用户名 为用户创建密码

30 用户管理 # Passwd -d Passwd -d用户名 删除用户密码也能登陆

31 用户管理 # Passwd -l Passwd -l用户名 锁定账号密码

32 用户管理 # Passwd -u Passwd -u用户名 解锁账号密码

33 用户管理 # Passwd -S Passwd -S用户名 查询账号密码

34 用户管理 # Usermod -l Usermod -l 新用户名 老用户名 为用户改名

35 用户管理 # Usermod -L Usermod -L 要锁定用户名 锁定用户登陆

36 用户管理 # Usermod -U Usermod –U解锁用户名 解锁用户登陆

37 用户管理 # Usermod -u Usermod –u 501用户名 改变用户UID

38 用户管理 # Userdel Userdel–r 用户名 删除用户一切

39 用户管理 # Groupmod -n Groupmod –n新用户名 老用户名 为组改名

40 用户管理 # Groupmod -g Groupmod –g 501 组名 改变组GID

41 用户管理 # groupdel Groupdel组名 先应删它的用户 删除组

42 用户管理 # gpasswd -a gpasswd -a 用户名 组名 增加用户到组

43 用户管理 # Id id 用户名 查用户信息

44 软件管理 # rpm -qa rpm –qa | less 查询已安装RPM

45 软件管理 # rpm –qa | grep ftp 查询指定RPM

46 软件管理 # rpm -q rpm -q 已安装的RPM包 查是否安装

47 软件管理 # rpm -q telnet-server 查看telnet服务器包

48 软件管理 # rpm -qi rpm –qi 软件包名称 查看软件的描述信息

49 软件管理 # rpm -ql rpm –ql软件包名称 查询软件包的文件列表

50 软件管理 # rpm -qf rpm –qf软件包名称 查询某个文件所属的软件包

51 软件管理 # rpm -qp rpm –qp软件包全名 查询未安装的软件包信息

52 软件管理 # rpm -e rpm –e 软件包名称 删除具体的软件包

53 软件管理 # rpm -U rpm –Uvh软件包全名 升级软件包并显示过程

54 软件管理 # rpm -ivh rpm –ivh 软件包全名 安装软件包并显示过程

55 软件管理 # rpm -V rpm –V软件包名称 验证软件包的大小,类型等

56 软件管理 # tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包

57 软件管理 # tar -cf tar –cvf benet.tar /home/benet 把/home/benet目录打包

58 软件管理 # tar -czf tar –zcvf benet.tar.gz /mnt 把目录打包并压缩

59 软件管理 # tar –tf tar –tf benet.tar 看非压缩包的文件列表

60 软件管理 # tar –tzf tar –tf benet.tar.gz 看压缩包的文件列表

61 软件管理 # tar –xf tar –xf benet.tar 非压缩包的文件恢复

62 软件管理 # tar –zxvf tar –zxvf benet.tar.gz 压缩包的文件解压恢复

63 软件管理 # tar -jxvf tar –jxvf benet.tar.bz2

64 软件管理 # diff diff file1 file2 > 补丁名.patch 为新旧文件生成补丁文件

65 软件管理 # diff diff file1 file2 比较两个文件的区别

66 软件管理 # Patch Patch file补丁名.patch 打补丁

67 软件管理 # ./configure --prefix=/usr/local/ 编译前配置

68 软件管理 # make 编译

69 软件管理 # make install 安装编译好的源码包

70 启动管理 # reboot Init 6 重启LINUX系统

71 启动管理 # Halt Init 0 Shutdown –h now 关闭LINUX系统

72 启动管理 # runlevel 显示系统运行级

73 启动管理 # Init [0123456] 改变系统运行级,7种

74 启动管理 # Chkconfig –-list [服务名称] 查看服务的状态

75 启动管理 # Chkconfig –-level <运行级> <服务名> on|off|set 设置服务的启动状态

76 启动管理 # Chkconfig <服务名> on|off|set 设置非独立服务启状态

77 进程管理 # Top动态 Ps-aux静态 进程树pstree 查看系统进程

78 进程管理 # 程序名 & 后台运行程序

79 进程管理 # fg 把后台运行的进程调回前台

80 进程管理 # bg 把前台运行进程调到后台

81 进程管理 # renice Renice +1 180 把180号进程的优先级加1

82 进程管理 # kill Kill PID 终止某个PID进程

83 进程管理 # at at 5pm + 3 days /bin/ls 指定三天后下午5:00执行/bin/ls

84 进程管理 # crontab Crontab -e 用VI的形式来编辑自动周期性任务

85 进程管理 # crontab Crontab -l 查看自动周期性任务

86 进程管理 # crontab Crontab -r 删除自动周期性任务

87 进程管理 # crond Service crond 马上启动自动周期性服务 Service crond <启动|停止|重启|状态>

实现磁盘配额 (注安装LINUX时建立/home分区)

目标:对用户zhao在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额

实现步骤:

1. 修改包含/home的行, #vi /etc/fstab, 改为:defaults,usrquota。也就是增加usrquota项。然后保存退出。

2、卸载/home目录 #umount /home

3. 挂接/home目录 #mount /home

4、增加用户zhao #useradd zhao

5、修改密码 #passwd zhao

6、生成关于/home目录的quota信息 # quotacheck -cmug /home

#quotacheck -vu /home

7、查看所有用户的信息 #repquota -au

8、设置配额 #edquota -u zhao

将soft 和hard 分别改为5和10

9、保存并退出 #wq!

10、修改时间 #edquota -t

11、 #wq!

12.开启/home上的磁盘配额功能 #quotaon /home

13.查询配额 #quota -u zhao

14.验证配额 #su - zhao

$touch myfile

Ubuntu一些很必要的命令

安装

查看软件xxx安装内容

dpkg -L xxx

查找软件

apt-cache search 正则表达式

查找文件属于哪个包

dpkg -S filename

apt-file search filename

查询软件xxx依赖哪些包

apt-cache depends xxx

查询软件xxx被哪些包依赖

apt-cache rdepends xxx

增加一个光盘源

sudo apt-cdrom add

系统升级

sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade

清除所以删除包的残余配置文件

dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P -

编译时缺少h文件的自动处理

sudo auto-apt run ./configure

查看安装软件时下载包的临时存放目录

ls /var/cache/apt/archives

备份当前系统安装的所有包的列表

dpkg --get-selections | grep -v deinstall > ~/somefile

从上面备份的安装包的列表文件恢复所有包

dpkg --set-selections < ~/somefile

sudo dselect

清理旧版本的软件缓存

sudo apt-get autoclean

清理所有软件缓存

sudo apt-get clean

删除系统不再使用的孤立软件

sudo apt-get autoremove

系统

查看内核

uname -a

查看Ubuntu版本

cat /etc/issue

查看内核加载的模块

lsmod

查看PCI设备

lspci

查看USB设备

lsusb

查看网卡状态

sudo ethtool eth0

查看CPU信息

cat /proc/cpuinfo

显示当前硬件信息

lshw

硬盘

查看硬盘的分区

sudo fdisk -l

查看IDE硬盘信息

sudo hdparm -i /dev/hda

查看STAT硬盘信息

sudo hdparm -I /dev/sda

sudo apt-get install blktool

sudo blktool /dev/sda id

查看硬盘剩余空间

df -h

df -H

查看目录占用空间

du -hs 目录名

优盘没法卸载

sync

fuser -km /media/usbdisk

内存

查看当前的内存使用情况

free -m

进程

查看当前有哪些进程

ps -A

中止一个进程

kill 进程号(就是ps -A中的第一列的数字)

或者 killall 进程名

强制中止一个进程(在上面进程中止不成功的时候使用)

kill -9 进程号

或者 killall -9 进程名

图形方式中止一个程序

xkill 出现骷髅标志的鼠标,点击需要中止的程序即可

查看当前进程的实时状况

top

查看进程打开的文件

lsof -p

ADSL

配置 ADSL

sudo pppoeconf

ADSL手工拨号

sudo pon dsl-provider

激活 ADSL

sudo /etc/ppp/pppoe_on_boot

断开 ADSL

sudo poff

查看拨号日志

sudo plog

网络

根据IP查网卡地址

arping IP地址

查看当前IP地址

ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'

查看当前外网的IP地址

w3m -no-cookie -dump www.ip138.com|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}'

w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}'

查看当前监听80端口的程序

lsof -i :80

查看当前网卡的物理地址

arp -a | awk '{print $4}'

ifconfig eth0 | head -1 | awk '{print $5}'

立即让网络支持nat

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

sudo iptables -t nat -I POSTROUTING -j MASQUERADE

查看路由信息

netstat -rn

sudo route -n

手工增加删除一条路由

sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

修改网卡MAC地址的方法

sudo ifconfig eth0 down #关闭网卡

sudo ifconfig eth0 hw ether 00:AA:BB:CCD:EE #然后改地址

sudo ifconfig eth0 up #然后启动网卡

统计当前IP连接的个数

netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n

netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n

统计当前20000个IP包中大于100个IP包的IP地址

tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 100 '

屏蔽IPV6

echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6

服务

添加一个服务

sudo update-rc.d 服务名 defaults 99

删除一个服务

sudo update-rc.d 服务名 remove

临时重启一个服务

/etc/init.d/服务名 restart

临时关闭一个服务

/etc/init.d/服务名 stop

临时启动一个服务

/etc/init.d/服务名 start

设置

配置默认Java使用哪个

sudo update-alternatives --config java

修改用户资料

sudo chfn userid

给apt设置代理

export http_proxy=http://xx.xx.xx.xx:xxx

修改系统登录信息

sudo vim /etc/motd

中文

转换文件名由GBK为UTF8

sudo apt-get install convmv

convmv -r -f cp936 -t utf8 --notest --nosmart *

转换文件内容由GBK为UTF8

iconv -f gbk -t utf8 $i > newfile

转换 mp3 标签编码

sudo apt-get install python-mutagen

find . -iname “*.mp3” -execdir mid3iconv -e GBK {} /;

控制台下显示中文

sudo apt-get install zhcon

使用时,输入zhcon即可

文件

快速查找某个文件

whereis filenamefind 目录 -name 文件名

查看文件类型

file filename

显示xxx文件倒数6行的内容

tail -n 6 xxx

让tail不停地读地最新的内容

tail -n 10 -f /var/log/apache2/access.log

查看文件中间的第五行(含)到第10行(含)的内容

sed -n '5,10p' /var/log/apache2/access.log

查找包含xxx字符串的文件

grep -l -r xxx .

查找关于xxx的命令

apropos xxx

man -k xxx

通过ssh传输文件

scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上

scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地

查看某个文件被哪些应用程序读写

lsof 文件名

把所有文件的后辍由rm改为rmvb

rename 's/.rm$/.rmvb/' *

把所有文件名中的大写改为小写

rename 'tr/A-Z/a-z/' *

删除特殊文件名的文件,如文件名:--help.txt

rm -- --help.txt 或者 rm ./--help.txt

查看当前目录的子目录

ls -d */. 或 echo */.

将当前目录下最近30天访问过的文件移动到上级back目录

find . -type f -atime -30 -exec mv {} ../back /;

将当前目录下最近2小时到8小时之内的文件显示出来

find . -mmin +120 -mmin -480 -exec more {} /;

删除修改时间在30天之前的所有文件

find . -type f -mtime +30 -mtime -3600 -exec rm {} /;

查找guest用户的以avi或者rm结尾的文件并删除掉

find . -name '*.avi' -o -name '*.rm' -user 'guest' -exec rm {} /;

查找的不以java和xml结尾,并7天没有使用的文件删除掉

find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} /;

统计当前文件个数

ls /usr/bin|wc -w

显示当前目录下2006-01-01的文件名

ls -l |grep 2006-01-01 |awk '{print $8}'

压缩

解压缩 xxx.tar.gz

tar -zxvf xxx.tar.gz

解压缩 xxx.tar.bz2

tar -jxvf xxx.tar.bz2

压缩aaa bbb目录为xxx.tar.gz

tar -zcvf xxx.tar.gz aaa bbb

压缩aaa bbb目录为xxx.tar.bz2

tar -jcvf xxx.tar.bz2 aaa bbb

Nautilus

显示隐藏文件

Ctrl+h

显示地址栏

Ctrl+l

特殊 URI 地址

* computer:/// - 全部挂载的设备和网络

* network:/// - 浏览可用的网络

* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录

* smb:/// - 可用的 windows/samba 网络资源

* x-nautilus-desktop:/// - 桌面项目和图标

* file:/// - 本地文件

* trash:/// - 本地回收站目录

* ftp:// - FTP 文件夹

* ssh:// - SSH 文件夹

* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装

* themes:/// - 系统主题文件夹

查看已安装字体

在nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts

程序

详细显示程序的运行信息

strace -f -F -o outfile

日期和时间

设置日期

#date -s mm/dd/yy

设置时间

#date -s HH:MM

将时间写入CMOS

hwclock --systohc

读取CMOS时间

hwclock --hctosys

控制台

不同控制台间切换

Ctrl + ALT + ←

Ctrl + ALT + →

指定控制台切换

Ctrl + ALT + Fn(n:1~7)

控制台下滚屏

SHIFT + pageUp/pageDown

控制台抓图

setterm -dump n(n:1~7)

数据库

mysql的数据库存放在地方

/var/lib/mysql

从mysql中导出和导入数据

mysqldump 数据库名 > 文件名 #导出数据库

mysqladmin create 数据库名 #建立数据库

mysql 数据库名 < 文件名 #导入数据库

忘了mysql的root口令怎么办

sudo /etc/init.d/mysql stop

sudo mysqld_safe --skip-grant-tables &

sudo mysqladmin -u user password 'newpassword''

sudo mysqladmin flush-privileges

修改mysql的root口令

sudo mysqladmin -uroot -p password '你的新密码'

其它

下载网站文档

wget -r -p -np -k http://www.21cn.com

· -r:在本机建立服务器端目录结构;

· -p: 下载显示HTML文件的所有图片;

· -np:只下载目标站点指定目录及其子目录的内容;

· -k: 转换非相对链接为相对链接。

如何删除Totem电影播放机的播放历史记录

rm ~/.recently-used

如何更换gnome程序的快捷键

点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效;

如果要清除该快捷键,请使用backspace.

*******************************************************************************************

                                      转帖完毕

安装Ubuntu

本来,对于linux操作系统,我是不大追求新的,一方面是自己的机器太老了,一方面是没有需要。所以,我家里的redhat linux9.0可能用了都有1年了也没有去动过。但是,这几天,我把redhat linux9.0去掉了,用硬盘iso文件(ubuntu-6.06-alternate-i386.iso)安装ubuntu的方法安装了Ubuntu6.06桌面版。

我为什么去掉redhat linux9.0呢?套用一位linuxsir.org上的朋友的话是“现在谁还用这”。

当我编译安装一个新的软件时,总是告诉我这样那样的库过时,要升级;还有前一段时间在linux下用得好好的MilyQQ和LumaQQ不知是安装了(或升级了)什么东西的缘故,突然一齐罢工都不能用了,我又畏惧去找原因,生怕又有一大堆东西要掌握,而我现在的重点不在于此;然后就是我安装了firefox的flash 9.0插件后,firefox只要一浏览有flash的网页往往就会崩溃。于是,我终于要下决心离开redhat linux9.0了。本来想找它的后续桌面版Fedora,但是Fedora的光盘有六张(我不知道到底需要几张光盘才能安装它?也不知道Fedora能不能进行硬盘安装?),我自己原来下过Ubuntu的硬盘iso安装文件,也在单位的P4 1.7G + 256M的机器上用过几天Ubuntu(因为我嫌它运行慢了和有点不适应它的“大包大揽”的自动化安装方式和它的默认UTF-8的locale编码,后来就没有用了),只有约700M大小,所以我就用Ubuntu了。

下面分享一下我用硬盘iso文件安装Ubuntu的经验。具体步骤在上面提到的那篇日记中有:用硬盘iso文件(ubuntu-6.06-alternate-i386.iso)安装ubuntu的方法

其中要注意的是:

1)、要选英文安装语言,以后安好了在安装中文包;我选中文安装语言时,出现了安装不能继续前进的问题,也不知道是不是语言问题引起的,反正是第二次选择英文安装语言后没有出现这个问题了;

2)、原来的/home(用户数据)和/usr/local(用户程序)分区,在安装程序分区时直接挂载到相应的挂载点,并选择“keep data existed”(大概是这样,意思是保持原来的数据不变)就行了;

3)、如果安装grub不成功时,重复安装一次“基本系统”(英文大概是“base system”吧)就成了(我试过两次都是这样);

4)、grub命令中的root (hd1,0)是要确定vmlinuz和initrd.gz(或initrd.img之类)文件所在的分区,一般来说是boot分区,如果没有划分boot分区(听说这样不科学,不过我就是这样的:))那就是根分区(/)(例如:在根分区下作了/boot目录下的vmlinuz和initrd.img文件的链接为/vmlinuz和/initrd.img);我的认识就是这样的,如果哪位大侠发现有什么错漏之处还望指点一二,谢谢。

5)、下面这个问题害得我刚装好Ubuntu一天又在今天中午重新安装Ubuntu了。

我下载了一个zhcon0.2.6的deb包安装(Ubuntu仓库里的zhcon0.2.3过时了,而且在我的系统上不能工作),报告说libc6版本低了,我又下载一个最新的libc6的deb包准备安装,却又报告缺哪个包。。。,又缺哪个包。。。

然后我准备用Ubuntu的新得立包管理系统更新libc6,报告3 broken,不能更新,而且快捷菜单里只有卸载的选项,一选择卸载又有许多与libc6有关的东西要更改。。。弄来弄去,就是不能继续更新libc6了。我知道如果我花时间去找解决方法也找得快。但是,我感觉不如重新装来得快:)

我感觉这是我不能适应Ubuntu安装方式的原因,牵涉面太宽了,而且这种自动化的方式使我手动控制变得有点不太方便。也许是没有深入Ubuntu的原因吧?

不过,从这个事件我得到一个教训,在Ubuntu下,用新得立自动包管理方式不能安装的东西,不要尝试用deb包去安装,如果deb包的东西打破了新得立系统的统一管理方式可能会有麻烦(像我碰到的那样)。这时,我觉得,最好的方式还是从源码编译手动安装的好(我还没有试着在ubuntu下编译安装zhcon0.2.6,但在redhat linux9.0下成功的)。

6)、我感觉AMD Duron 700 + 384M的机器比原来单位上的P4 1.7G + 256M的机器跑Ubuntu桌面版还要快点,可能是前者的内存多点吧?

7)、每个系统都有它自己的脾气,如果我们摸准了它的脾气,它就会乖乖听话,给我们卖力工作的:)

Windows XP操作系统现在在搞正版认证,如果你在自动更新中下载了正版认证的更新,如果你是盗版的Windows XP,那么,你的系统就会被盖上一个戳,标记为盗版,告诉你是盗版软件的受害者。还有,如果你到Microsoft的网站去下载新版的IE7,就会要求你先进行正版认证。我想,我坚持把linux作为自己的工作系统是应该不会错的,不为别的,清静,省心,省钱,还是正版:)

批量更改QQ聊天场景mp3音乐文件名为其所在目录名

批量更改QQ聊天场景mp3音乐文件名为其所在目录名

QQ的聊天场景中(在目录:IMScene/Scene中)的mp3音乐文件名是像这样的E00001.mp3的符号命名(老婆原来刻苦聊天时在聊天场景中攒下了200首mp3,IMScene目录有700多M),我把这些文件在linux下mp3blaster下播放时看不到音乐的中文文件名。碰巧聊天场景中的每一个目录的名字就代表了其下的音乐的名字,于是,我花了一个下午写了下面这个bash脚本来把mp3音乐的名字改成跟它的目录名一样。一方面是有了中文名字的音乐文件,一方面学习一下linux的bash脚本写作。我想,在windows下用批处理脚本也应该能完成这个工作。但是我学电脑的时候已经过了microsoft的dos时代,就没有学过批处理。倒是linux下的批处理好像还在类unix世界广泛使用。

当然,我很少用和写bash脚本,如果哪位同志看到其中的错误、不当、和可以改进之处请不吝赐教。谢谢。

使用的关键知识点:

1)、for循环遍历目录;

2)、文件相关判断;

3)、字符串比较与数字比较的区别;

4)、对文件名带中文和文件名中带有空格的文件进行操作时,必须对文件名加上双引号;

一些小技巧:

1)、控制脚本只在这个目录执行一次;

2)、控制一个目录下多个类似文件的改名;


#!/bin/bash

# rename.sh

# Rename the file's name as its directory name, like this:

# Rename "/home/m/Scene/求佛/E00001.mp3" to

# "/home/m/Scene/求佛/求佛.mp3"

NOARGS=65

CONFIRM_FAIL=66

RUNONCE_FLAG=67

# Input the first level directory.

# The dirctories structure is like this:

# first level directory

#    second level directory 1

#       files in second level directory 1

#    second level directory 2

#       files in second level directory 2

#    second level directory 3

#       files in second level directory 3

# ...

if [ $# -lt 3 ]

then

   echo "Usage: $0 dir redir suffix ..."

   exit $NOARGS

fi

dir=$1

redir=$2

suffix=$3

echo "your first argument is $dir"

echo "your second argument is $redir"

echo "your third argument is $suffix"

if [ $dir != $redir ]

then

   echo "Usage: $dir must equal to $redir for confirming..."

   exit $CONFIRM_FAIL

fi

if [ -e $dir/runonce.flag ]

then

   echo "Usage: This program can only run once!"

   exit $RUNONCE_FLAG

fi

directorys=$dir/*

for directory in $directorys; do # Find all second level directories

     if [ -d "$directory" ] # Note! It must add double quote before

                            # and after $directory, otherwise, it will

                            # report error if there is blank or chinese

                            # in $directory.

     then

        echo "$directory is a directory"

        count=0

        for file in "$directory"/*$suffix; do # Find the mp3 file in second

                                              # level directory

           if [ -f "$file" ]

           then

              echo "$file is a file"

              dirname=${directory##*/} # get the second level directory name

                                       # without its prefix path like /home/m/

              echo "$file's directory is $dirname"

              if [ $count -gt 0 ]

              then

                 echo "rename $file to $directory/$dirname$count$suffix"

                 echo " rename #$count file begin..."

                 mv "$file" "$directory/$dirname$count$suffix"

              else

                 echo "rename $file to $directory/$dirname$suffix"

                 mv "$file" "$directory/$dirname$suffix"

              fi

              let "count = count + 1"

              echo "rename $count file ok" 

           fi

        done

     else

        echo "$directory is not a directory"

        echo "Usage: $0 dir redir ..."

     fi

done

# Write runonce flag file into the first level directory

echo "Run rename.sh once at `date`" > $dir/runonce.flag

exit 0

在linux系统中备份远程mysql数据库的脚本文件2则

1、备份成rar的分卷压缩格式,生成两个(若有分卷的rar压缩文件会不止两个)备份文件,如:

db20070325092032.sql,db20070325092032.sql.rar

#!/bin/bash

# Backup database with current date as a part of file name.

# Date: 2007-03-24

echo "Today is `date`."

echo " Now begin backup database..."

prefix=db$(date +%Y%m%d%H%M%S) # Needs a leading '+' to invoke formatting.

suffix=sql

filename=$prefix.$suffix

echo "The file name is $filename."

#Begin backup database.

hostname=yourhostname

username=yourusername

dbname=yourdbname

dbdir=~/yourdbbackupdir

mysqldump -h$hostname -u$username -p $dbname > $dbdir/$filename

#Begin compress backup file with .rar format.

compressfile=$filename.rar

echo "Begin compress $filename into $compressfile..."

cd $dbdir

rar a -v1024k $compressfile $filename

echo "Backup database success."

exit 0

**********************************************************************

2、备份成*.tar.bz2的压缩格式,生成两个备份文件,如:

db20070325092032.sql,db20070325092032.sql.tar.bz2

#!/bin/bash

# Backup database with current date as a part of file name.

# Date: 2007-03-24

echo "Today is `date`."

echo " Now begin backup database..."

prefix=db$(date +%Y%m%d%H%M%S) # Needs a leading '+' to invoke formatting.

suffix=sql

filename=$prefix.$suffix

echo "The file name is $filename."

#Begin backup database.

hostname=yourhostname

username=yourusername

dbname=yourdbname

dbdir=~/yourdbbackupdir

mysqldump -h$hostname -u$username -p $dbname > $dbdir/$filename

#Begin compress backup file with .tar.bz2 format.

compressfile=$filename.tar.bz2

echo "Begin compress $filename into $compressfile..."

cd $dbdir

tar cfj $compressfile $filename

echo "Backup database success."

exit 0

删除linux的/tmp目录引起的不能正常登录系统的故障

昨天无意查看到/tmp目录竟占了400M的空间,看到里面全是一个乱七八糟的东西。联想到windows的temp目录的作用。就把/tmp目录删除了,想系统启动时可能就重新建了这个目录。结果系统只能启动到控制台模式;

又用mkdir /tmp建了这个目录,结果系统在控制台模式登录和X windows模式登录状态间反复切换,不能进入系统;

后来在网上查了一下,改变了/tmp目录的权限为:chmod a+rwx,o+t /tmp,即为:

drwxrwxrwt    4 root     root         4096  3月 16 10:18 tmp

系统恢复正常。

具体分析原因如下:

正常情况下,/tmp目录的权限是:

drwxrwxrwt    4 root     root         4096  3月 16 10:18 tmp

它表示所有的用户都可以在其中建立文件(或目录),即任何人都对tmp目录拥有“写权限”,但是除非tmp目录的所有者和文件的所有者,其他人不能在/tmp目录下改写(或删除、重命名)别人的文件(或目录)。

如果你删除了系统的tmp目录,又用mkdir /tmp建立这个目录,那么根据umask的规定,默认建议的目录的权限是:

drwxr-xr-x    3 root     root         4096  3月 16 11:31 tmp

那么其他人就不能在/tmp目录下建立文件了;这时,系统将出现故障(如:不能启动或不能进入x windows);

如果你用:chmod a+w /tmp改变/tmp目录的权限为:

drwxrwxrwx    3 root     root         4096  3月 16 11:34 tmp

那么任何人都可以删除别人在/tmp目录下的文件了,包括删除root在/tmp目录下建立的文件;

如果用:chmod o+t /tmp为/tmp目录加了粘滞位t,那么其他人就不能在tmp目录下改写(或删除、重命名)别人的文件(或目录),起到了/tmp目录的作用。

另外,“suid”和“sgid”特殊标志位可以使普通用户运行一个程序,使这个程序访问或修改只有文件所有者或root用户才能直接访问或修改的文件,当然前提是这个普通用户对这个文件的某个部分拥有相应的权限。

详情见转帖:linux的权限和所有权模型(转帖): http://java.learndiary.com/diaries/3110.jsp

本人的系统是redhat linux9.0+amd duron 700。在网上查到有人说删除某些linux发行版本的/tmp目录下的文件会使系统不能正常工作,也不知道是不是真的。不过,这次也再一次给我一个教训,对linux操作系统不熟悉的地方不能按照windows的模式想当然的操作。尤其是系统是正式的工作系统,应该坚持“宁滥勿缺”的原则,不要想当然的删除你不熟悉的文件或目录。

Linux的权限和所有权模型(转帖)

转载者前言:

本来这些内容在linux的在线man文档或info文档中都有非常详细的解释,无奈英文不行,还是不能全面理解linux的权限系统,只好上网查了一下,收集到一篇比较完整的介绍转帖于此。其中的内容涉及:一般w,r,x标志位控制,特殊的suid,sgid,t标志位控制,umask控制;

linux的权限系统是使用linux的重要基础,如果不能对其所有权模型有比较透彻的理解,就会对正确理解和使用系统中的一些东西造成障碍,比如我碰到的:删除linux的/tmp目录引起的不能正常登录系统的故障: http://java.learndiary.com/diaries/3112.jsp

另外,对权限系统目前还有如下的疑问

1)、大写“X”标志位是做什么用的?

2)、passwd程序怎样控制用户只访问/etc/passwd文件中用户能够访问的部分?

转帖正文:

******************************************************************************

转自:Linux的权限和所有权模型:http://linux.chinaitlab.com/safe/38178.html

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  一个用户、一个组

  

  我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个

组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组:

  

  $ ls -l /bin/bash

  

  -rwxr-xr-x  1 root   wheel   430540 Dec 23 18:27 /bin/bash在这个特殊

的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型

通过允许给每个文件系统对象设置三种独立的权限级别来工作—它们为文件的所有者、文

件的组以及所有其他用户。

  

  理解“ls -l”

  

  我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:

  

  $ ls -l /bin/bash-rwxr-xr-x  1 root   wheel   430540 Dec 23 18:27 /

bin/bash第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符

(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:

  

  “d”目录“l”符号链接“c”字符专门设备文件“b”块专门设备文件“p”先进先出

“s”套接字三个三元组$ ls -l /bin/bash-rwxr-xr-x  1 root   wheel   

430540 Dec 23 18:27 /bin/bash该字段的其余部分由三个三元组字符组成。第一个三元字

符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权

限:

  

  "rwx""r-x""r-x"上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文

件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以

发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可

以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户

更新或删除它。

  

  我是谁?在我们看怎样改变文件的用户所有权和组所有权之前,我们首先来看一看怎

样得知您当前的用户标识和组成员资格。除非最近您使用过 su 命令,否则您当前的用户

标识是您用来登录系统的用户标识。但是,如果您经常使用 su,您可能不记得您当前有效

的用户标识。要查看用户标识,输入 whoami:# whoamiroot# su drobbins$

whoamidrobbins我在哪一组?要看看您属于哪一组,使用 group 命令:$ groupsdrobbins

wheel audio在上面的示例中,我是 drobbins、wheel 和 audio 组的成员。如果您想看看

其他用户在什么组,指定他们的用户名作为参数:

  

  $ groups root daemonroot : root bin daemon sys adm disk wheel floppy

dialout tape videodaemon : daemon bin adm改变用户和组所有权为了改变文件或其它文

件系统对象的所有者或组,分别使用 chown 或 chgrp。这两个命令都要一个用户名或组名

作参数,后面跟上一个或多个文件名。

  

  # chown root /etc/passwd# chgrp wheel /etc/passwd您还可以用 chown 命令的另

一种形式同时设置所有者和组:

  

  # chown root.wheel /etc/passwd除非您是超级用户,否则您不可以使用 chown,然

而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。

  

  递归的所有权改变chown 和 chgrp 都有一个 -R 选项,该选项可以用来告诉它们递归

地将所属权和组改变应用到整个目录树中。例如:# chown -R drobbins /home/drobbins

介绍 chmodchown 和 chgrp 可以用来改变文件系统对象的所有者和组,而另一个程序—叫

做 chmod —用来改变我们可以在 ls -l 清单中看到的 rwx 权限。chmod 带有两个或多个

参数:“mode”,描述怎样改变权限,后面跟将会受到影响的文件或文件列表:$ chmod

+x scriptfile.sh在上面的示例中,我们的“mode”是 +x。您可能会猜到,+x 模式告诉

chmod,使该特殊文件对于用户、组以及其它任何人都是可执行的。如果我们想要除去一个

文件的所有执行权限,我们应该这样做: $ chmod -x scriptfile.sh用户/组/其他粒度

到此,我们的 chmod 示例已经影响到了所有三个三元组—用户、组和所有其他用户。通常

,一次只修改一个或两个三元组很方便。要这样做,只需要在 + 或 - 符号之前,给您想

要修改的特定的三元组指定符号字符。对于“用户”三元组使用 u,对于“组”三元组使

用 g,对于“其他/每个人”使用 o:$ chmod go-w scriptfile.sh我们刚除去了组和所

有其他用户的写权限,而保留“所有者”权限不动。重新设置权限除了交替打开和关闭权

限位以外,我们还可以一起重新设置它们。通过使用 = 操作符,我们可以告诉 chmod 我

们要指定权限和取消别的权限:$ chmod =rx scriptfile.sh上面,我们只设置了所有的“

read”和“execute”位,没有设置所有的“write”位。如果您仅仅想重新设置特定的三

元组,您可以像下面这样,在 = 之前指定该三元组的符号名:

  

  $ chmod u=rx scriptfile.sh

  

  数字模式

  

  直到现在为止,我们使用了叫做“符号”的模式来用 chmod 指定权限的改变。然而,

指定权限还有一种普遍使用的方法—使用 4 位八进制数。使用叫做数字权限语法的语法,

每一位代表一个权限三元组。例如,在 1777 中,777 设置本章我们所讨论的“owner”、

“group”和“other”标志。1 用来设置专门的权限位,我们将在本章的结束部分讲到。

这个图表说明了怎样解释第二到四位(777):

  

  模式数字

  rwx 7

  rw- 6

  r-x 5

  r-- 4

  -wx 3

  -w- 2

  --x 1

  --- 0

  

  数字权限语法

  

  当您需要给一个文件指定所有权限时,数字权限语法特别有用,比如在下面的示例中



  

  $ chmod 0755 scriptfile.sh

  

  $ ls -l scriptfile.sh

  

  -rwxr-xr-x  1 drobbins drobbins    0 Jan 9 17:44 scriptfile.sh

  

  在该示例中,我们使用了 0755 模式,它展开为一个完整的权限设置“-rwxr-xr-x”



  

  Umask

  

  当进程创建了新文件时,它指定新文件应该具有的权限。通常,所请求的模式是 0666

(每个人可读和可写),它比我们希望的具有更多的权限。幸运的是,不管什么时候创建

了新文件,Linux 将参考叫做“umask”的东西。系统用 umask 值来将初始指定的权限降

低为更合理、更安全的权限。您可以通过在命令行中输入 umask 来查看您当前的 umask

设置:

  

  $ umask

  

  0022

  

  Linux 系统上,umask 的缺省值一般为 0022,它允许其他人读您的新文件(如果他们

可以得到它们),但是不能进行修改。为了在缺省的情况下使新文件更安全,您可以改变

umask 设置: $ umask 0077umask 将确保组和其他用户对于新创建的文件绝对没有任何权

限。那么,umask 怎样工作呢?与文件的“常规”权限不同,umask 指定应该关闭哪一个

权限。我们来参阅一下我们的“模式到数字”映射表,从而使我们可以理解 0077 的

umask 的意思是什么:模式数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0 使

用该表,0077 的最后三位扩展为 ---rwxrwx。现在,请记住 umask 告诉系统禁用哪个权

限。根据推断,我们可以看到将关闭所有“组”和“其他”权限,而“用户”权限将保留

不动。

  

  介绍 suid 和 sgid

  

  当您最初登录时,将启动一个新的 shell 进程。您已经知道,但是您可能还不知道这

个新的 shell进程(通常是 bash)使用您的用户标识运行。照这样,bash 程序可以访问

所有属于您的文件和目录。事实上,作为用户,我们完全依靠其它程序来代表我们执行操

作。因为您启动的程序继承了您的用户标识,因此它们不能访问任何不允许您访问的文件

系统对象。

  

  例如,一般用户不能直接修改 passwd 文件,因为“write”标志已经对除“root 用

户”以外的每个用户关闭:

  

  $ ls -l /etc/passwd

  

  -rw-r--r--  1 root   wheel    1355 Nov 1 21:16 /etc/passwd

  

  但是,一般用户确实需要在他们需要改变其密码的任何时候,能够修改 /etc/passwd

(至少间接地)。但是,如果用户不能修改该文件,究竟怎样完成这个工作呢?

  

  Suid

  

  幸好,Linux 权限模型有两个专门的位,叫做“suid”和“sgid”。当设置了一个可

执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序

的人运行。现在,回到 /etc/passwd 问题。如果看一看 passwd 可执行文件,我们可以看

到它属于 root 用户:

  

  $ ls -l /usr/bin/passwd

  

  -rwsr-xr-x  1 root   wheel    17588 Sep 24 00:53 /usr/bin/passwd

  

  您还将注意到,这里有一个 s 取替了用户权限三元组中的一个 x。这表明,对于这个

特殊程序,设置了 suid 和可执行位。由于这个原因,当 passwd 运行时,它将代表 root

用户执行(具有完全超级用户访问权),而不是代表运行它的用户运行。又因为 passwd

以 root 用户访问权运行,所以能够修改 /etc/passwd 文件,而没有什么问题。

  

  suid/sgid 告诫说明

  

  我们看到了 suid 怎样工作,sgid 以同样的方式工作。它允许程序继承程序的组所有

权,而不是当前用户的程序所有权。这里有一些关于 suid 和 sgid 的其它的但是很重要

的信息。首先,suid 和 sgid 占据与 ls -l 清单中 x 位相同的空间。如果还设置了 x

位,则相应的位表示为 s(小写)。但是,如果没有设置 x 位,它将表示为 S(大写)。

另一个很重要的提示:在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可

能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd 命令是为数不多的必

须使用“suid”的命令之一。

  

  改变 suid 和 sgid

  

  设置和除去 suid 与 sgid 位相当简单。这里,我们设置 suid 位:

  

  # chmod u+s /usr/bin/myapp

  

  此处,我们从一个目录除去 sgid 位。我们将看到 sgid 位怎样影响下面几屏中的目

录:

  

  # chmod g-s /home/drobbins

  

  权限和目到此为止,我们从常规文件的角度来看权限。当从目录的角度看权限时,情

况有一点不同。目录使用同样的权限标志,但是它们被解释为表示略微不同的含义。对于

一个目录,如果设置了“read”标志,您可以列出目录的内容;“write”表示您可以在目

录中创建文件,“execute”表示您可以进入该目录并访问内部的任何子目录。没有“

execute”标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件

系统对象是不可查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录

内的对象。目录和 sgid如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对

象将继承目录的组。当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的

功能很管用。只需要这样做:

  

  # mkdir /home/groupspace

  

  # chgrp mygroup /home/groupspace

  

  # chmod g+s /home/groupspace

  

  现在,mygroup 组中的所有用户都可以在 /home/groupspace 内创建文件或目录,同

样,他们也将自动地分配到 mygroup 的组所有权。根据用户的 umask 设置,新文件系统

对象对于 mygroup 组的其他成员来说,可以或不可以是可读、可写或可执行的。目录和删

除缺省情况下,Linux 目录以一种不是在所有情况下都很理想的方式表现。一般来说,只

要对一个目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使

用的目录,这种行为是很合理的。但是,对于很多用户使用的目录来说,尤其是 /tmp 和

/var/tmp,这种行为可能会产生麻烦。因为任何人都可以写这些目录,任何人都可以删除

或重命名任何其他人的文件—即使是不属于他们的!显然,当任何其他用户在任何时候都

可以输入“rm -rf /tmp/*”并损坏每个人的文件时,很难把 /tmp 用于任何有意义的文件

。所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用

chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用

户)、文件的所有者或 root 用户。事实上,所有 Linux 分发包都缺省地启用了 /tmp 的

粘滞位,而您还可以发现粘滞位在其它情况下也很管用。难以理解的第一位总结本章,我

们最后来看一看数字模式的难以理解的第一位数。您可以看到,这个第一位数用来设置

sticky、suid 和 sgid 位:

  

  suid sgid sticky 模式数字 on on on 7 on on off 6 on off on 5 on off off 4

off on on 3 off on off 2 off off on 1 off off off 0

  

  这里有一个怎样用 4 位数字模式来设置一个目录的权限的示例,该目录将由一个工作

组使用: # chmod 1775 /home/groupfiles请想一想 1755 数字模式权限设置的含义。

  相关产品与培训

● 相关文章                                           ● 推荐文章

避其锋芒 Linux操作系统入侵实例

构建一个基于软盘的防火墙

用Linux防火墙伪装抵挡黑客恶意攻击

用rsync从Linux到Windows远程备份(组图)

解决新的SELinux安全级别产生问题(图)

linux SSH 的一些安全小技巧

Linux下PhpMyAdmin程序目录的安全管理

Linux网络安全经验之谈

防火墙 Linux 数据包捕获模块包过滤

巧妙利用Linux系统IP伪装抵住黑客攻击

********************************************************************************

                                     转帖完毕

redhat linux9.0中grub启动的恢复

在用fdisk /mbr时,本来想对机器上的第二块硬盘作清除主引导记录的操作,结果却把装有linux操作系统的第一块硬盘的主引导记录清掉了。现在还不知道fdisk /mbr在两块硬盘上操作的有关问题?

恢复需要进入linux的grub命令行程序,可以从两个途径进入。

一是从安装光盘设置为从光盘启动,进入安装界面后输入linux rescue,进行一系列语言、键盘等的设置后就进入了shell命令行,这时就可以进入grub程序了。

一是从其它途径(如grub启动软盘、从dos引导)进入系统工作状态后进入grub程序。

然后就是输入 grub命令如下:

grub>root (hd0,0) (hd0指第一个硬盘,后面的0指的是/boot/grub目录所在的分区,而不是指的是/所在的分区,如果你的/boot和/分别在两个分区上,就不要弄错了)

grub>setup (hd0) (是指把grub引导程序写入第一个硬盘的主引导记录,如果写成(hd0,0)是指把引导记录写入第一个硬盘的第一个分区的引导扇区中)

执行成功后会显示success的信息。

不过,我的这个redhat linux9.0操作系统挂在amd毒龙700上可以用这个方法把grub恢复到MBR中,但挂在486DX100却不行,启动报告grub read error,要用setup (hd0,0)写入分区的引导扇区才行,不知道是怎么一回事?

一个可以在linux和windows控制台使用的qq客户端软件MilyQQ

详见作者的博客:喋喋不休: http://spadger.blog.com.cn

现在最新的版本是MilyQQ3.0。现在的版本是c++写的,速度很快。以前的版本是java写的。

我试了一下,使用MilyQQ3.0,在我的486dx100+redhat linux9.0的真正古董级机器上也能流畅的运行,很不错。

在linux下使用前需要改变这个软件的权限:chmod a+x MilyQQ (赋与所有用户对这个软件的可执行权限)

我感觉这个软件的主要使用者还是经常使用linux控制台的人,比如像我,因为电脑太老,只能使用linux的控制台。而经常使用windows图形界面和linux图形界面的人,估计都不大会使用这个软件。

本地下载MilyQQ3.0:

附件:MilyQQ3.0.zip,316958 bytes

原创地下载MilyQQ3.0:

附件:MilyQQ3.0.zip,316958 bytes

用libstdc++.so.5冒充libstdc++.so.6欺骗mysql4.1.21

昨天在我的486+redhat linux9.0的老机上装了一个mysql4.1.0的客户端,不想连到远程数据库时,一执行use dbname;程序就会退出,报告什么sem* fault错误;

今天下载了一个mysql-standard-4.1.22-pc-linux-gnu-i686-icc-glibc23.tar.gz,解压到/usr/local,作好链接什么的,一执行mysql命令,报告缺少/usr/lib/libstdc++.so.6文件。查了一下,redhat linux9.0配的rpm包是libstdc++-3.2.2-5.i386.rpm,而不是有/usr/lib/libstdc++.so.6的libstdc++-3.4(好像是这样的)。不想去下载源码在这么老的机器上编译。于是,试着用命令: ln -s /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.6用libstdc++.so.5冒充libstdc++.so.6欺骗mysql4.1.21,结果执行mysql -hhostname -uusername -p竟然连接成功了。

不过不知道这种欺骗手段有没有什么负作用呢?

linux下的换行符号引起Resin3的struts-config.xml解析报错

由于linux和windows的换行符不一致,有时在这种系统间的文件交换就会出现问题。我就碰到这样的问题。

本来应该是这样的Struts-config.xml内容:


        <action

            attribute="loginForm"

            input="/login.jsp"

            name="loginForm"

            path="/loginAction"

            type="com.learndiary.website.action.account.LoginAction">

            <forward name="success" path="/loginSuccess.jsp" />

            <forward name="failure" path="/login.jsp" />

        </action>

可能是从windows转到linux下变成了这样:


        <action^M^M

            attribute="loginForm"^M^M

            input="/login.jsp"^M^M

            name="loginForm"^M^M

            path="/loginAction"^M^M

            type="com.learndiary.website.action.account.LoginAction">^M^M

            <forward name="success" path="/loginSuccess.jsp" />^M^M

            <forward name="failure" path="/login.jsp" />^M^M

        </action>

这在本地的Tomcat5和空间原来的Resin2下都没有问题,但是当空间改为Resin3后,每次重新启动应用就报错:


The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".

...

但是奇怪的是,应用启动后的工作看起来还是正常的。

下面附的是相关的文字:(转自:http://www.real-blog.com/linux-bsd-notes/67

Unix 及 Windows 文字檔轉換

大家如果試過在 Linux 及 Windows 文字檔分享的話,會發現文字檔的 “換行” 不一樣。在 Windows 用記事本開啟 Unix 文字檔時,文件不會開新行,需要使用支援 Unix 格式的文字編輯器才可看到分行;而在 Linux 開啟 Windows 的文字檔時,在每一行最後會有字元 Ctrl-m (^M)。以下是使用 Perl 在 Linux 下將文字檔轉換的方法:

Windows 格式 -> Unix 格式

perl -p -e ’s/\r$//’ < winfile.txt > unixfile.txt

Unix 格式 -> Windows 格式

perl -p -e ’s/\n/\r\n/’ < unixfile.txt > winfile.txt

February 13, 2006 · Linux / BSD 筆記, Windows 筆記 ·

1 Comment »

   1.

      UNIX WINDOWS MAC三者的回车都不一样,好像是:windows是0×0d 0×0a

      UNIX是0×0d MAC是0×0a吧。记不太清楚了。大体上是这样的。

      Comment by 数据恢复 — April 6, 2006 @