背景:运维这个活其实是系统偏重的活,鄙人一直没做过运维,干了不到一个月,感觉发现其实也有点打杂的感觉,但都是围绕系统、权限、分配多机器、调度、维修、协调、沟通,特别是strace在启动一些服务时启动不了,用它就能很好的定位问题在哪儿。
下面这个主要是讲常用 的一个命令,如下:
运维利器:万能的strace:(批注:这个哥们写得好,赞一个:跟踪进程启动,跟踪命令的执行,根据进程号跟踪,启动时都访问了哪些文件。)
http://www.yunweipai.com/archives/7334.html?utm_source=tuicool&utm_medium=referral

1)跟踪进程启动,主要是系统调用:
strace -tt -f  ./some_server ../conf/some_server.conf

2)通过它启动要跟踪的进程:
strace ls -lh /var/log/messages

3)在运行的some_server服务:
pidof some_server
17553

得到其pid 17553然后就可以用strace跟踪其执行:
strace -p 17553

strace常用选项:
从一个示例命令来看:
strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489

-tt 在每行输出的前面,显示毫秒级别的时间
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
-f 跟踪目标进程,以及目标进程创建的所有子进程
-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
-o 把strace的输出单独写到指定的文件
-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。


实例:跟踪nginx, 看其启动时都访问了哪些文件
strace -tt -T -f -e trace=file -o /data/log/strace.log -s 1024 ./nginx



附录:
使用strace追踪多个进程:
http://www.ttlsa.com/tools/use-strace-to-track-multiple-processes/

如何使用strace+pstack利器分析程序性能:
http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html
strace_pstack]# gcc server.c -g -o server
strace_pstack]# gcc client.c -g -o client
[root@iZ25dcp92ckZ strace_pstack]# ./server
listening...
hello
hello
hello
hello

[root@iZ25dcp92ckZ strace_pstack]# ./client

ps -elf | grep server | grep -v grep
0 S root     2327417130  0  80   0 -  1041 hrtime 14:58 pts/1    00:00:00 ./server
[root@iZ25dcp92ckZ strace_pstack]# strace -o server.strace -Ttt -p 23274
Process 23274 attached
能看到生成的server.strace 脚本里时间相差1;s不对,nanosleep:


用pstack脚本找到是哪儿调用了nanosleep系统函数导致慢了1s:
[root@iZ25dcp92ckZ strace_pstack]# sh pstack.sh 23274
#0  0x00007f75e5bec480 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x00007f75e5bec334 in sleep () from /lib64/libc.so.6
#2  0x0000000000400813 in ha_ha ()
#3  0x0000000000400aea in main ()


[root@iZ25dcp92ckZ strace_pstack]# vi pstack.sh


这个命令是用来把filename备份成filename.bak,等同于命令

cp filename filename.bak

这里利用的是bash的brace expansion(大括号扩展)功能,
按照bash手册(man bash)所述:
bash支持{a,b,c}这样的扩展,比如a{d,c,b}e 会被扩展成ade ace abe
所以
filename{,.bak}被扩展成filename filename.bak也就好理解了



原文http://www.haw-haw.org/node/1507



如果要批量备份就需要用 find 与 cp 向结合,cp 也有批量备份的功能,但是功能太单一,如 -b -S 选项:

    .复制时产生备份文件
     cp -b a.txt tmp/
    .复制时产生备份文件,尾标 ~1~格式
     cp -b -V t   a.txt /tmp    
    .指定备份文件尾标    
     cp -b -S _bak a.txt /tmp

find  /home/user -name date* –mtime 1 –exec cp {} /backup/{} .backup /;

  注意最后一封号 “  ; ” 必须有。


----------------------------------------------------------------------------------------------------------------------------------------------


经常会在博客或者论坛看到类似下面的命令 大括号扩展  Brace expansion  {     }  shell   作用

cp /etc/httpd/httpd.{,.bakup}
或者是

mv resume{z,}.doc
那么,在uinx / linux  shell命令中是什么意思?起什么作用呢?

{  } 并没有什么实际的含义,但是却可以作为Brace expansion(大括号扩展或叫做花括号扩展)而经常用于产生各种组个。以下是翻译自 GNU/BASH  man page  的内容:

Brace expansion(大括号扩展或叫做花括号扩展) 是用来随机产生字符串组合的机制。这种机制类似于文件的扩展名,但是并不需要存在响应的文件。Brace expansion(大括号扩展或叫做花括号扩展)模式是一可选的preamble(前导字符),后面跟着一系列逗号分隔的字符串,包含在一对花括号中, 再后面是一个可选的postscript(打印编程语言)。preamble(前导字符)被添加到花括号中的每个字符串前面,postscript(打印编程语言)被附加到每个结果字符串之后, 从左到右进行扩展。  花括号扩展可以嵌套。扩展字符串的结果没有排序;而是保留了从左到右的顺序。


1.如,在终端中输入下面命令:

echo foo{1,2,3}.txt
输出如下:


foo1.txt foo2.txt foo3.txt
foo1.txt foo2.txt foo3.txt


2.也可以使用下面附加的实例,去在命令中“创建”一个参数,以节省输入的时间,提高工作效率:


    echo file.txt{,.bak}

    echo file-{a..d}.txt

    echo mkdir -p /apache-jail/{usr,bin,lib64,dev}

    echo cp httpd.conf{,.backup}

    echo mv delta.{txt,doc}

    echo file.txt{,.bak}

    echo file-{a..d}.txt

    echo mkdir -p /apache-jail/{usr,bin,lib64,dev}

    echo cp httpd.conf{,.backup}

    echo mv delta.{txt,doc}


3.可以使用Brace expansion(大括号扩展或叫做花括号扩展)来复制,重命名文件,或者是备份文件,还可以是创建目录等。在下面这个习惯性使用的的例子中,将   file1.txt  备份为  file2.txt.bak  ,输入:


cp   -v  file1.txt file1.txt.bak
cp   -v  file1.txt file1.txt.bak


如果使用Brace expansion,节省时间,则输入:


cp    -v    file1.txt{,.bak}
cp    -v    file1.txt{,.bak}


输出如下:

file1.txt -> file1.txt.bak

更多大括号扩展实例如下:

4. 如果我们执行:


$ cp  /etc/apt/sources.list          /etc/apt/sources.list.bak
$ cp  /etc/apt/sources.list          /etc/apt/sources.list.bak


这两个 /etc/apt/sources 部分相同,为了少输入两次/etc/apt/sources ,大括号扩展参数。还有平时重命名,备份文件,创建链接时候,都可以使用大括号扩展参数的方法提高效率。

大括号扩展,即大括号包围的,用逗号隔开的参数会扩展为独立的多个参数。


$ cp /etc/apt/sources.{list,list.bak}
$ cp /etc/apt/sources.{list,list.bak}


Shell 在解释时会自动将后面的参数扩展成两个,就变成了和上面一样的完整命令。

当然,还可更简单,将   list  也考虑进去,在逗号前什么都不写,如下:


$ cp /etc/apt/sources.list{,.bak}
$ cp /etc/apt/sources.list{,.bak}


这样逗号前面没东西,那么参数就保持原来的不变,逗号后面的照样扩展。
From:
http://blog.csdn.net/bluecy/article/details/6529685
http://www.dabu.info/brace-expansion-cp-and-mv-with-shell-role-in.html
背景:大学学习c语言够久,但对浮点数是如何存储和读取实现的,突然想到,觉得有点意思,查了下发现还是有点意思的,特摘录如下。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit) 指数(8 bit)尾数(23 bit)
123.456
+1.23456E+2
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)指数(11 bit) 尾数(52 bit)
浮点数float保存的字节格式如下:
地址 +0 +1 +2 +3
内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
这里
S 代表符号位,1是负,0是正
E 偏移127的指数(exp),二进制阶码=(EEEEEEEE)-127。
M 24位的尾数(mantissa)。保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了
较高的有效位数,提高了精度。
零是一个特定值,指数是0 尾数也是0。
浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下: 地址 +0 +1 +2 +3
内容0xC1 0x48 0x00 0x00
浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转换。
浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表
所列的那样分开,例如:
地址 +0 +1 +2 +3
格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二进制 11000001 01001000 00000000 00000000
十六进制 C1 48 00 00
从这个例子可以得到下面的信息:
符号位是1 表示一个负数
指数是二进制10000010或十进制130,130减去127是3,就是实际的指数。 尾数是后面的二进制数1001 0000 0000 0000 0000 000
在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数
点到尾数的开头,得到尾数值如下:
1.1001 0000 0000 0000 0000 000
接着C语言小数的内存表示,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为 指数是3,尾数调整如下:
1100.10000000000000000000
2/3页
结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的指数,例如:1100表示
(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)+ 1*2^(-1)=12.5。
因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-12.5。
7F7FFFFF
0111 1111 0111 1111 1111 1111 1111
+
1111 11102=25410
254-127=127
1.111 1111 1111 1111 1111 1111*2127
1111 1111 1111 1111 1111 1111*2104
=(10000 0000 0000 0000 0000 00002-1) *2104
=(224-1) *2104
=3.4E+38
推导出float精度为7位
1111 1111 1111 1111 1111 1111
2^24-1
16777215
1.6777215E7
1.23456789
1111

来自:http://wapwenku.baidu.com/view/958f563c580216fc700afd10.html?ssid=0&from=844b&uid=0&pu=usm@0,sz@1320_1002,ta@iphone_2_5.1_2_6.6&bd_page_type=1&baiduid=D64FEF90FEB247AE244A958817E6D953&tj=www_normal_4_0_10_title#1
背景:最后卡开机画面了,无论咋apt-get重新安装都不行,Ubuntu16.04下没有声音的解决方法,平时用Firefox或Chrome下的Flash插件。最后重新安装后好了。
          由于这个笔记本太老了华硕A8F,还是大学时候的老笔记本了,后来装了Ubuntu16.04发现它运行并不快,再就是Ubuntu16.04的后面版本Ubuntu17.04吧,也是一个过渡版本,
          于是,装了一个Ubuntu17.04的ubuntu 17.04 gnome3版本,觉得性能要好一些,可能和这个gnome3是C写的有关吧,再就是Ubuntu想用这个KDE做手机端,现在没有做得起来,还是回到了gnome3,我觉得是一个明智的选择,其实现在很少有人装Linux,再就是很多装Linux的人都是GEEK,笔记本配置都不会高到哪儿去这才是真实情况啊。
         Ubuntu17.04吧,这个版本的声卡不发声,于是按最后的方法做了一下配置好了,折腾了好久,不容易,这也是开源的一个实实在在的问题,如果自由微软收费合理又系统不错,还是用Win10吧,前提你有钱买好点的硬件。



Intel GMA950,http://blog.chinaunix.net/uid-2595338-id-2139474.html
http://ubuntuforums.org/showthread.php?t=205449
(1)检查系统

aplay -l


应该能看到安装的声卡设备,否则应该就是驱动安装失败了。

etual@Hikari:~$ aplay -l
**** PLAYBACK硬件设备列表 ****
卡 0: Intel [HDA Intel], 设备 0: ALC662 Analog [ALC662 Analog]
  子设备: 0/1
  子设备:#0: subdevice #0
卡 0: Intel [HDA Intel], 设备 1: ALC662 Digital [ALC662 Digital]
  子设备: 1/1
  子设备:#0: subdevice #0

(2)检查一下系统设备是否有检测到声卡

lspci -v


应该能看到类似的:
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 02)
  Subsystem: ASUSTeK Computer Inc. NM10/ICH7 Family High Definition Audio Controller
  Flags: bus master, fast devsel, latency 0, IRQ 29
  Memory at feb3c000 (64-bit, non-prefetchable) [size=16K]
  Capabilities: [50] Power Management version 2
  Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
  Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
  Capabilities: [100] Virtual Channel
  Capabilities: [130] Root Complex Link
  Kernel driver in use: snd_hda_intel
  Kernel modules: snd_hda_intel

(3)通过ubuntu的APT-GET安装,好吧,我就是通过这个搞回来的驱动,推荐!
首先,将原来的卸载干净

sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils

千万注意,因为依赖关系,多删除了部分东西,必须装回来,否则重启后就进不了桌面了。
出现进入不了桌面一是ctrl alt f到f7,再就是恢复模式了:http://m.blog.csdn.net/article/details?id=9199939

sudo apt-get install gdm ubuntu-desktop

下面就是安装了

sudo apt-get install linux-sound-base alsa-base alsa-utils


恩,经过漫长的下载安装,重启后,我的UBUNTU又在发出声音了,yeah~~~
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
最后就是修改一下音量,顺便保存一下:

alsamixer

调节好之后保存

sudo alsactl store 0


到此就完毕了,继续听歌,yeah~~~
有兴趣的看看原文吧,还有不少东西的呢:
http://ubuntuforums.org/showthread.php?t=205449



没有声音的原因是因为当前用户没有使用声卡相关设备的权限:

ls -l /dev/snd 查看了一下,发现用户权限为 root 用户组为audio

解决方法为将当前用户加入audio组就可以了。

使用usermod -a -G audio username

就可以解决啦。
实践如下:
[jackxiang@jackX ~]$ ls -l /dev/snd
总用量 0
drwxr-xr-x  2 root root       60 5月  14 23:10 by-path
crw-rw----+ 1 root audio 116,  2 5月  14 23:10 controlC0
crw-rw----+ 1 root audio 116,  8 5月  14 23:10 hwC0D0
crw-rw----+ 1 root audio 116,  9 5月  14 23:10 hwC0D1
crw-rw----+ 1 root audio 116,  4 5月  14 23:10 pcmC0D0c
crw-rw----+ 1 root audio 116,  3 5月  14 23:10 pcmC0D0p
crw-rw----+ 1 root audio 116,  5 5月  14 23:23 pcmC0D1p
crw-rw----+ 1 root audio 116,  7 5月  14 23:10 pcmC0D6c
crw-rw----+ 1 root audio 116,  6 5月  14 23:10 pcmC0D6p
crw-rw----+ 1 root audio 116,  1 5月  14 23:10 seq
crw-rw----+ 1 root audio 116, 33 5月  14 23:10 timer
[jackxiang@jackX ~]$ id
uid=1000(jackxiang) gid=1000(jackxiang) 组=1000(jackxiang),129(wireshark)
[jackxiang@jackX ~]$ usermod -a -G audio jackxiang
usermod: Permission denied.
usermod:无法锁定 /etc/passwd,请稍后再试。
[jackxiang@jackX ~]$ sudo su -

id发现其是jackxiang,不是root,则把jackxiang和root一起加到组里面去:
chmod -R a+rwx /dev/snd
[root@jackX ~]# usermod -a -G audio jackxiang
[root@jackX ~]# usermod -a -G audio root

参考:http://blog.sina.com.cn/s/blog_5ce530a10100kyxf.html

——————————————————————————————
/home/xiangdong/下载/alsa-driver-1.0.25/SUPPORTED_KERNELS
cat /home/xiangdong/下载/alsa-driver-1.0.25/SUPPORTED_KERNELS
The alsa-drivers in this package are designed for the following kernels:

- Vanilla 3.0 to 3.2
- Vanilla 2.6.18 to 2.6.39

It's not guaranteed that they work with any newer version than above
or modified kernels by distributors.

It might be eventually possible to build the alsa-drivers with older
modified kernels by distributors (2.6.9+). These kernels have backported
many things from more recent vanilla kernels.

http://blog.csdn.net/ldl22847/article/details/8616921
http://blog.chinaunix.net/uid-30031530-id-5177359.html
http://blog.chinaunix.net/uid-20069582-id-227907.html

太旧了,下面这个版本:
Linux xiangdong-A8F 4.10.0-21-generic  
Ubuntu 10.04是我使用的第一个Linux系统,一开始就碰上这种问题让我很恼火,也折腾很长时间没搞定,终于在Ubuntu中文论坛上找到了yechao1989提供的解决办法,我把它粘过来留着以后自己可能还有用。我的本子是联想天逸F40,声卡为Analog Devices AD1986A。

1.检测声卡

代码:

sudo head -1 /proc/asound/card0/codec#0

2.修改配置文件

代码:

sudo gedit /etc/modprobe.d/alsa-base.conf

找到如下段:

代码:

# Keep snd-pcsp from being loaded as first soundcard

options snd-pcsp index=-2

注销下面语句

代码:

#options snd-pcsp index=-2

添加下面语句

代码:

options snd-hda-intel model=laptop-eapd

3.重启电脑

再试下喇叭,ok啦

但紧接着又出现让人郁闷的问题了,耳机喇叭一起响,按照如下方法也没有用:

打开新立得,安装gnome-alsamixer,运行,在“Headphone Jack Sense”打勾,插上耳机喇叭不再同时响了。

再找找办法吧



这个驱已经Ok了,只做下设置:
/home/xiangdong/下载/alsa-driver-1.0.25/alsa-kernel/Documentation/HD-Audio-Models.txt

AD1986A
=======
  6stack        6-jack, separate surrounds (default)
  3stack        3-stack, shared surrounds
  laptop        2-channel only (FSC V2060, Samsung M50)
  laptop-eapd   2-channel with EAPD (ASUS A6J)
  laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100)
  ultra         2-channel with EAPD (Samsung Ultra tablet PC)
  samsung       2-channel with EAPD (Samsung R65)
  samsung-p50   2-channel with HP-automute (Samsung P50)
如果系统原来已经有 ALSA 驱动,但是没有识别声卡或者声音驱动有问题。那么理论上只需要在两个地方做改动:
添加 /etc/modprobe.d/sound 文件,内容为:
alias snd-card-0 snd-hda-intel
alias sound-slot-0 snd-hda-intel


vi  /etc/modprobe.d/alsa-base.conf
# options snd-pcsp index=-2
options snd-hda-intel model=laptop-eapd
-p, --password PASSWORD       encrypted password of the new account
阅读全文
背景:查了下ansible这块,好像可以通过pip安装,尽管后面是用的yum,但是后面还是得用pip安装ansible的其它模块,特备忘之用。
1、pip下载安装
1.1 pip下载

# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
1.2 pip安装

# tar -xzvf pip-1.5.4.tar.gz
# cd pip-1.5.4
# python setup.py install
# tar -xzvf pip-1.5.4.tar.gz
# cd pip-1.5.4
# python setup.py install
2. pip使用详解
2.1 pip安装包

# pip install SomePackage
  [...]
  Successfully installed SomePackage
# pip install SomePackage
  [...]
  Successfully installed SomePackage
2.2 pip查看已安装的包

# pip show --files SomePackage
  Name: SomePackage
  Version: 1.0
  Location: /my/env/lib/pythonx.x/site-packages
  Files:
   ../somepackage/__init__.py
   [...]
# pip show --files SomePackage
  Name: SomePackage
  Version: 1.0
  Location: /my/env/lib/pythonx.x/site-packages
  Files:
   ../somepackage/__init__.py
   [...]
2.3 pip检查哪些包需要更新

# pip list --outdated
  SomePackage (Current: 1.0 Latest: 2.0)
# pip list --outdated
  SomePackage (Current: 1.0 Latest: 2.0)
2.4 pip升级包

# pip install --upgrade SomePackage
  [...]
  Found existing installation: SomePackage 1.0
  Uninstalling SomePackage:
    Successfully uninstalled SomePackage
  Running setup.py install for SomePackage
  Successfully installed SomePackage
# pip install --upgrade SomePackage
  [...]
  Found existing installation: SomePackage 1.0
  Uninstalling SomePackage:
    Successfully uninstalled SomePackage
  Running setup.py install for SomePackage
  Successfully installed SomePackage
2.5 pip卸载包

$ pip uninstall SomePackage
  Uninstalling SomePackage:
    /my/env/lib/pythonx.x/site-packages/somepackage
  Proceed (y/n)? y
  Successfully uninstalled SomePackage
$ pip uninstall SomePackage
  Uninstalling SomePackage:
    /my/env/lib/pythonx.x/site-packages/somepackage
  Proceed (y/n)? y
  Successfully uninstalled SomePackage
3. pip使用实例
3.1 安装redis

# pip install redis
# pip install redis
3.2 卸载redis

# pip uninstall redis
Uninstalling redis:
  /usr/lib/python2.6/site-packages/redis-2.9.1-py2.6.egg-info
.....省略一些内容....
Proceed (y/n)? y
  Successfully uninstalled redis
# pip uninstall redis
Uninstalling redis:
  /usr/lib/python2.6/site-packages/redis-2.9.1-py2.6.egg-info
.....省略一些内容....
Proceed (y/n)? y
  Successfully uninstalled redis
3.3 查看待更新包

pip list --outdate
pygpgme (Current: 0.1 Latest: 0.3)
pycurl (Current: 7.19.0 Latest: 7.19.3.1)
iniparse (Current: 0.3.1 Latest: 0.4)
pip list --outdate
pygpgme (Current: 0.1 Latest: 0.3)
pycurl (Current: 7.19.0 Latest: 7.19.3.1)
iniparse (Current: 0.3.1 Latest: 0.4)
4. 常见错误
4.1 ImportError No module named setuptools
请参考《ImportError No module named setuptools解决》
5. pip参数解释

# pip --help

Usage:  
  pip <command> [options]

Commands:
  install                     安装包.
  uninstall                   卸载包.
  freeze                      按着一定格式输出已安装包列表
  list                        列出已安装包.
  show                        显示包详细信息.
  search                      搜索包,类似yum里的search.
  wheel                       Build wheels from your requirements.
  zip                         不推荐. Zip individual packages.
  unzip                       不推荐. Unzip individual packages.
  bundle                      不推荐. Create pybundles.
  help                        当前帮助.

General Options:
  -h, --help                  显示帮助.
  -v, --verbose               更多的输出,最多可以使用3次
  -V, --version               现实版本信息然后退出.
  -q, --quiet                 最少的输出.
  --log-file <path>           覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
  --log <path>                不覆盖记录verbose输出的日志.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             连接超时时间 (默认15秒).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               证书.
# pip --help

Usage:  
  pip <command> [options]

Commands:
  install                     安装包.
  uninstall                   卸载包.
  freeze                      按着一定格式输出已安装包列表
  list                        列出已安装包.
  show                        显示包详细信息.
  search                      搜索包,类似yum里的search.
  wheel                       Build wheels from your requirements.
  zip                         不推荐. Zip individual packages.
  unzip                       不推荐. Unzip individual packages.
  bundle                      不推荐. Create pybundles.
  help                        当前帮助.

General Options:
  -h, --help                  显示帮助.
  -v, --verbose               更多的输出,最多可以使用3次
  -V, --version               现实版本信息然后退出.
  -q, --quiet                 最少的输出.
  --log-file <path>           覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
  --log <path>                不覆盖记录verbose输出的日志.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             连接超时时间 (默认15秒).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               证书.
6. 结束
安装使用一目了然,太简单了。


From:http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/

设备采用长连接与IoT Socket Server保持连接,不断开。每隔0.5秒上传一次数据,报文长度<200B。压测使用50组长连接为基数,从50,100,150,200,250,300,每隔50基数做测试。此事发现:CPU占用率维持在25%左右,出网带宽维持在125kbps,但是入网带宽随着压测而上升到500kbps。由于IDC入网带宽统计严重滞后于出网带宽。出现非实时的出网带宽统计,甚至绘图不完整。只能够推测数值。

但是由于外网带宽总数在1Mbps,所以300台左右时,总带宽大约在600~700kbps左右,此时TeraTerm输入命令已经感觉到了延时。

结论
1Mbps带宽是系统瓶颈,即使采用高配服务器并不能够改善并实现高并发的IO连接数。

但实际上,每0.5秒发送200B,相当于400 B/s = 3.2kbps。而1Mbps支持300台设备,相当于每台占用带宽为3.5kbps。


来自:https://segmentfault.com/q/1010000004214610


300个是125kbps啊,,我说的呢,
3000 = 1250kbps
1250/8 = 416kbps  如果说是要很密集还得x参数
416.66666666666666666666666666667
uerdel删除用户时候提示:userdel: user ** is currently logged in


今天在删除用户账号的时候,发现一个奇怪现象,即:
#userdel -r aaron

userdel: user aaron is currently logged in


解决方法:
mv /var/run/utmp /var/run/utmp_old      //将原文件改名
touch > /var/run/utmp        //新创建一同名文件

再次执行删除操作。。。成功删除用户

关于:/var/run/utmp

utmp是一个文件,除了utmp程序你不能编辑这个文件,删掉他的话,当前登陆信息都会丢失。这个文件在每次机器reboot起来后都会重新创建。

更多关于utmp文件介绍请参考下面说明:
/var/run/utmp

  该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。

 (/var/log/wtmp、/var/log/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。

  每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。

  下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。


但是,本人自己试验了还是不行,依旧得到同样的提示
      那就暴力删除该用户吧:
      $userdel -r -f XXXX
    提示:userdel: warning: can't remove /var/mail/git: No such file or directory
          userdel: git home directory (/home/git) not found
但是没关系。实际上已成功删除用户。

来自:http://www.2cto.com/os/201408/328936.html
实践发现,ubunut16.0.4里面的chromium没法设置代理的,而是采用了下面这个办法进行命令行设置:
在受支持的桌面环境中运行Chromium时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。
但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man chromium-browser。

=========================================================================================
先安装再代理 ,安装后可以google: http://jackxiang.com/post/8703/

受支持的桌面环境中运行Chromium时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。
但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man chromium-browser。


安装好google-chrome(或者chromium也行)后,我们发现浏览器的设置中,代理配置功能失效,显示为:

在受支持的桌面环境中运行google-chrome时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。

但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man google-chrome。

2、关闭该google-chrome,并重新从命令行启动,加入一个参数:

jackX@thinkpad:~$ google-chrome --proxy-server="socks5://localhost:8787"
chromium-browser --proxy-server="socks5://localhost:8787"

值得注意的是,由于我平常windows环境下使用的代理工具为:chrome+SwitchyOmega插件+MyEntunnel,配置是SSH+socks5,所以一开始没有在–proxy-server参数中指定socks5,导致启动后代理失效。(可通过google-chrome –help了解详细参数)

chrome成功启动后,打开百度输入“ip”,可显示我的代理服务器IP,说明代理成功启用。
[root@jackX ~]# vi /etc/sudoers
在 /etc/sudoers 中添加:
Defaults editor=/usr/bin/vim, env_editor
即可将默认编辑器设置为 vim。
apt-get install vim
root@jack:~# which vim
/usr/bin/vim
[root@jackX ~]# update-alternatives --config editor
有 4 个候选项可用于替换 editor (提供 /usr/bin/editor)。

  选择       路径              优先级  状态
------------------------------------------------------------
* 0            /bin/nano            40        自动模式
  1            /bin/ed             -100       手动模式
  2            /bin/nano            40        手动模式
  3            /usr/bin/vim.basic   30        手动模式
  4            /usr/bin/vim.tiny    10        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:3
update-alternatives: 使用 /usr/bin/vim.basic 来在手动模式中提供 /usr/bin/editor (editor)
From:http://blog.longwin.com.tw/2008/10/ubuntu-debian-modify-default-edit-2008/
chrome和firefox都没法使用Flash:

sudo apt-get install software-center

http://tieba.baidu.com/p/4395787288
ubuntu 17.04是gnome桌面环境的话,用鼠标左键选中区域,然后滚轮按下就可以黏贴刚才内容
在ubuntu下,选择文本会自动复制,按中键即可粘贴,这个是不用设置的,不过是中键,很不错
背景:ubuntu 17.04不是出了嘛,可是secureCRT没有,于是,得安一个,网上全是x64位的,我这又是32位的,找了好久终于找到一个OK的。
http://www.xue163.com/333/1654/3332691.html
DownLoad: http://download.csdn.net/download/since1988/8287101

请注意,那个下面的这些码贴上只是想让其显示并单项输入,以达到破解的目的:
root@jackX:/home/jackxiang/下载# sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015



====================================================================
jackxiang@jack:~/下载$ ls
scrt-7.3.1-685.ubuntu13.i386.deb  securecrt_linux_crack.pl
jackxiang@jack:~/下载$ sudo dpkg -i scrt-7.3.1-685.ubuntu13.i386.deb
[sudo] jackxiang 的密码:
正在选中未选择的软件包 scrt。
(正在读取数据库 ... 系统当前共安装有 174871 个文件和目录。)
正准备解包 scrt-7.3.1-685.ubuntu13.i386.deb  ...
正在解包 scrt (7.3.1-685) ...
正在设置 scrt (7.3.1-685) ...
正在处理用于 gnome-menus (3.13.3-6ubuntu3) 的触发器 ...
正在处理用于 desktop-file-utils (0.22-1ubuntu5) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.59ubuntu1) 的触发器 ...
jackxiang@jack:~/下载$ which SecureCRT
/usr/bin/SecureCRT
jackxiang@jack:~/下载$ sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015


jackxiang@jack:~/下载$ SecureCRT &
更改yum源为aliyun

[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

[2] 进入yum源配置文件所在文件夹

[root@localhost yum.repos.d]# cd /etc/yum.repos.d/

[3] 下载aliyun的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)

[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-6.repo

如果下载163的yum源配置文件

[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

[4] 运行yum makecache生成缓存

[root@localhost yum.repos.d]# yum makecache

[5] 更新系统

[root@localhost yum.repos.d]# yum -y update
背景:我想从一台远程机器上的一个用户上的文件拷贝到我的机器上来,可我不想用root拷贝,想新增加一个用户来拷贝,如何实现无 Permission denied,拷贝过来呢?
现象:权限不够,(如下:test这个目录是我加的一个test用户生成的)
/home/test/rpmbuild/RPMS/x86_64 这个我想scp下面的rpm包,我不是root,怎么样能实现拷贝?
[root@localhost x86_64]# scp rpm@192.168.101.***:/home/test/rpmbuild/RPMS/x86_64/mysql-5.7.12-160420134244.el6.x86_64.rpm /data/www/yum/centos/6/x86_64
rpm@192.168.101.227's password:    Permission denied
问题:test是我建立的一个test用户。假如test用户的密码我忘记了(我用root修改了下test的密码,再用test用户拷贝没有问题,正常),但我有root。
试图:我还是想用rpm这个专有用户来拷贝。
权限:
[root@localhost ~]# ls -l /home/ |grep test
drwx------. 3 test          test          4096 Mar 18 19:18 test
rpm用户进不了这个目录
办法: rpm的用户组改成 test
id test
uid=539(test) gid=539(test) groups=539(test)
xiangjiwu - IEG(33757)  17:11:42
usermod -G test,rpm rpm

rpm的用户组改成 test,实践如下:
[root@localhost x86_64]# id test
uid=539(test) gid=539(test) groups=539(test)
[root@localhost x86_64]# usermod -G test,rpm rpm
[root@localhost x86_64]# id rpm
uid=540(rpm) gid=540(rpm) groups=540(rpm),539(test)
不做下面的权限,也是一样会报权限错误的: Permission denied
chown -R test:rpm /home/test  //给test目录递归上rpm组,下面这一步也不可缺少。
chmod -R 750 /home/test   //用户7,属组5(4+1),读取+执行。
修改后权限如下:
[root@localhost x86_64]# ls -l /home/ |grep test
drwxr-x---. 3 test          rpm           4096 Mar 18 19:18 test

再拷贝,也就成功了:


总结:三个步骤实现,一个不能少,一个是入组,一个是给目录加上组的可读权限:


最后,感谢PHPers@南极里的xiangjiwu - IEG兄弟,Thanks~

斧正:
xiangjiwu - IEG(337**)  17:41:32
rpm用户加到test组了, 那 /home/test就不用改组,直接chmod -R 750 /home/test 就行了。
背景:像unix或linux下的mysql和php-fpm都有一个xxx.sock文件,它是干嘛的呢?可以研究一下它。
  管道由于只能实现具有亲缘进程的进程间通信,使用受到了很大的限制,命名管道解决了这一问题。但是,无论是管道还是命名管道,都只能实现单向通信(在只创建一个管道的情况下)。
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。这里所指的使用套接字实现进程间通信,是由将通信域指定为PF_UNIX来实现的。该函数的形式如下:
int socket(int domain, int type, int protocol);
socket函数中的domain参数用于指定通信域,domain参数取PF_UNIX时,表示创建UNIX域的套接字。使用PF_UNIX域的套接字可以实现同一机器上的不同进程间的通信。
调用bind函数实现了套接字与地址(这里是文件名)的绑定。bind函数的具体信息如下:
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
其参数my_addr为指向结构体sockaddr_un的指针,该结构体的定义如下:
    #define UNIX_PATH_MAX 108
    struct sockaddr_un {
    sa_family_t     sun_family;     /*PF_UNIX或AF_UNIX */
    char    sun_path[UNIX_PATH_MAX];        /* 路径名 */
    };
在该结构体中,sun_family为AF_UNIX。sun_path是套接字在文件系统中的路径名。
Unix域套接字是通过套接字API实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的IPC机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示Unix域地址的套接字文件能够使用stat()但是不能通过open()打开,而且应该使用套接字API对它进行操作。
Unix域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使Unix域套接字能够比命名管道更好的适应IPC任务。

server.c


send.c


gcc server.c -o server
gcc send.c -o send

[root@iZ25dcp92ckZ sock]# ./server
Bind is ok
有client启动后server响应如下:
Recv: Counter is 1
Recv: Counter is 2
Recv: Counter is 3
Recv: Counter is 4

[root@iZ25dcp92ckZ sock]# ./send
Send: Counter is 1
Send: Counter is 2
Send: Counter is 3
Send: Counter is 4

最后,还发现那个设备文件server.sock 不能直接cat去读取,只能stat:
[root@iZ25dcp92ckZ sock]# cat server.sock
cat: server.sock: 没有那个设备或地址
[root@iZ25dcp92ckZ sock]# stat server.sock    
  文件:"server.sock"
  大小:0               块:0          IO 块:4096   套接字
设备:ca01h/51713d      Inode:16282       硬链接:1
权限:(0755/srwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2016-04-18 14:11:20.878641353 +0800
最近更改:2016-04-18 14:11:20.878641353 +0800
最近改动:2016-04-18 14:11:20.878641353 +0800
创建时间:-
实践摘录自:http://www.cnblogs.com/hnrainll/archive/2011/12/03/2274973.html
在参加腾讯实习生2016面试时,有两道问题自己没有想清楚也思考的不是很明白,面试结束时后悔没有问正解是什么,回来后在搜索引擎上也没有搜到相关的问题。

第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"

第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"

所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!


知乎网友洋耗子答曰:

因为这些都是假设性问题,所以一般都只能说排查问题的思路:

问题一:

1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。

2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。

3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。

4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。

5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。

6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。

问题二:

1:这类bug,一般都涉及越界操作。

2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。

3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。

朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
背景:在打php7.0.2下的apcu扩展包时,出现 Installed (but unpackaged) file(s) found,这块是因为它不光生成了.so外,还有一些涉及到.h的头文件在里面,可用于c开发,而我们只运行PHP不做开发,也就没有必要打进去,如果有必要则把它的文件及目录全路径写进%files里去,这儿我们就直接在install里删除掉这个目录下的所有文件及可,两种方法任取一个吧,都有实践且成功生成rpm无错误提示,如下。

方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。                                                                                            
/usr/local/php/include/php/ext/igbinary/igbinary.h

生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h

假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:


再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so


方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):




也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm      
/usr/local/php/ext/apcu.so

======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:


阅读全文
背景:在网上找一个开要自启动的shell代码放上去后,直接添加服务提示service redis does not support chkconfig,后加上下面两行O了。

加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off


阅读全文
因为老是出现好像刚连接时出现行数没有对齐,得ctrl+l一下才能修改到正确的地方,估计是和字体有关系,此次再次实践注意一下:
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================

经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
   今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
   设置方法
   当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
   isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
  1> sp_helpdb
  2> go
     呵呵.是不是很漂亮了,再也不会混乱了..

来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
༒࿈背༙྇景༙྇:༒࿈这༙྇个༙྇༒࿈还༙྇是༙྇༒࿈0༙྇༒࿈9༙྇༒࿈年༙྇༒࿈开༙྇始༙྇༒࿈兴༙྇起༙྇,༒࿈现༙྇在༙྇༒࿈火༙྇起༙྇来༙྇༒࿈了༙྇。࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒

GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)

1.在本机上安装openssh

在linux client上安装ssh服务,如果是windows的安装git for windows

sudo apt-get install openssh-server

可以查看ssh服务是否开启

ps -e | grep ssh

2.在server上创建一个git用户

sudo adduser git

3.在server上安装git

sudo apt-get install git-core

4.在server上初始化仓库

cd /home/git/

git init --bare myRep.git

5.通过git clone命令进行克隆远程仓库

git clone git@{your server ip}:/home/git/myRep.git

这里都必须知道server上git用户的登入密码。
背景:经常看到PHP的一些扩展均是以tgz后续提供的,那这个包是怎么打出来的呢?
         linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName

php-5.5.34/ext










cp zip-1.13.2forphp-5.5.34.spec  zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec  openssl-5.5.34forphp-5.5.34.spec  
cp zip-1.13.2forphp-5.5.34.spec  opcache-5.5.34forphp-5.5.34.spec  

挪动一下spec命令更规范:











RPM包重新命名:



spec文件里的Name:    php-5.5.34-extension-apc  替换成:apc-php55-


cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:


这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec

一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。

http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
分页: 9/24 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]