[FreeBSD]添加用户提示用户已存在,但又无法删除该用户的解决办法
使用以下脚本帮同事开ssh权限,开通之后无法登陆。
- #!/usr/bin/expect -f
- set loginuser "roger"
- #set loginpass ""
- set ip [lindex $argv 0]
- set user [lindex $argv 1]
- if { $ip == "" || $user == ""} {
- puts "you must enter ip and username,exit"
- exit
- }
- spawn ssh -p 32200 $loginuser@192.168.1.$ip
- expect {
- "*no)?*" { send "yes\r" }
- "*$*" { send "\r" }
- }
- expect "*$*" { send "su root\r" }
- expect "*Password:*" { send "testpwd\r" }
- expect "*#*" { send "/usr/sbin/pw adduser $user -g wheel -m\r" }
- expect "*#*" { send "cd /home/$user\r" }
- expect "*#*" { send "mkdir .ssh\r" }
- expect "*#*" { send "chown -R $user .ssh\r" }
- expect "*#*" { send "chmod 751 .ssh\r" }
- expect "*#*" { send "cd .ssh\r" }
- expect "*#*" { send "fetch http://192.168.1.182/ca/Identity_$user.pub\r" }
- if { $user == "cc" || $user == "vv"} {
- expect "*#*" { send "mv Identity_$user.pub authorized_keys\r" }
- } else {
- expect "*#*" { send "ssh-keygen -i -f Identity_$user.pub >> authorized_keys\r" }
- }
- expect "*#*" { send "chmod 644 authorized_keys\r" }
- expect "*#*" { send "/etc/rc.d/sshd restart\r" }
- expect "*#*" { send "exit\r" }
- expect "*$*" { send "exit\r" }
- interact
- exit
登陆服务器执行:
阅读全文 | 发表评论 ( None 篇评论 )
Openssl安装过程
- roger@ubuntu:~# mv /usr/bin/openssl /usr/bin/openssl.OFF
- roger@ubuntu:~# mv /usr/include/openssl /usr/include/openssl.OFF
- roger@ubuntu:~# rm -f /usr/lib/libssl.so
- roger@ubuntu:~# mv /usr/bin/openssl /usr/bin/openssl.OFF
- roger@ubuntu:~# mv /usr/local/lib/libssl.so /usr/local/lib/libssl.so.OFF
- roger@ubuntu:~# mv /usr/local/lib/libcrypto.so /usr/local/lib/libcrypto.so.OFF
- roger@ubuntu:~# mv /usr/local/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so.1.0.0.OFF
- roger@ubuntu:~# cd /home/roger/soft/
- roger@ubuntu:~# tar -zxvf openssl-1.0.0e.tar.gz
- roger@ubuntu:~# cd openssl-1.0.0e
- roger@ubuntu:~# ./config shared zlib enable-md2
- roger@ubuntu:~# make
- roger@ubuntu:~# make install
- roger@ubuntu:~# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
- roger@ubuntu:~# ln -s /usr/local/ssl/include/openssl /usr/include/openssl
- roger@ubuntu:~# ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib/libssl.so
- roger@ubuntu:~# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so
- roger@ubuntu:~# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so.1.0.0
- roger@ubuntu:~# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
- roger@ubuntu:~# ldconfig
阅读全文 | 发表评论 ( 2 篇评论 )
FreeBSD下expect批量配置hadoop环境
expect脚本
- #!/usr/bin/expect -f
- set loginuser "roger"
- #set loginpass ""
- #set ipaddr [lrange $argv 0 0]
- foreach IP {170 171 172} {
- spawn ssh -p 32200 $loginuser@192.168.1.$IP
- expect {
- "*no)?*" { send "yes\r" }
- "*$*" { send "\r" }
- }
- send "su root\r"
- expect "*Password:*" { send "password" }
- #expect "*Password:*" { send "/etc/rc.d/ipfw stop\r" }
- #expect "*#*" { send "pkg_add http://mirrors.163.com/FreeBSD/ports/amd64/packages-8.2-release/Latest/openjdk7.tbz\r" }
- #expect "*Password:*" { send "/etc/rc.d/ipfw start\r" }
- expect "*#*" { send "/usr/sbin/pw adduser roger -m\r" }
- expect "*#*" { send "passwd roger\r" }
- expect "*Password:*" { send "password" }
- expect "*Password:*" { send "password" }
- expect "*#*" { send "mkdir /home/roger/.ssh\r" }
- expect "*#*" { send "cd /home/roger\r" }
- expect "*#*" { send "fetch http://192.168.1.1/ca/ssh_roger.tar.gz\r" }
- expect "*#*" { send "tar -zxvf ssh_roger.tar.gz \r" }
- expect "*#*" { send "chown -R roger:roger .ssh\r" }
- expect "*#*" { send "chmod -R 755 .ssh\r" }
- expect "*#*" { send "cd .ssh\r" }
- expect "*#*" { send "chmod 600 authorized_keys\r" }
- expect "*#*" { send "chmod 600 id_rsa\r" }
- expect "*#*" { send "rm /home/roger/ssh_roger.tar.gz\r" }
- expect "*#*" { send "/etc/rc.d/sshd restart\r" }
- expect "*#*" { send "cd /usr/local\r" }
- expect "*#*" { send "fetch http://192.168.1.1/ca/hadoop_config.tar.gz\r" }
- expect "*#*" { send "tar -zxvf hadoop_config.tar.gz\r" }
- expect "*#*" { send "chown -R roger:roger hadoop\r" }
- expect "*#*" { send "chmod 777 /usr/local/hadoop/logs\r" }
- expect "*#*" { send "rm /usr/local/hadoop_config.tar.gz\r" }
- expect "*#*" { send "mkdir /web/hadoop\r" }
- expect "*#*" { send "su roger\r" }
- expect "*$*" { send "ssh -p 32200 192.168.1.185\r" }
- expect {
- "*no)?*" { send "yes\r" }
- "*$*" { send "\r" }
- }
- expect "*$*" { send "exit\r" }
- expect "*#*" { send "exit\r" }
- set timeout 20
- expect "*$*" { send "exit\r" }
- }
- interact
- exit
阅读全文 | 发表评论 ( None 篇评论 )
SHELL编程[Bash编程手册]
============================== SHELL编程 ==============================
一、Shell语法
1.1、变量声明
1.2、数组声明和使用
1.3、特殊的变量
1.4、运算和运算符
1.4.1、整数运算符
1.5、流程语句
1.5.1、if 语句
1.5.2、case语句
1.5.3、select 语句
1.6、循环语句
1.6.1、for语句
1.6.2、while 语句
1.6.3、breake 和continue
1.6.4、shift
二、函数
三、shell程序调试
四、信号
五、bash中常用的命令
=============== 一、Shell语法 ===============
阅读全文 | 发表评论 ( 2 篇评论 )
iptables基础知识+常用配置
我们来配置一个filter表的防火墙.
(1)查看本机关于IPTABLES的设置情况
- [root@tp ~]# iptables -L -n
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- Chain RH-Firewall-1-INPUT (0 references)
- target prot opt source destination
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
- ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
- ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
- REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
阅读全文 | 发表评论 ( 1 篇评论 )
ubuntu系统&内核升级
163镜像网站:http://mirrors.163.com/.help/ubuntu.html
下载要升级版本的source.list到/etc/apt/source.list,然后执行以下命令:
- 1. sudo apt-get update
- 2. sudo apt-get upgrade
- 3. sudo apt-get install update-manager-core
- 4. sudo do-release-upgrade
【注:在执行apt-get upgrade的时候,如果出现”无法立即对util-linux 进行配置”,则添加参数 apt-get upgrade -o APT::Immediate-Configure=false】
内核升级
http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.38-natty/
查看已经安装的linux内核
- dpkg --get-selections|grep linux
下载并依次安装:
- dpkg -i linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb
- dpkg -i linux-headers-2.6.38-020638-generic_2.6.38-020638.201103151303_amd64.deb
- dpkg -i linux-image-2.6.38-020638-generic_2.6.38-020638.201103151303_amd64.deb
安装c、c++编译器
- apt-get install build-essential
阅读全文 | 发表评论 ( 2 篇评论 )
mysql数据库权限详细解释
一.权限表
mysql数据库中的3个权限表:user 、db、 host
权限表的存取过程是:
1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;
2) 通过权限验证,进行权限分配时,按照user?db?tables_priv?columns_priv的顺序进行分配。即先检查全局权限表 user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
二.MySQL各种权限(共27个)
(以下操作都是以root身份登陆进行grant授权,以p1@localhost身份登陆执行各种命令。)
1. usage
连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。
- mysql> grant usage on *.* to ‘p1′@’localhost’ identified by ‘123′;
该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。
阅读全文 | 发表评论 ( None 篇评论 )
Linux(Ubuntu)环境MYSQL->master/slave主从同步设置以及注意事项
master(192.168.1.2)环境: Linux ubuntu 2.6.28-11-server + mysql 5.1.44, x86_64
slave(192.168.1.3)环境:Linux ubuntu 2.6.27-7-server + mysql 5.1.44, for pc-linux-gnu (i686)
两台机器mysql的根目录均为:/usr/local/mysql 数据目录为:/usr/local/mysql/var
===========================主库(192.168.1.2)操作==============================
1、 修改my.cnf
- roger@ubuntu:~#vim /etc/my.cnf
- [mysqld]
- server-id = 1
- og-bin=mysql-bin
- binlog_format=mixed (保持主从库的日志格式一致,如果不一致可能会不成功)
注:
阅读全文 | 发表评论 ( None 篇评论 )
Ubuntu终端下修改默认编辑器为vim和时区时间
Ubuntu终端下默认编辑器为nano,比如crontab -e就会打开nano,很不习惯,想修改为vim:
$ sudo update-alternatives –config editor
选择第4项vim.basic就可以了。
或者 执行:”echo export EDITOR=/usr/bin/vim >> ~/.bashrc”
修改时区:
1、dpkg-reconfigure tzdata 选择 Asia->Chongqing
2、ntpdate 210.72.145.44 (世界时间服务器)
3、hwclock -w 修改bios时间
阅读全文 | 发表评论 ( 6 篇评论 )
mysql函数大全
============================== 目录 ==============================
- 字符串函数
- ASCII(str): 返回字符串str的第一个字符的ASCII值(str是空串时返回0)
- ORD(str) : 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。如果是一个多字节字符,以格式返回((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]
- CONV(N,from_base,to_base) : 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则作无符号数,CONV以64位点精度工作)
- BIN(N) : 把N转为二进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,2))
- OCT(N) : 把N转为八进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,8))
- HEX(N) : 把N转为十六进制并以字串返回(N是BIGINT数字,等价于CONV(N,10,16))
- CHAR(N,...) : 返回由参数N,...对应的ASCII代码字符组成的一个字串(参数是N,...是数字序列,NULL值被跳过)
- CONCAT(str1,str2,...) : 把参数连成一个长字符串并返回(任何参数是NULL时返回NULL)
- LENGTH(str) OCTET_LENGTH(str) CHAR_LENGTH(str) CHARACTER_LENGTH(str) : 返回字符串str的长度(对于多字节字符CHAR_LENGTH仅计算一次)
- LOCATE(substr,str) POSITION(substr IN str) : 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)
- LOCATE(substr,str,pos) : 返回字符串substr在字符串str的第pos个位置起第一次出现的位置(str不包含substr时返回0)
- INSTR(str,substr) : 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)
- LPAD(str,len,padstr) : 用字符串padstr填补str左端直到字串长度为len并返回
- RPAD(str,len,padstr) : 用字符串padstr填补str右端直到字串长度为len并返回
- LEFT(str,len) : 返回字符串str的左端len个字符
- RIGHT(str,len) : 返回字符串str的右端len个字符
- SUBSTRING(str,pos,len) SUBSTRING(str FROM pos FOR len) MID(str,pos,len) : 返回字符串str的位置pos起len个字符(使用FROM的丑陋语法是ANSI SQL92标准)
- SUBSTRING(str,pos) SUBSTRING(str FROM pos) : 返回字符串str的位置pos起的一个子串
- SUBSTRING_INDEX(str,delim,count) : 返回从字符串str的第count个出现的分隔符delim之后的子串(count为正数时返回左端,否则返回右端子串)
- LTRIM(str) : 返回删除了左空格的字符串str
- RTRIM(str) : 返回删除了右空格的字符串str
- TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) : 返回前缀或后缀remstr被删除了的字符串str(位置参数默认BOTH,remstr默认值为空格)
- SOUNDEX(str) : 返回str的一个同音字符串(听起来“大致相同”字符串有相同的同音字符串,非数字字母字符被忽略,在A-Z外的字母被当作元音)
- SPACE(N) : 返回由N个空格字符组成的一个字符串
- REPLACE(str,from_str,to_str) : 用字符串to_str替换字符串str中的子串from_str并返回
- REPEAT(str,count) : 返回由count个字符串str连成的一个字符串(任何参数为NULL时返回NULL,count<=0时返回一个空字符串)
- REVERSE(str) : 颠倒字符串str的字符顺序并返回
- INSERT(str,pos,len,newstr) : 把字符串str由位置pos起len个字符长的子串替换为字符串newstr并返回
- ELT(N,str1,str2,str3,...) : 返回第N个字符串(N小于1或大于参数个数返回NULL)
- FIELD(str,str1,str2,str3,...) : 返回str等于其后的第N个字符串的序号(如果str没找到返回0)
- FIND_IN_SET(str,strlist) : 返回str在字符串集strlist中的序号(任何参数是NULL则返回NULL,如果str没找到返回0,参数1包含","时工作异常)
- MAKE_SET(bits,str1,str2,...) : 把参数1的数字转为二进制,假如某个位置的二进制位等于1,对应位置的字串选入字串集并返回(NULL串不添加到结果中)
- EXPORT_SET(bits,on,off,[separator,[number_of_bits]]) : 按bits排列字符串集,只有当位等于1时插入字串on,否则插入off(separator默认值",",number_of_bits参数使用时长度不足补0而过长截断)
- LCASE(str) LOWER(str) : 返回小写的字符串str
- UCASE(str) UPPER(str) : 返回大写的字符串str
- LOAD_FILE(file_name) : 读入文件并且作为一个字符串返回文件内容(文件无法找到,路径不完整,没有权限,长度大于max_allowed_packet会返回NULL)
- 数学函数
- ABS(N) : 返回N的绝对值
- SIGN(N) : 返回参数的符号(为-1、0或1)
- MOD(N,M) : 取模运算,返回N被M除的余数(同%操作符)
- FLOOR(N) : 返回不大于N的最大整数值
- CEILING(N) : 返回不小于N的最小整数值
- ROUND(N,D) : 返回N的四舍五入值,保留D位小数(D的默认值为0)
- EXP(N) : 返回值e的N次方(自然对数的底)
- LOG(N) : 返回N的自然对数
- LOG10(N) : 返回N以10为底的对数
- POW(X,Y) POWER(X,Y) : 返回值X的Y次幂
- SQRT(N) : 返回非负数N的平方根
- PI() : 返回圆周率
- COS(N) : 返回N的余弦值
- SIN(N) : 返回N的正弦值
- TAN(N) : 返回N的正切值
- ACOS(N) : 返回N反余弦(N是余弦值,在-1到1的范围,否则返回NULL)
- ASIN(N) : 返回N反正弦值
- ATAN(N) : 返回N的反正切值
- ATAN2(X,Y) : 返回2个变量X和Y的反正切(类似Y/X的反正切,符号决定象限)
- COT(N) : 返回X的余切
- RAND() RAND(N) : 返回在范围0到1.0内的随机浮点值(可以使用数字N作为初始值)
- DEGREES(N) : 把N从弧度变换为角度并返回
- RADIANS(N) : 把N从角度变换为弧度并返回
- TRUNCATE(N,D) : 保留数字N的D位小数并返回
- LEAST(X,Y,...) : 返回最小值(如果返回值被用在整数(实数或大小敏感字串)上下文或所有参数都是整数(实数或大小敏感字串)则他们作为整数(实数或大小敏感字串)比较,否则按忽略大小写的字符串被比较)
- GREATEST(X,Y,...) : 返回最大值(其余同LEAST())
- 日期和时间
- DAYOFWEEK(date) : 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
- WEEKDAY(date) : 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
- DAYOFMONTH(date) : 返回date是一月中的第几日(在1到31范围内)
- DAYOFYEAR(date) : 返回date是一年中的第几日(在1到366范围内)
- MONTH(date) : 返回date中的月份数值
- DAYNAME(date) : 返回date是星期几(按英文名返回)
- MONTHNAME(date) : 返回date是几月(按英文名返回)
- QUARTER(date) : 返回date是一年的第几个季度
- WEEK(date,first) : 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)
- YEAR(date) : 返回date的年份(范围在1000到9999)
- HOUR(time) : 返回time的小时数(范围是0到23)
- MINUTE(time) : 返回time的分钟数(范围是0到59)
- SECOND(time) : 返回time的秒数(范围是0到59)
- PERIOD_ADD(P,N) : 增加N个月到时期P并返回(P的格式YYMM或YYYYMM)
- PERIOD_DIFF(P1,P2) : 返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
- DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) : 对日期时间进行加减法运算
- TO_DAYS(date) : 返回日期date是西元0年至今多少天(不计算1582年以前)
- FROM_DAYS(N) : 给出西元0年至今多少天返回DATE值(不计算1582年以前)
- DATE_FORMAT(date,format) : 根据format字符串格式化date值
- TIME_FORMAT(time,format) : 和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)
- CURDATE() CURRENT_DATE() : 以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字)
- CURTIME() CURRENT_TIME() : 以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字)
- NOW() SYSDATE() CURRENT_TIMESTAMP() : 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字)
- UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) : 返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
- FROM_UNIXTIME(unix_timestamp) : 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字)
- FROM_UNIXTIME(unix_timestamp,format) : 以format字符串格式返回时间戳的值
- SEC_TO_TIME(seconds) : 以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字)
- TIME_TO_SEC(time) : 返回time值有多少秒
阅读全文 | 发表评论 ( 1 篇评论 )