linux study

虚拟机以及安装linux系统

安装新的virtualBox
    1. VB ---> new aaa--->...new disk...--->finish
    2. open aaa--->choose ubuntu-12.04-desktop-i386.iso --> ...click icon of install unbuntu --> about 30m, it'll restart --> 右下角图标,点击移除iso磁碟                  
    3. install guest addtional in ubuntu menu   // 共享,粘贴等重要功能
          安装失败:sudo apt-get install build-essential  // 安装一堆开发工具gcc,make等
    4. 打开命令行:  ctrl + alt + t
使window与virtualBox互相粘贴:
    可直接在设置中修改:设置--〉一般--〉进阶
设置VB与window互访:
    设置--〉共用资料夹  全勾选后并不需要下面的操作
    ( mount   -t   vboxsf   win_folder   /mnt/windows      // write this to  /etc/rc.local  )
    访问windows文件夹:ll /media/windowBag/
vdi文件的位置:设置--〉存放装置
    F:\A_myTOP\ubuntu_12.04.1_null.vdi
    D:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso
vb扩容:用UUID或者vdi文件来设置
    (1) D:\Program Files\Oracle\VirtualBox>VboxManage list hdds 
         VBoxManage modifyhd    96fe8d50-7b14-4acf-a2f6-fd63ba59debd                    --resize 20480 
         VBoxManage modifyhd    E:\wiUCS_project\webRTC\dld_doc\ubuntu_12.0.4.vdi.vdi   --resize 20480  // 单位MB,so 20G
    (2)fdisk ,   mkfs,   mount 
         原来的扩张分区,导致新的磁盘空间无法在fdisk中显示    // 删除扩展分区后,再加入新分区,就 OK了
               fdisk /dev/sda;   m == menu ;    d == del;  n = new;  w==write;
         加入分区后要重启后,系统才认得。 mkfs -t ext3 /dev/sda2   ;   mount  /dev/sda2  /home/ding/extented_disk
安装新的VMware
VMware 配置
      v0 : bridge  v1 : host-only    v8 : NAT(多了DHCP,NAT server )
    新建aaa--->打开aaa,装入CentOS-6.3-x86_64-bin-DVD1.iso后,安装mini--->install vmware tools(自带,互相粘贴等功能)
     1。需要修改网络配置:改为桥接后,/etc/sysconfig/network-script/ifcfg-eth0,另onboot=yes,MM_controlled=no
     2. 修改DNS: echo "nameserver 8.8.8.8" > /etc/resolv.conf
     3. 控制台没有滚动条,用shift+pageUp翻页
通过filezilla访问linux
     sudo apt-get install openssh-server   // 在VB中安装ssh/ftp server ,上传失败时以root登录
      sudo passwd root       // 修改密码
进入其它linux系统
     sudo -s    // 只有root用户,是所有机器上都有的角色;切换到root用户后,以root登陆ssh服务器
      ssh  other's IP  //  ssh user@ip
文件传输
     安装ssh server, 用sftp进行安全的文件传输。其实sftp就是ssh 的一个程式
    sftp [email protected]
    下载: sftp > get /remote/index.php  /local/
    上传: sftp > put /local/Linuxgl.pdf /remote/fuyatao/
    远端的命令: pwd命令可以帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd. // 本机都加l=local
访问ftp服务器
     sudo ftp 10.5.90.10 //windows上的
        name: anonymous
     ftp > cd temp/Whiteboard/lynckia_bag
     ftp > ls
     ftp > get lynckia_jinwei.tar.gz newName_lynckia.tar.gz

安装

在线安装
    ubuntu:   apt-get install XXX XXX
      更新源:备份后搜索源来更新此文件 /etc/apt/source.list ; 再执行 sudo apt-get update
   centos:   yum -y install XXX XXX 
包安装
    ubuntu:  dpkg -i XXX.deb   
   centos:  rpm -ivh XXX.rpm  // http://rpm.pbone.net/ ——这是一个给力的rpm包网站。
          (-i==install, v=详细信息,h=hash, -e=erase删除,-U=升级)   
安装包的转换rpm--->deb
    apt-get install alien    
    alien --scripts *.rpm    
检查是否已经安装
    centos:   rpm -qa |grep dhcp        
    ubuntu:  dpkg --get-selections | grep office    // 查找libreoffice是否卸载完成,否则用purge清除
                apt-get purge libreoffice*
更新ubuntu
     ubuntu--->system--->manager--->upgrade
mini版本安装后用yum下载
     1。需要修改网络配置:改为桥接后,/etc/sysconfig/network-script/ifcfg-eth0,另onboot=yes,MM_controlled=no
    2. 修改DNS: echo "nameserver 8.8.8.8" > /etc/resolv.conf
    3. yum -y update
    4. yum search XXX;  yum install -y XXXX
yum建立本地源后进行安装:
    Yum: Yellowdogy Updater Modified.软件仓库(repository)的源,可以是http,ftp站点,或者是本地的资源。
    createrepo这个软件可以解决软件之间的依赖。
    1. 在线下载nfs安装包: 先修改配置文件vi /etc/yum.conf   另 keepcache =1
       yum install nfs-utils.x86_64     
   2. 默认从网上下载的安装文件存放在:/var/cache/yum,把之下的nfs相关的rpm包全部拷贝到/mnt/nfsSrc/x86_64 
        cp  *.rpm  /mnt/nfsSrc/x86_64
   3. 创建软件库 
         createrepo /mnt/nfsSrc/
        vi /etc/yum.repo.d/base.repo  另 baseurl=file:///mnt/nfsSrc/
   4. 从本地源安装  
        yum install nfs-utils.x86_64
配置安装NFS
   直接在本地包中安装:cd /mnt/nfsSrc/ ;   rpm -ivh *.rpm
   服务器: 
        配置: cat /etc/exports
          /mnt/nfsServer 10.50.141.0/24(ro,no_root_squash)   // 把某目录给这些地址共享(只读,root权限)
        启动:/etc/init.d/rpcbind start   
           /etc/init.d/nfs start
      检查:showmount -a
   客户端:
       检查服务器是否可用:  showmount -e 10.50.141.22   
      挂载到服务器: mount -t nfs 10.50.141.22:/mnt/nfsServer  /mnt/nfsClient -o nolock   
   未做的:
       yum install rpcbind(centos6)
      将nfs加入开机启动项chkconfig nfs on
安装配置jdk
    0. 查看已经安装的版本:  java -version
    1. 安装bin或者把得到的jdk包直接拷贝到某目录
     2. 设置环境变量: centos: vi /etc/profile ;  source /etc/profile
          export JAVA_HOME=/usr/java/jdk1.7.0_45
          export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
          export PATH=$PATH:$JAVA_HOME/bin 
    3. 更新java版本 
          update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0/bin/java 60
         update-alternatives --config java
    4. 验证:  java 
安装eclipse
     ubuntu_eclipse_install      // install package
     安装jdk:     sudo dpkg -i java-1.6.0-openjdk_1.6.0.0-2.7_i386.deb
     安装eclipse: eclipse-linuxtools-helios-SR1-incubation-linux-gtk.tar.gz
     配置:        sudo cp -r /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre  ./ 

linux环境变量

    显示变量:   env; export; echo $WELCOME
    设置新的:   set env var; export WELCOME="hello";
    设置只读:   readonly WELCOME  // (unset WELCOME) can't clear or modify
    仅当前shell(控制台)有效:   PATH=$PATH:/home/myplugin   //  linux用冒号分隔,window用分号 
     export:
         1. 在控制台中执行脚本时,控制台是父shell, 脚本运行在子shell
        2. 环境变量仅仅在当前shell中有效;当用export导出变量时,变量将在子shell中有效
             so 当前和子shell(控制台中执行的script)有效: 控制台中执行 export PATH=$PATH:/home/temp    
    重启后仍有效:  将export那句添加到配置文件
         centos:   /etc/profile          // all user  
                  /home/brian/.bashrc   // only user brian
                  source /etc/porfile   // 配置文件立即生效      
    将脚本的执行结果导入到当前的shell:    .   ./ding_exec.sh   or .   /var/psbl_env
       /var/psbl_env  导出某变量,这个结果导入到当前shell(控制台)。所以在控制台中执行的CLI(子shell)能够通过 getenv() 得到该变量

启动

1. 图形界面和字符界面的切换
    alt+ctrl+F1-6 :  图形->字符
    alt+ctrl+F7   :  字符->图形
2. 启动时指定界面: 3:字符  5:图形
    vi /etc/inittab  // 0:停止, 1:单用户, 2:多用户无NFS, 4:无用, 6:重启
3. 重新启动: alt+ctrl+Backspace
4. 当前运行级别时间: who -r

网络

显示以及临时修改
ifconfig  eth0:0 XXX  netmask XXX  [boardcast XXX]  // 在eth0上增加另一个IP
    ifconfig eth0:0 down   // 删除eth0:0 
    ifconfig eth0 XXX netmask XXX  
route -n == netstat -rn
    route add -net XXX  netmask XXX  gw XXX  // route del -net...   
    route add default gw 192.168.1.1
hostname XXX

centos配置文件:                              
    修改IP:  /etc/sysconfig/network-scripts/ifcfg-eth0    //配置静态的  BOOTPROTO=static
        1.拷贝VMware后,需要修改mac地址(在VM设置中), service network restart/reboot(卸载virtualBox可能网卡被占用)
        2.增加一个网口,拷贝ifcfg-eth0后,修改重启即可。
    DNS域名修改:  /etc/resolv.conf
   修改HOSTNAME:  /etc/sysconfig/network  
ubuntu配置文件: 
     修改IP: /etc/network/interfaces   // address 192.168.0.111... 
    重启: sudo /etc/init.d/networking stop/start   
下载分享
     $ wget http://192.168.30.140/cgiPic/screen.bmp -O ./ttt.bmp  // 其他类似工具axel, lftp   
    $ curl http://192.168.30.140/CGI/Screenshot -u dld:dld  // 密码       
    python -m SimpleHTTPServer 8080  // 在需要共享的文件夹下执行此命令。 通过http://ip:8080来访问
sudo dhclient // client obtain ip via dhcp server      

信号

# kill -l                                                                          
               4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE            10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     16) SIGSTKFLT        18) SIGCONT     19) SIGSTOP     ...... 
信号0: // 退出shell。 ctrl+D       
1) SIGHUP   // 父进程结束,子进程收到。比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。
2) SIGINT   // 来自键盘的终止: ctrl+C
3) SIGQUIT  // 从键盘退出: ctrl+\  
9) SIGKILL  // 无条件终止: kill -9 进程号
15) SIGTERM  // 程序正常退出时的处理   
17) SIGCHLD  // 子进程结束时,父进程会收到
20) SIGTSTP  // 暂停并挂起,在屏幕上显示挂起的进程号: crtl+Z 

进程

后台运行
    crtl+Z     // 暂停并挂起,在屏幕上显示挂起的进程号     
    bg num     // 将暂停的程序放到后台运行
    jobs       // 显示后台运行的程序
    fg num     // 将暂停的程序放回前台运行
杀死
    通过名字    sudo killall/pkill node 
    通过关键字杀掉多个相同的进程  PIS=`ps -efww | grep "$1" | grep -v "grep" | awk '{print $2}'`   
                              echo ${PIS} | xargs kill  
查询  
    ps -ef|grep careStr     // ps -aux  
    netstat -apn |grep :22  // t=tcp, n=num, p=program, l=listen, a=all
    lsof -i :22             // 根据端口号,谁在用22端口
让终端忽略挂断信号nohup: no hangup
    &             // 让命令在后台运行;  
    >file 2>&1    // 输出到某文件,否者输出到nohup.out
        nohup $DAEMON_SH $PROCESS_CVT > $CVT_HOME/log/cvt.log 2>&1 &  
打印进程中的线程个数  
    ps max -o %mem, lstart,lwp,pid,nlwp,cmd   // 打印进程的:开始时间,tID,pID, 线程的个数,命令名
         # ps max -o pid,nlwp,cmd |grep 3067
          3067  270 node erizoController.js  // 验证: ls /proc/3067/task  通过进程的pid可以得到线程的tid
线程:linux中每个进程的最大线程个数  =  VIRT /  栈的大小
    VIRT:virtual memory usage ; 栈大小用 ulimit -a查看
    NTPL : linux中线程的实现的库 # getconf GNU_LIBPTHREAD_VERSION 

系统

df -[ikmh] // 查看硬盘使用容量 h = human        
du -[acs bkm] 目录  //查看档案的容量
        du -sh /share/dld/            // 查看某个目录的大小
        du --max-depth=1 -h  ./       // 查看一级目录的大小
top -b -n 1    // 查看CPU,内存
      top里显示的所有的cpu加起来的使用率,你的机子是多核吧,你运行top后按大键盘1看看,可以显示每个cpu的使用率,
从系统文件得到系统信息
    pid:      /proc/num               
   cmd:      /proc/xxx/cmdline   
   task:     /proc/xxx/task
   status:   /proc/xxx/status : short_cmd | state | ppid | time ...:
   route:    /proc/net/route   
   netstat:  /proc/net/tcp
   uid/gid:  stat("/proc/xxx", &sb)   getpwuid(uid)              

重定向

0输入  1输出  2错误
    ls >/dev/null   2>&1        // ls的标准输出不显示,标准错误同标准输出一样处理
    cmd < file                  // file作为cmd的输入 
    cmd 2>> file                   // 把 stderr 重定向到 file 文件中(追加)  
   cmd 1>file                      // 把标准输出重定向到文件。 1> 等同于 >,   0< == <
   echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward   // 是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案
    cmd <  inputFile  >  outputFile // 
   cmd < &m                     // 把文件描述符m作为标准输入

常用命令

find . -type d -name "*.svn"|xargs rm -rf
find . -name "*.sh" -exec chmod +x {} \;         
        find . -ctime 1         // 一天内新增的目录或档案
         find . -newer .bashrc   // 比 .bashrc 还要新的档案
         find . -user test       // 拥有者为 test 的档案 
                         find | grep "mux"         // 文件名含有mux的
                         find | xargs grep "mux"   // 文件内容含有...
                      find | wc -l     // 统计行数,即文件个数  
tar zxvf xxx.tar.gz -C newDir  // -C:在新目录中解压; -z zip; -x extract; -v verbose; -f archFile 
    tar zxmvf openssl-1.0.1e.tar.gz  // 可以用 -m参数来把文件的时间(modify time)设置为当前系统的时间
          或者解压后修改每个文件的时间  find . -exec touch -am '{}' \; 
    tar zcvf SMBIOS.tar.gz  SMBIOS/      // 压缩 : -c creat/compansion
    tar jxvf FileName.tar.bz2            // 解压bz2 :  -j  
    tar jcvf FileName.tar.bz2 DirName
        tar tvf xxx.tar.gz  // 查看包里的内容                    
档案与目录管理: ls, cp, rm, mv, basename, dirname, 
    rm  -rf  XXX     // 删除以及子目录
     ll -trh         // t=time, r=reverse, h=human
    ll | grep "^d"   // 查看目录,查看文件 grep "^-"
    basename /etc/fstab   //   fstab
    dirname /etc/fstab    //   /etc
    mkdir  -p XXXdir; touch XXXfile   // 创建目录(-p 存在不创建)以及文件
档案与目录权限: chown, chmod, umask, chattr, lsattr, 
    chmod -R 777 XXX  //  -R: 子目录也 
         r=4, w=2, x=1;  Usr/Group/Other/All ;   // 对于目录, r=列出文件, w=增删文件, x=进入目录
     ls -l /usr/bin/passwd   -rwsr-xr-x    // 以lidanding用户进入linux, 在执行时具有root权限 ; 若无x属性,则为大S
        suid = 4, guid = 2; Set UID ( SUID ) 的主要功能是在『某个档案执行的期间具有档案拥有者的权限』
         具有 sticky bit 属性的该”目录”下的档案,其档案或目录只有档案拥有者及 root 才有权力删除!
             755 + sticky bit = chmod 1755 file  // sticky == 1  
    文件属性:只能添加,不可修改。。。 +i   // 文件不可改变  
          lsattr ../showCmd.c                   //  ------------- ../showCmd.c
         sudo chattr +i ../showCmd.c
         lsattr ../showCmd.c                   //  ----i-------- ../showCmd.c
         sudo rm -rf ../showCmd.c        //   rm: cannot remove `../showCmd.c': Operation not permitted             
文件中字符替换
    替换一个文件: cat file|sed 's/old/new/g' > file2
    批量替换:    sed -i "s/oldString/newString/g" `grep oldString -rl /path`  
                grep oldString -rl /path | xargs sed -i "s/oldString/newString/g" 
window,linux文件转换(win: /r/n == unix: /n,   so need to del /r )     
       回车(return to head)== \r == ^M ==CR == 0D 
      换行(new line)      == \n == ^J ==LF == 0A                        
  在linux上检查window文件是否非法:            
        cat -v filename // cat -A winFile 
       :set ff=unix   // 用vi来查看                               
  文件转换win--->unix         
        dos2unix  winFile  unixFile     
        :%s/^m//g   // 用vi来删除              
文件查看: cat, tac, more, less, head, tail, nl, od, 
     wc -l file    // -l 行数  -w 字数  -c 字符
     cut -b5-9 file   // 输出文件的5-9行
     echo "a b c" | cut -d' ' -f 2  //   -d 分隔符  -f 第几个域   结果:bc
    cat >> log.txt << ding   // 在log.txt中通过命令行输入,以ding结束,否则以ctrl+D结束
     less xxx.c   // 可上下翻页,可/Half 按 n 查找
     nl xxx.c   // == cat -n  显示行号
     sudo od core-CLI-759-1331002286  // 查看二进制文件
查找文件或目录: which, whereis, locate, find, 
    locate dld       // 记录在数据库文件中,所以先要同步 $ sudo updatedb
    whereis -b ls    // 也是数据库,只找到执行档?
     which ls         // 根据 PATH, 只找执行档
# lsb_release  -a  // 查看是什么linux系统以及版本  == cat /etc/issue
# uname -a         // 查看处理器,硬件平台等
# file /bin/ls     // 查看文件属性,文件类型
type -a pwd        // 查看命令类型,是否是shell builtin
# getconf LONG_BIT  // 查看系统的位数
cd /media/XXX     // enter linux CD 
多命令处理      
      find -type f | xargs dos2unix   // 批量转换      
      tar   lastfile.tar.gz  `find . -mtime 1 -type f -print`   // 将 `命令执行的结果` 当做参数
      ls -l && pwd      // first is ok, then exec second
     cp 1.txt 2.txt || echo "fail to cp 1 to 2"     // first is fail, then second

文字文本处理

正则表达式
     // js中运用:用户名只能: 字母 数字 _ ()
          var usern = /^[a-zA-Z0-9_\(\)]{1,}$/;
          !username.match(usern)          
    ^...$              // ^开头  $结尾   . 点为任意字符数字  ^$ 空行
        [Aa]\{2, 4\}       // A或a 出现2到4次 
        [^0-9\$]           // ^在这里表示非,非数字或美元标识,
        [Dd|ld]\.          // Dld. dld. 
       以一个句点和两个数字开始   ^\.[0-9][0-9]
       至少一个小写字母   [a-z][a-z]* 
       日期格式d d - m m - y y y y   [0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}
       以t h e开头行     ^[the]
       包含m a y大写或小写字母的行   [mayMAY]
       匹配任意行  [^.*$]
sed :以行为单位,处理字串的增,删,改
           sed [-nefr] [动作]  文件         // 动作:del, read, write, quit, print,          
             TLINE=`sed   -n   '/^exit 0$/='   $0`        // =行数   `反引号`  $0这个表示脚本文件
                sed   "1,${TLINE}d"   $0 >"${TMP_PATH}/wiucs.tar.gz"        // d删除
                sed  -n  '1,$p'  a.txt                       // 打印1到最后一行;$表示最后一行
                sed  -n  -e  '/\$/'p  -e  '/\$/='  a.txt    // 打印最后一行,以及它的行号; =表示行数;-e 多个条件
                sed -i "s|\.\./wiucs-cvt|/opt/wiucs-cvt|" webmCvtServer.js
awk :以行为一次处理单位,以字段为处理单元,适用于数据库表  
       awk    '条件类型1{动作1}    条件类型2{动作2}'    filename
        awk  '{print $0}'  data.txt    // 打印   $0 == 所有域,$2 == 第二列 
          awk  '{if($1~/34/)  print $0}'  data.txt   // ' { if() print } '
        awk  '$2 == "dld" {print $0}'  data.txt  //  ' ==  {print} '
        awk  'END  {print NR}'   data.txt         // NR == 行个数  NF == 域个数
          awk  -F/  '{print $NF}'  // 当前目录名字,-F 设置域分隔符
grep  :以行为单位,提取行中的字符串
       grep [-acinv]    '搜寻字符串'    filename
        grep -c "48" data.txt  // count: data.txt中有几行包含48
        grep -n "48" data.txt  // num: 打印出行号以及行
          grep -v "48" data.txt  // 打印出不包含的行
          grep -E '1|73' data.txt   //扩展模式,正则表达式 查找含有1或者73的行
      ll |grep  '^d'    // 仅仅查询目录, grep '^[^d]'  查询非目录
      grep -r sys_getenv * // grep   根据文件的内容查找

shell

shell函数
    NAME="aa bb"
    functionA(){  // 
 	echo $1  // 这里的$1是函数的参数
 	echo $2  // 这里的$2是函数的参数 
    }
    functionA $NAME   $1  // 这里的$1的是脚本的参数,结果: aa \n bb
    functionA "$NAME" $1  // 加引号后作为整体传入参数,结果: aa bb \n cc
     ./funcA cc :  结果如上
shell脚本做成命令
    chmod +x xxx.js
    sh xxx.js stop // 执行脚本 
    cd /usr/bin ; ln -s xxx.sh wiucs // 软链接成命令
    wicus stop // 执行命令
语法
     num=2
      echo "this is ${num}nd"  // 结果:# this is 2nd,要带括号,否则不认得numnd
    echo '$SHELL' = echo \$SHELL  // 输出为 $SHELL,  
      echo "$AA" == echo $AA // 输出为AA的值
    [ -x "file" ] || { echo "can't be exe"; exit 1; }     // -n 非空串  -z  空串 -x可执行 -f 文件
    [ "$var" = "$var2" ]  [ $# -lt 3 ] // 等于,
    if ...; then  // 用分号代表括号,简写elif,倒序esac, 结束done,列举in
位置变量 :  
    $?  检查脚本返回的状态;
     $0  脚本的名字;
     $1  第一个参数;
     $*  所有的参数
     $#  参数的个数;  
     $$  processID 
常用
    USER='id -u'    // 用户的id, root == 0.   `这个不是单引号,是左上角的那个反引号`                               
    read -p "yes or no?" ANSWER  // echo $ANSSER




 

 

磁盘管理: 分区 fdisk --> 格式化 mke2fs --> 挂载 mount
     fdisk -l     // 直接查看分区情况
         fdisk  磁盘  // enter
         m           // 帮助 manual
         p            // 查看 print

    系统最多支持4个主分区,为解决分区不够的问题,又产生了扩展分区(extended)的概念。
            这样,系统最多可以有3个主分区,一个扩展分区。在扩展分区中,又可以再分为多个逻辑分区,能从5分到16
    mke2fs /dev/fd0    // 格式化软盘为ext2:linux标准档案系统,包括inode table(档案的属性以及内容的指针),block area(档案的内容)
          -j          // ext3
         -b -i      // 修改 block, inode 大小
         -c -L     // 检查, 标签
    e2label  分区  label
    mount  -t ext2   /dev/sdb   /home   // 挂载  参数  谁  挂在哪里 

          mount   -t nfs   -o nolock,rsize=1024,wsize=1024   XXXIP:/share   /home/ding     // 把网络上其他用户的共享文件夹,挂载到本地文件夹

          mount   //IP/winFolder    /linux/folder  -o username=wh1103028,passwd=wh118991!     // 把window下的文件夹,挂载到linux下。 

                   cat /etc/fstab  // 设定开机时即挂载的方式  # <file system> <mount point>   <type>  <options>       <dump>  <pass>

                           写到 fstab(smbfs == cifs) :   //IP/VOIP    /home/.../voip   cifs   defaults,auto,username=admin,passwd=wh1103028!    0    0   
          -a -l -h -V  // 挂fstab中的, 显示目前挂的 , 帮助, 版本
          mount -o remount,rw /    // 根目录重新挂载为读写
          unmount /dev/sda         // if 强制,退出目录后执行,卸载后才能把磁盘移走

    切割与格式化硬盘:分区fdisk, 格式化mke2fs, e2label, mknod,
    检查硬盘坏轨与数据同步化写入:磁盘检查fsck, badblocks, sync,
    关于软盘开机片: 启动mkbootdisk, 低格fdformat, 
    虚拟内存 Swap: swap partition, swap file, dd, mkswap, swapon, swapoff, 

VI

Vi有三种基本的工作模式:指令模式、文本输入模式、行末模式。
      指令模式(Command Mode)   输入 a、i、o >>>    文本输入模式(Input Mode)
                              <<<按ESC进入        
      指令模式(Command Mode)   输入 : 冒号>>>      末行模式(Last line Mode)
                                   <<<指令错误
  指令模式
          光标 :  光标移动同方向键  ( h 左    j 下   k 上   l 右)   ;    第一列的上,中,下(H M L)
          命令:   x(删除当前光标字符) / X(删除光标前的字符)    d(删除一行) / D(删除一行中从光标开始后面的字符)
               i(光标前添加字符) / I (行首插入)    a(光标后面添加字符) / A(行尾添加)       o(下方插入空行) / O(上方)
  末行模式
          显示行号:   :set nu
         退出:      :wq   :q! (不保存)  :x
         查询:      /hi (查找hi)    n(顺序找下一个) / N(反序) 
         替换:  
  复制: 
          指令模式下:  复制3行/粘贴:3yy/p;    复制部分:v --->l------>y, p
         末行模式下:  1, 3  co 5  //1到3行复制到第五行; 命令:co, m, d,   // copy, move, delete
         指令+末行  :  用ma,mb,mc在指令模式下做标志, 'a, 'b  m 'c  //  把a,b标记之间的行复制到c处
          多个文件之间的复制
             vi -o  1.sh  2.sh   或者  :sp 2.sh    //  ctrl + ww  == ^ww, 进行切换; sp == split


 

linux bin文件的制作: bin =  install.sh(安装脚本) + xxx.tar.gz(安装文件)

        cat install.sh  xxx.tar.gz > yyy.bin (因此,bin中的install.sh需要把它后面的二进制数据恢复成xxx.tar.gz,然后执行安装过程)

        sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/xxx.tar.gz" 2>/dev/null      //去掉第一行到"exit 0"间的数据,后面的数据保存为xxx.tar.gz

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章