[FreeBSD]添加用户提示用户已存在,但又无法删除该用户的解决办法

Posted on 十月 20th, 2011 .

使用以下脚本帮同事开ssh权限,开通之后无法登陆。

  1. #!/usr/bin/expect -f
  2. set loginuser "roger"
  3. #set loginpass ""
  4. set ip [lindex $argv 0]
  5. set user [lindex $argv 1]
  6.  
  7. if { $ip == "" || $user == ""} {
  8.         puts "you must enter ip and username,exit"
  9.         exit
  10. }
  11.  
  12. spawn ssh -p 32200 $loginuser@192.168.1.$ip
  13. expect {
  14.         "*no)?*" { send "yes\r" }
  15.         "*$*" { send "\r" }
  16. }
  17. expect "*$*" { send "su root\r" }
  18. expect "*Password:*" { send "testpwd\r" }
  19. expect "*#*" { send "/usr/sbin/pw adduser $user -g wheel -m\r" }
  20. expect "*#*" { send "cd /home/$user\r" }
  21. expect "*#*" { send "mkdir .ssh\r" }
  22. expect "*#*" { send "chown -R $user .ssh\r" }
  23. expect "*#*" { send "chmod 751 .ssh\r" }
  24. expect "*#*" { send "cd .ssh\r" }
  25. expect "*#*" { send "fetch http://192.168.1.182/ca/Identity_$user.pub\r" }
  26. if { $user == "cc" || $user == "vv"} {
  27.         expect "*#*" { send "mv Identity_$user.pub authorized_keys\r" }
  28. } else {
  29.         expect "*#*" { send "ssh-keygen -i -f Identity_$user.pub >> authorized_keys\r" }
  30. }
  31. expect "*#*" { send "chmod 644 authorized_keys\r" }
  32. expect "*#*" { send "/etc/rc.d/sshd restart\r" }
  33. expect "*#*" { send "exit\r" }
  34. expect "*$*" { send "exit\r" }
  35.  
  36. interact
  37. exit

登陆服务器执行:


阅读全文 | 发表评论 ( None 篇评论 )

Openssl安装过程

Posted on 十月 10th, 2011 .

  1. roger@ubuntu:~# mv /usr/bin/openssl /usr/bin/openssl.OFF
  2. roger@ubuntu:~# mv /usr/include/openssl /usr/include/openssl.OFF
  3. roger@ubuntu:~# rm -f /usr/lib/libssl.so
  4. roger@ubuntu:~# mv /usr/bin/openssl /usr/bin/openssl.OFF
  5. roger@ubuntu:~# mv /usr/local/lib/libssl.so /usr/local/lib/libssl.so.OFF
  6. roger@ubuntu:~# mv /usr/local/lib/libcrypto.so /usr/local/lib/libcrypto.so.OFF
  7. roger@ubuntu:~# mv /usr/local/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so.1.0.0.OFF
  8.  
  9. roger@ubuntu:~# cd /home/roger/soft/
  10. roger@ubuntu:~# tar -zxvf openssl-1.0.0e.tar.gz
  11. roger@ubuntu:~# cd openssl-1.0.0e
  12. roger@ubuntu:~# ./config shared zlib enable-md2
  13. roger@ubuntu:~# make
  14. roger@ubuntu:~# make install
  15. roger@ubuntu:~# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
  16. roger@ubuntu:~# ln -s /usr/local/ssl/include/openssl /usr/include/openssl
  17. roger@ubuntu:~# ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib/libssl.so
  18. roger@ubuntu:~# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so
  19. roger@ubuntu:~# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/lib/libcrypto.so.1.0.0
  20. roger@ubuntu:~# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
  21. roger@ubuntu:~# ldconfig

阅读全文 | 发表评论 ( 2 篇评论 )

FreeBSD下expect批量配置hadoop环境

Posted on 九月 15th, 2011 .

expect脚本

  1. #!/usr/bin/expect -f
  2. set loginuser "roger"
  3. #set loginpass ""
  4. #set ipaddr [lrange $argv 0 0]
  5.  
  6. foreach IP {170 171 172} {
  7.         spawn ssh -p 32200 $loginuser@192.168.1.$IP
  8.         expect {
  9.                 "*no)?*" { send "yes\r" }
  10.                 "*$*" { send "\r" }
  11.         }
  12.         send "su root\r"
  13.         expect "*Password:*" { send "password" }
  14.         #expect "*Password:*" { send "/etc/rc.d/ipfw stop\r" }
  15.         #expect "*#*" { send "pkg_add http://mirrors.163.com/FreeBSD/ports/amd64/packages-8.2-release/Latest/openjdk7.tbz\r" }
  16.         #expect "*Password:*" { send "/etc/rc.d/ipfw start\r" }
  17.         expect "*#*" { send "/usr/sbin/pw adduser roger -m\r" }
  18.         expect "*#*" { send "passwd roger\r" }
  19.         expect "*Password:*" { send "password" }
  20.         expect "*Password:*" { send "password" }
  21.         expect "*#*" { send "mkdir /home/roger/.ssh\r" }
  22.         expect "*#*" { send "cd /home/roger\r" }
  23.         expect "*#*" { send "fetch http://192.168.1.1/ca/ssh_roger.tar.gz\r" }
  24.         expect "*#*" { send "tar -zxvf ssh_roger.tar.gz \r" }
  25.         expect "*#*" { send "chown -R roger:roger .ssh\r" }
  26.         expect "*#*" { send "chmod -R 755 .ssh\r" }
  27.         expect "*#*" { send "cd .ssh\r" }
  28.         expect "*#*" { send "chmod 600 authorized_keys\r" }
  29.         expect "*#*" { send "chmod 600 id_rsa\r" }
  30.         expect "*#*" { send "rm /home/roger/ssh_roger.tar.gz\r" }
  31.         expect "*#*" { send "/etc/rc.d/sshd restart\r" }
  32.  
  33.         expect "*#*" { send "cd /usr/local\r" }
  34.         expect "*#*" { send "fetch http://192.168.1.1/ca/hadoop_config.tar.gz\r" }
  35.         expect "*#*" { send "tar -zxvf hadoop_config.tar.gz\r" }
  36.         expect "*#*" { send "chown -R roger:roger hadoop\r" }
  37.         expect "*#*" { send "chmod 777 /usr/local/hadoop/logs\r" }
  38.         expect "*#*" { send "rm /usr/local/hadoop_config.tar.gz\r" }
  39.  
  40.         expect "*#*" { send "mkdir /web/hadoop\r" }
  41.         expect "*#*" { send "su roger\r" }
  42.         expect "*$*" { send "ssh -p 32200 192.168.1.185\r" }
  43.         expect {
  44.                 "*no)?*" { send "yes\r" }
  45.                 "*$*" { send "\r" }
  46.         }
  47.         expect "*$*" { send "exit\r" }
  48.         expect "*#*" { send "exit\r" }
  49.         set timeout 20
  50.         expect "*$*" { send "exit\r" }
  51. }
  52.  
  53. interact
  54. exit

阅读全文 | 发表评论 ( None 篇评论 )

SHELL编程[Bash编程手册]

Posted on 八月 16th, 2011 .

============================== 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基础知识+常用配置

Posted on 七月 14th, 2011 .

我们来配置一个filter表的防火墙.

(1)查看本机关于IPTABLES的设置情况

  1. [root@tp ~]# iptables -L -n
  2. Chain INPUT (policy ACCEPT)
  3. target     prot opt source               destination       
  4. Chain FORWARD (policy ACCEPT)
  5. target     prot opt source               destination       
  6. Chain OUTPUT (policy ACCEPT)
  7. target     prot opt source               destination       
  8. Chain RH-Firewall-1-INPUT (0 references)
  9. target     prot opt source               destination       
  10. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0         
  11. ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
  12. ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0         
  13. ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0         
  14. ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
  15. ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
  16. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
  17. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
  18. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
  19. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:25
  20. REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的


阅读全文 | 发表评论 ( 1 篇评论 )

ubuntu系统&内核升级

Posted on 六月 19th, 2011 .

163镜像网站:http://mirrors.163.com/.help/ubuntu.html
下载要升级版本的source.list到/etc/apt/source.list,然后执行以下命令:

  1. 1. sudo apt-get update
  2. 2. sudo apt-get upgrade
  3. 3. sudo apt-get install update-manager-core
  4. 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内核

  1. dpkg --get-selections|grep linux

下载并依次安装:

  1. dpkg -i linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb
  2. dpkg -i linux-headers-2.6.38-020638-generic_2.6.38-020638.201103151303_amd64.deb
  3. dpkg -i linux-image-2.6.38-020638-generic_2.6.38-020638.201103151303_amd64.deb

安装c、c++编译器

  1. apt-get install build-essential

阅读全文 | 发表评论 ( 2 篇评论 )

mysql数据库权限详细解释

Posted on 一月 16th, 2011 .

一.权限表

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权限(默认授予)。

  1. mysql> grant usage on *.* top1′@’localhostidentified by123′;

该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。


阅读全文 | 发表评论 ( None 篇评论 )

Linux(Ubuntu)环境MYSQL->master/slave主从同步设置以及注意事项

Posted on 一月 16th, 2011 .

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

  1. roger@ubuntu:~#vim /etc/my.cnf
  2. [mysqld]
  3. server-id = 1
  4. og-bin=mysql-bin
  5. binlog_format=mixed (保持主从库的日志格式一致,如果不一致可能会不成功)

注:


阅读全文 | 发表评论 ( None 篇评论 )

Ubuntu终端下修改默认编辑器为vim和时区时间

Posted on 一月 12th, 2011 .

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函数大全

Posted on 十二月 22nd, 2010 .

============================== 目录 ==============================

  1. 字符串函数
  2.  
  3. ASCII(str): 返回字符串str的第一个字符的ASCII(str是空串时返回0)
  4. ORD(str) : 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。如果是一个多字节字符,以格式返回((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]
  5. CONV(N,from_base,to_base) : 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则作无符号数,CONV64位点精度工作)
  6. BIN(N) : 把N转为二进制值并以字串返回(NBIGINT数字,等价于CONV(N,10,2))
  7. OCT(N) : 把N转为八进制值并以字串返回(NBIGINT数字,等价于CONV(N,10,8))
  8. HEX(N) : 把N转为十六进制并以字串返回(NBIGINT数字,等价于CONV(N,10,16))
  9. CHAR(N,...) : 返回由参数N,...对应的ASCII代码字符组成的一个字串(参数是N,...是数字序列,NULL值被跳过)
  10. CONCAT(str1,str2,...) : 把参数连成一个长字符串并返回(任何参数是NULL时返回NULL)
  11. LENGTH(str)  OCTET_LENGTH(str)  CHAR_LENGTH(str)  CHARACTER_LENGTH(str) : 返回字符串str的长度(对于多字节字符CHAR_LENGTH仅计算一次)
  12. LOCATE(substr,str) POSITION(substr IN str) : 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)
  13. LOCATE(substr,str,pos) : 返回字符串substr在字符串str的第pos个位置起第一次出现的位置(str不包含substr时返回0)
  14. INSTR(str,substr) : 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)
  15. LPAD(str,len,padstr) : 用字符串padstr填补str左端直到字串长度为len并返回
  16. RPAD(str,len,padstr) : 用字符串padstr填补str右端直到字串长度为len并返回
  17. LEFT(str,len) : 返回字符串str的左端len个字符
  18. RIGHT(str,len) : 返回字符串str的右端len个字符
  19. SUBSTRING(str,pos,len) SUBSTRING(str FROM pos FOR len) MID(str,pos,len) : 返回字符串str的位置poslen个字符(使用FROM的丑陋语法是ANSI SQL92标准)
  20. SUBSTRING(str,pos) SUBSTRING(str FROM pos) : 返回字符串str的位置pos起的一个子串
  21. SUBSTRING_INDEX(str,delim,count) : 返回从字符串str的第count个出现的分隔符delim之后的子串(count为正数时返回左端,否则返回右端子串)
  22. LTRIM(str) : 返回删除了左空格的字符串str
  23. RTRIM(str) : 返回删除了右空格的字符串str
  24. TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) : 返回前缀或后缀remstr被删除了的字符串str(位置参数默认BOTH,remstr默认值为空格)
  25. SOUNDEX(str) : 返回str的一个同音字符串(听起来“大致相同”字符串有相同的同音字符串,非数字字母字符被忽略,在A-Z外的字母被当作元音)
  26. SPACE(N) : 返回由N个空格字符组成的一个字符串
  27. REPLACE(str,from_str,to_str) : 用字符串to_str替换字符串str中的子串from_str并返回
  28. REPEAT(str,count) : 返回由count个字符串str连成的一个字符串(任何参数为NULL时返回NULL,count<=0时返回一个空字符串)
  29. REVERSE(str) : 颠倒字符串str的字符顺序并返回
  30. INSERT(str,pos,len,newstr) : 把字符串str由位置poslen个字符长的子串替换为字符串newstr并返回
  31. ELT(N,str1,str2,str3,...) : 返回第N个字符串(N小于1或大于参数个数返回NULL)
  32. FIELD(str,str1,str2,str3,...) : 返回str等于其后的第N个字符串的序号(如果str没找到返回0)
  33. FIND_IN_SET(str,strlist) : 返回str在字符串集strlist中的序号(任何参数是NULL则返回NULL,如果str没找到返回0,参数1包含","时工作异常)
  34. MAKE_SET(bits,str1,str2,...) : 把参数1的数字转为二进制,假如某个位置的二进制位等于1,对应位置的字串选入字串集并返回(NULL串不添加到结果中)
  35. EXPORT_SET(bits,on,off,[separator,[number_of_bits]]) : 按bits排列字符串集,只有当位等于1时插入字串on,否则插入off(separator默认值",",number_of_bits参数使用时长度不足补0而过长截断)
  36. LCASE(str) LOWER(str) : 返回小写的字符串str
  37. UCASE(str) UPPER(str) : 返回大写的字符串str
  38. LOAD_FILE(file_name) : 读入文件并且作为一个字符串返回文件内容(文件无法找到,路径不完整,没有权限,长度大于max_allowed_packet会返回NULL)
  39.  
  40. 数学函数
  41.  
  42. ABS(N) : 返回N的绝对值
  43. SIGN(N) : 返回参数的符号(为-101)
  44. MOD(N,M)  : 取模运算,返回NM除的余数(同%操作符) 
  45. FLOOR(N) : 返回不大于N的最大整数值
  46. CEILING(N) : 返回不小于N的最小整数值
  47. ROUND(N,D) : 返回N的四舍五入值,保留D位小数(D的默认值为0)
  48. EXP(N) : 返回值eN次方(自然对数的底)
  49. LOG(N) : 返回N的自然对数
  50. LOG10(N) : 返回N10为底的对数
  51. POW(X,Y)  POWER(X,Y)  : 返回值XY次幂
  52. SQRT(N) : 返回非负数N的平方根
  53. PI() : 返回圆周率
  54. COS(N) : 返回N的余弦值
  55. SIN(N) : 返回N的正弦值
  56. TAN(N) : 返回N的正切值
  57. ACOS(N) : 返回N反余弦(N是余弦值,在-11的范围,否则返回NULL)
  58. ASIN(N) : 返回N反正弦值
  59. ATAN(N) : 返回N的反正切值
  60. ATAN2(X,Y)  : 返回2个变量XY的反正切(类似Y/X的反正切,符号决定象限)
  61. COT(N) : 返回X的余切
  62. RAND() RAND(N) : 返回在范围01.0内的随机浮点值(可以使用数字N作为初始值)
  63. DEGREES(N) : 把N从弧度变换为角度并返回
  64. RADIANS(N) : 把N从角度变换为弧度并返回
  65. TRUNCATE(N,D)  : 保留数字ND位小数并返回
  66. LEAST(X,Y,...)  : 返回最小值(如果返回值被用在整数(实数或大小敏感字串)上下文或所有参数都是整数(实数或大小敏感字串)则他们作为整数(实数或大小敏感字串)比较,否则按忽略大小写的字符串被比较)
  67. GREATEST(X,Y,...)  : 返回最大值(其余同LEAST())
  68.  
  69. 日期和时间
  70.  
  71. DAYOFWEEK(date)  : 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
  72. WEEKDAY(date)  : 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)
  73. DAYOFMONTH(date)  : 返回date是一月中的第几日(131范围内) 
  74. DAYOFYEAR(date)  : 返回date是一年中的第几日(1366范围内) 
  75. MONTH(date)  : 返回date中的月份数值
  76. DAYNAME(date) : 返回date是星期几(按英文名返回)
  77. MONTHNAME(date)  : 返回date是几月(按英文名返回)
  78. QUARTER(date) : 返回date是一年的第几个季度
  79. WEEK(date,first) : 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)
  80. YEAR(date) : 返回date的年份(范围在10009999) 
  81. HOUR(time)  : 返回time的小时数(范围是023)
  82. MINUTE(time)  : 返回time的分钟数(范围是059) 
  83. SECOND(time)  : 返回time的秒数(范围是059)
  84. PERIOD_ADD(P,N)  : 增加N个月到时期P并返回(P的格式YYMMYYYYMM)
  85. PERIOD_DIFF(P1,P2) : 返回在时期P1P2之间月数(P1P2的格式YYMMYYYYMM)
  86. DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) : 对日期时间进行加减法运算
  87. TO_DAYS(date)  : 返回日期date是西元0年至今多少天(不计算1582年以前)
  88. FROM_DAYS(N)  : 给出西元0年至今多少天返回DATE(不计算1582年以前)
  89. DATE_FORMAT(date,format)  : 根据format字符串格式化date
  90. TIME_FORMAT(time,format) : 和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)
  91. CURDATE()  CURRENT_DATE() : 以'YYYY-MM-DD'YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字) 
  92. CURTIME() CURRENT_TIME() : 以'HH:MM:SS'HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字) 
  93. NOW() SYSDATE() CURRENT_TIMESTAMP() : 以'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字) 
  94. UNIX_TIMESTAMP() UNIX_TIMESTAMP(date)  : 返回一个Unix时间戳('1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
  95. FROM_UNIXTIME(unix_timestamp)  : 以'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字)
  96. FROM_UNIXTIME(unix_timestamp,format) : 以format字符串格式返回时间戳的值
  97. SEC_TO_TIME(seconds) : 以'HH:MM:SS'HHMMSS格式返回秒数转成的TIME(根据返回值所处上下文是字符串或数字) 
  98. TIME_TO_SEC(time) : 返回time值有多少秒

阅读全文 | 发表评论 ( 1 篇评论 )

文章分类

搜索

热门标签排行榜

背景音乐

    Flash required

所有文章总排行榜

最新评论

友情链接(随即排序)

存档

RSS订阅

管理


第 1 页 , 总 6 页12345...最后一页 »


多少次从挫折中抬起深埋的头,反复冷却后悄悄包扎伤口,残存的勇敢令自己从头收拾所有,很多无奈的时候,拍拍肩膀,自己和自己握握手,无言的坚信,令我千百次都不放弃一个理由,冲动止息后,继续默默奋斗!