分类目录归档:Linux

Linux相关知识

shell中$0,$?,$!,$$,$*,$#等特殊变量说明及用法

闲来无事看了下关于<>,看到书上说shell可以获取程序的返回值,故百度一下(google最近太不稳定了),发现shell里还有很多特殊变量没有记住,还是写篇博客记录下,以后也方便查找

变量说明:

$$
Shell本身的PID(进程ID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值),可以得到之前运行程序的返回值,可以判断程序是否运行正确(一般程序运行正确返回0)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@
所有参数列表。如”$@”用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

我们先写一个简单的脚本,执行以后再解释各个变量的意义
# touch variable
# vi variable
脚本内容如下:
#!/bin/sh
echo “number:$#”
echo “scname:$0”
echo “first :$1”
echo “second:$2”
echo “argume:$@”
保存退出
赋予脚本执行权限
# chmod +x variable
执行脚本
# ./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$?

树莓派raspbian系统下USB无线网配置

最近准备用树莓派做个 wifi小车,为了驱动问题 专门还买了 tp-link的usb无线网卡,没想到买回来就是驱动不了。。。废话就不说了直接上解决办法了

没想到买的是TP-LINK WN725N V2无线网卡,网上查找了一下Raspberry Pi(树莓派)是支持这个网卡v1版本的,没想到他v2版本芯片升级了。

最开始网上搜,需要自己编译,结果慢慢发现直接下载一个 .ko的文件就直接可以用。但这个 8188eu.ko还要分系统的版本。我是装的目前为止最新的 raspbian系统,用的就是 8188eu.ko & firmware (Compiled in 2014-01) 继续阅读

Linux下进程前后台的切换(fg、bg、jobs)

假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
如果没有此提示,则用 jobs 命令查看任务:
#jobs
[1]+ suspended /root/bin/rsync.sh &
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了。 继续阅读

提高开发效率的vim常用命令

基本命令

:e filename Open filename for edition
:w Save file
:q Exit Vim
:q! Quit without saving
😡 Write file (if changes has been made) and exit
:sav filename Saves file as filename
. Repeats the last change made in normal mode
5. Repeats 5 times the last change made in normal mode

继续阅读

debian下sudo的配置和使用

最近想使用PHP输入 命令行,控制服务器。立马就想到了使用 sudo来配置权限。
debian默认情况下已经装了sudo,如果要编辑sudo权限需要用root来操作,或者 输入命令
#sudo visudo

这里 假设要用PHP脚本控制服务器关机和重启,apache,php都是使用apt包安装的。这种情况下 php执行命令的用户默认会是 www-data ,所以编辑权限可以直接在最后一行添加

www-data ALL=NOPASSWD:/sbin/shutdown,/sbin/reboot (如果多个命令用逗号隔开)
(www-data)第一个是允许使用用户,如果前面加 % 则是允许的用户组。
(ALL) 允许登录的所有主机,包括本地和远程
(NOPASSWD) 这里是不用输入密码
(/sbin/shutdown,/sbin/reboot) 这里就是允许的命令了,如果是所有命令的话 直接 ALL 就行了

visudo跟vi又不太一样,退出的话 可以使用 Ctrl+x ,然后会提示 是否保存 输入 y,然后回车。。。

就可以使用 PHP执行这些命令了。。。

<?php
    system("/usr/bin/sudo reboot");  //重启
?>

rsync常见错误及解决办法

问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

问题二:
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。

问题三:
@ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题四:
password file must not be other-accessible
continuing without password file
Password:
原因:
这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。

问题六:
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七:
rsync: chown “” failed: Invalid argument (22)
原因:
权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题八:
@ERROR: daemon security issue — contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:
同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。

rsync同步备份使用方法

最近在玩树莓派,想直接在树莓派上备份东西。基本上rsync同步备份已经搞定,接下来还有 树莓派外接硬盘(估计整个有源的usb hub就行),网站实时备份。
首先在本地机器上配置 rsync服务器端,linux大多数都已经默认装了rsync。

centos和redhat这样安装
yum install rsync

ubuntu和debian这样安装
sudo apt-get install rsync 继续阅读

树莓派安装mjpg-streamer视频监控

在树莓派上有几种视频监控软件
fswebcam
motion
mjpg-streamer

上面两种都相对简单,唯独mjpg-streamer整了半天。所以记录下安装过程

首先安装所需软件
sudo apt-get install subversion
sudo apt-get install libv4l-dev
sudo apt-get install libjpeg8-dev

svn下载软件到本地
svn co ttps://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
打开mjpg-streamer目录
cd mjpg-streamer/mjpg-streamer
编译安装
make USE_LIBV4L2=true clean all
make DESTDIR=/usr install

编译时可能会报 i: init_VideoIn failed 错误
错误原因:市面上大部分摄像头都是支持YUV的,而不是JPEG的。mjpg-stream支持JPEG和YUV两种格式。
1、打开以下文件:
sudo vi mjpg-streamer/plugins/input_uvc/input_uvc.c
2、查找 V4L2_PIX_FMT_MJPEG 大概第三页
将一行中的: int width = 640, height = 480, fps = -1, format = V4L2_PIX_FMT_MJPEG, i;
V4L2_PIX_FMT_MJPEG 改成 V4L2_PIX_FMT_YUYV
需要重新编译才会有效。

运行
mjpg_streamer -i “/usr/lib/input_uvc.so -d /dev/video0  -r 320×240 -f 30” -o “/usr/lib/output_http.so -p 8090 -w ./www”

这里很关键,好像视频大小不能大于 320×240 ,前几次设置了 640*480 ,能运行,但打开web无图像。经过测试 只要设置到 320×240 就可以

很详细的curl命令使用大全

可以看作命令行浏览器

1、开启gzip请求
curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte

2、监控网页的响应时间
curl -o /dev/null -s -w “time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n” “http://www.kklinux.com”

3. 监控站点可用性
curl -o /dev/null -s -w %{http_code} “http://www.kklinux.com” 继续阅读

debian或ubuntu修改时区

买的VPS默认的时区不是中国,时间有些错误,终于找到一个最简单的办法。。。

ubuntu或debian下面如果默认不是中国时区的话,我们就需要手动配置,选择标准北京时间所在的时区,如Asia/Shanghai,Aisa/Chongqing 或 Asia/Hongkong
ubuntu或debian使用下面的命令手动设置服务器时区

在配置窗口中,我们选择Aisa/Chongqing时区。
这只是权宜之计,还需要执行下面的操作 :
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Aisa/Chongqing /etc/localtime
这样的操作,可以避免系统重启后,时间又变了的状况。
以后每次开机,系统就会自动的把时区设为重庆时间。