分类目录归档:linux

在mac下制作linux启动U盘

先通过diskutil确认U盘的设备块

% diskutil list

/dev/disk0
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *251.0 GB   disk0
1:                        EFI EFI                     209.7 MB   disk0s1
2:                  Apple_HFS Mac                     57.5 GB    disk0s2
3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
4:                  Apple_HFS Data                    192.5 GB   disk0s4
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *16.4 GB    disk1
1:                        EFI EFI                     209.7 MB   disk1s1
2:                  Apple_HFS Untitled                16.0 GB    disk1s2

上面显示的是我本机的磁盘设备,disk0是硬盘,disk1是U盘设备。

在通过dd命令写U盘的时候需要unmount,注意不能在finder里推出U盘,那样的话整个设备块也卸载了。

 % diskutil unmountDisk /dev/disk1
 Unmount of all volumes on disk1 was successful

现在可以把ISO文件写入U盘了

% sudo dd if=/data/ubuntu-13.10-server-amd64.iso of=/dev/disk1 bs=1024

阿里云vps上mysql挂掉的解决办法

用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知。之前没太追究,重新启动了mysql解决的。今天上午又收到短信,已经第三次了。

查了一下日志,三次基本都是一样的:

130728  6:50:14 [Note] Plugin 'FEDERATED' is disabled.
130728  6:50:14 InnoDB: The InnoDB memory heap is disabled
130728  6:50:14 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130728  6:50:14 InnoDB: Compressed tables use zlib 1.2.3.4
130728  6:50:14 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130728  6:50:14 InnoDB: Completed initialization of buffer pool
130728  6:50:14 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130728  6:50:14 [ERROR] Plugin 'InnoDB' init function returned error.
130728  6:50:14 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130728  6:50:14 [ERROR] Unknown/unsupported storage engine: InnoDB
130728  6:50:14 [ERROR] Aborting
130728  6:50:14 [Note] /usr/sbin/mysqld: Shutdown complete

解决方法:
1) 在 /etc/mysql/my.cnf 的 mysqld 下增加下面一句:

innodb_buffer_pool_size = 64M

还要设置一下swap分区,因为我的vps是没有swap分区的,通过fdisk -l1mount 看不到swap的信息,需要手动添加一下。

2) 添加swap分区的步骤:

2.1) dd if=/dev/zero of=/swapfile bs=1M count=1024
2.2) mkswap /swapfile
2.3) swapon /swapfile
2.4) 添加这行: /swapfile swap swap defaults 0 0 到 /etc/fstab

目前已经设置了swap分区,并重启了mysql,后续观察一下看看还会不会出现吧。

参考:http://stackoverflow.com/questions/10284532/amazon-ec2-mysql-aborting-start-because-innodb-mmap-x-bytes-failed-errno-12

补充,经过近2个月观察,没再发生down掉的情况。

mysql忘记root密码的恢复方式

1) 先停止mysql进程

2) 设置初始文件,内容如下

UPDATE mysql.user SET Password=PASSWORD('newPassword') WHERE User='root';
FLUSH PRIVILEGES;

3) 重启动 mysql

$ mysqld_safe --init-file=/tmp/cure &

注,在某些服务器上,启动mysql时,不能在bin目录下执行 ./mysqld_safe 启动不成功,而要在上级目录下
$ ./bin/mysqld_safe --init-file=/tmp/cure &

ubuntu下mysql开机启动的问题

ubuntu下安装mysql后发现默认开机会启动,尝试通过sysv-rc-conf命令将mysql开机启动取消,但并不生效。看过了在/etc/rc2.d/ 下mysql脚本是以K开头的(S开头表示start,改成其他则不会被启动;K表示kill),是正常的,很奇怪。

搜了一下,原来mysql同时定义了upstart-job/etc/init/mysql.conf 里面定义了 start on levels;要想开机不启动的话,需要修改这个启动级别。

修改 /etc/init/mysql.conf 里的内容,start on  runlevel [2345] 将里面的2去掉

有关upstart:
http://askubuntu.com/questions/19320/whats-the-recommend-way-to-enable-disable-services

linux下保留网站flash视频的方法

之前从commandlinefu上看到过这样的脚本,再说一下过程:

1)找到 plugin-co 进程的 pid 和 fd

$ lsof -n | grep deleted
......
plugin-co 2253  hongjiang   22u      REG                8,1   553608    2097199 /tmp/FlashXXRNz5bo (deleted)
plugin-co 2253  hongjiang   24r      REG                8,1  1230967    2097200 /tmp/FlashXXQYyZ2Q (deleted)

其实flash文件也会有规律的命名为 FlashXX 可以 lsof -n | grep /tmp/FlashXX

2) 将 /proc下该进程的句柄拷贝到指定路径

$ cp /proc/2253/fd/22   /tmp/song

3) 播放

$ mplayer /tmp/song

lsof查看进程在使用的已删除的文件

有时会遇到这种情况,当一个进程正在向一个文件写数据时,该文件的目录可能被移动,或该文件已被其他进程删除。
lsof +L1 可以查看那些在访问的已被删除的文件

lsof +L1 shows you all open files that have a link count less than 1, often indicative of a cracker trying to hide something

hongjiang@whj ~ % sudo lsof +L1
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NLINK    NODE NAME
mysqld  22070 mysql    4u   REG  202,1        0     0 1048935 /tmp/ibfwFj0I (deleted)
mysqld  22070 mysql    5u   REG  202,1        0     0 1048937 /tmp/ibpUnKvR (deleted)
mysqld  22070 mysql    6u   REG  202,1        0     0 1048942 /tmp/ibXYbb1Z (deleted)

这个参数不好记,也可以用 lsof -n | grep deleted 来查看。

高版本的sort支持–parallel选项

sort 在对大文件排序时很慢,8.11版本(遗憾我的xubuntu11.10还是8.5) 已经支持了 –parallel 并行运算。

这里也有一些介绍如何用sort做并行排序的方法:
http://linuxwebdev.blogspot.com/2009/02/howto-simple-parallel-sort-in-linux.html
http://bashcurescancer.com/sorting-large-files-faster-with-a-shell-script.html
http://stackoverflow.com/questions/930044/why-unix-sort-command-could-sort-a-very-large-file

commandlinefu上还看到可以设置buffersize,可以设置缓存大一些,这在大内存机器上应该有利,不知道默认情况这个buffer大小是多少。

补充:看了一下刚发布的 ubuntu12.04 beta版,里面的coreutils版本是8.13,下载了源码,sort.c 里面是有parallel选项的。
看里面的注释:

/* 
Heuristic(启发式的) value for the number of lines for which it is worth creating
a subthread, during an internal merge sort(内部是归并排序).  I.e., it is a small number of "average" lines for which sorting via two threads is faster than 
sorting via one on an "average" system.  On a dual-core 2.0 GHz i686
system with 3GB of RAM and 2MB of L2 cache, a file containing 128K
lines of gensort -a output is sorted slightly faster with --parallel=2  than with --parallel=1.  By contrast, using --parallel=1 is about 10%
faster than using --parallel=2 with a 64K-line input.  
*/

注意里面说的,128k行的用 parallel=2parallel=1 略微快一些,但64k行的用 parallel=1parallel=2快10% 我还没有测试过。需要对比一下才好说。

ubuntu下修改屏幕亮度

快捷键 Fn+Home/End 从最亮(15)往下调节时,直接降到12,跳过了中间的14,13,为了能更精确的调节屏幕亮度google了一番;自定义亮度的有效方法是:

$ echo 13 | sudo tee /sys/class/backlight/acpi_video0/brightness

再谈linux下随机数的产生

在创建临时账号初始密码时或许有用

1) 使用md5sum对已有数据加密产生

$ date +”%N” | md5sum

2) 通过/dev/urandom

$ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32}; echo
$ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6; echo 
$ tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
$ dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
$ strings /dev/urandom | grep -o "[0-9]" | head -n 30 | tr -d '\n'; echo

3) 使用SHA对已有数据加密产生

$ date +%s | sha256sum | base64 | head -c 32 ; echo   

4) 使用 openssl

$ openssl rand -base64 32 

相关阅读:shell里产生随机数的几种方式 ,用date的纳秒做随机数不严禁

另外推荐一篇关于随机数拖慢应用响应的文章,可以更好的了解一下linux的熵池。