Linux基本的命令

0、Linux目录所放的文件解释
    1)/etc/default/useradd  添加用户的配置文件
    2)/etc/passwd  用户属性,所有的用户信息
    3)/etc/shadow  用户的密码文件,安全用户账户信息
    4)/etc/shells  指定了当前环境可以用的安全的环境变量
    5)/etc/login.defs 存储添加用户的一些默认值,安全密码套件
    6)/etc/group 组账户信息
    7)/etc/gshadow 安全组账户信息
    8)/dev/null 黑洞文件 #id user1 &> /dev/null   //执行结果不需要
    9)~/.bash_history  存放history命令
    10)/var/log/wtmp 存放用户登录历史及重启历史
    11)cat /proc/partitions 存放文件分区的信息  
        当修改完分区之后,这个文件可能不会立即更新,执行#partprobe 命令,重读分区内容,写入到这文件
之中
    12)/etc/fstab 包含了你的电脑上的存储设备及其文件系统的信息
        os在初始化的时候,会自动挂载此文件中定义的每一个文件系统
        挂载设备的时候,也可以把所要挂载的文件系统,写入到这个文件中去,再执行#mount -a 就ok了
    13)/etc/sysconfig/network-scripts/ifcfg-ens33  网络的配置文件
    14)/proc 文件夹里面的以数字命名的文件夹对应的是每一个进程
    15)/var/log/messages 系统标准错误日志信息:非内核产生引导信息,各子系统产生的信息
    16)/etc/logrotate.conf 存放管理日志信息的文件
    17)/etc/log/maillog 邮件系统产生的日志信息
    18)/var/log/secure 用户登录产生的日志信息
    19)/etc/redhat-release 存放centos版本信息
        
1、用户管理
    1)添加用户
        首先获得管理员权限
        #su
        然后添加用户,设置密码
        # useradd nii
        # passwd nii
    2)用户管理命令:
        useradd : 添加用户
            -c : 添加注释
            -d : 设置家目录
            -s : 指定shell的路径(shell必须合法)
            -g : 基本组
            -G : 附加组
            -M : 不为用户创建家目录

        userdel : 删除用户,默认不删除家目录
            -r : 删除家目录

        passwd :给用户设置密码
            -d    删除使用者的密码, 只有具备超级用户权限的使用者方可使用
            -n    修改密码的最小天数,也就是mindays内不能再次修改密码
            -x    修改密码的最大天数,也就是maxdays天之后必须修改密码
            –stdin   从标准输入中读入新密码(此时可以看见设置的密码)

        usermod : 修改使用者账号    

        id : 显示指定用户或当前用户(当未指定用户时)的用户与组信息

        chsh : 更改用户的shell
            -s : 指定用户登录的shell           #chsh -s /bin/csh
            -l : 显示/etc/shells中的shell列表   #chsh -l 

        chage : 密码失效是通过此命令来管理的
            -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
       -M 密码保持有效的最大天数。
       -W 用户密码到期前,提前收到警告信息的天数。
       -E 帐号到期的日期。过了这天,此帐号将不可用。
       -d 上一次更改的日期
       -I 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
       -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期
    3)组管理命令:
        groupadd : 创建组
            -g : 设置组 ID 值    

        groupdel,groupmod

        gpasswd : 组管理命令
            用法:gpasswd[-a user][-d user][-A user,...][-M user,...][-r][-R]groupname
            -a:添加用户到组
            -d:从组删除用户
            -A:指定管理员
            -M:指定组成员和-A的用途差不多
            -r:删除密码
            -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组 
    4)权限管理:ls -l 可以查看文件的权限
        chown : 只有管理员可以使用 (#chown file own)
            -R : 修改文件本身以及内部文件的属性
            --reference=file1 file2  把file2的权限改为和file1的权限一样
            #chown -R admin.root /home/openstack/(改变一个文件的属主.属组)

        chmod(改变权限)
            chmod mode file/directory
                -R 修改文件本身以及内部文件的属性
                --reference=file1 file2  把file2的权限改为和file1的权限一样   
        grammar:
              chown root /u 将 /u 的属主更改为"root"。
              chown root:staff /u 和上面类似,但同时也将其属组更改为"staff"。
              chown -hR root /u 将 /u 及其子目录下所有文件的属主更改为"root"。
        mask(遮罩码)
            文件的权限:666-umask
            目录的权限:777-umask
            文件默认没有执行权限。
        chgrp:改变文件的组所有权
example:

2、ls的用法
ls 直接显示文件
    -l: 长格式显示
    -h: 做单位转换
    -a: 显示以.开头的隐藏文件
    -d: 显示目录自身属性
    -r: 逆序显示
    -i: 正序显示,前面可以显示inode号
    -R: 递归显示(recursive)
        drwx------. 2 admin admin     23 6月  13 19:55 ssh-j777abtloqB1
        (drwx------)-- >文件权限,9位,每三位一组:rwx(可读、写、执行) rw-(可读、可写、不可执行)
        (2)--> 是文件硬链接的次数
        (admin)-->文件的属主(owner)
        (admin)-->文件的属组(group)
        (23)-->文件的大小(size),单位是字节
        (6月  13 19:55)-->时间戳,显示最近一次修改的时间

3、type:显示指定属于哪种类型(内部、外部)
内部
外部

4、hash 缓存
知道系统从启动到现在一些指令所代表的路径所用的次数

5、touch、stat命令和
最常用用法:touch fileA
如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;
如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。

stat 会获得文件的详细信息

6、cp与scp
    1)scp复制文件
        scp local_file remote_username@remote_ip:remote_folder  
    2)scp复制目录
        scp -r local_folder remote_username@remote_ip:remote_folder  

    3)scp从远程服务器复制到本地服务器 


        从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
    4)scp复制文件或目录改名字
        scp local_file remote_username@remote_ip:remote_folder/new_name  
    5)cp与scp一样

7、install命令
      -d :创建目录
       和cp差不多的功能(man install)来查看

8、获得Linux当前最新的内核版本号和版本
内核:
uname -a
cat /proc/version
uname -r
版本:  
cat /etc/redhat-release

8、查看文件的前几行或者后几行
head -n 5 file 查看文件的前5行,如果没有(-n 5),则默认显示前10行
tail -n 5 file查看文件的后5行,如果没有(-n 5),则默认显示前10行
tail -f :查看文件尾部,不退出,等待显示后续追加至此文件的新内容

9、cut用法(文本显示剪切)
    -d : 制定字段分隔符,默认是空格
    -f :制定要显示的字段
        -f1第一个字段
        -f 1,3 显示第一个和第三个
        -f 1-3 显示第一个到第三个
    -b : 显示字节数
    -c : 显示字符
example:
     cut -d : -f1 /etc/passwd

10、sort用法(文本显示排序)
sort file
    -n : 数值排序
    -r : 逆序排序 
    -t : 字段分隔符    sort -t : -k3  /etc/passwd 
    -k : 以哪个字段为准,来进行比较
    -u : 重复的,只显示一次  sort -u a.c

11、uniq的用法(从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出)
 -c, --count           在每行前加上表示相应行目出现次数的前缀编号
    -d, --repeated        只输出重复的行
    -D, --all-repeated[=delimit-method    显示所有重复的行
    -f, --skip-fields=N   比较时跳过前N 列
    -i, --ignore-case     在比较的时候不区分大小写
    -s, --skip-chars=N    比较时跳过前N 个字符
    -u, --unique          只显示唯一的行
    -z, --zero-terminated 使用'\0'作为行结束符,而不是新换行
    -w, --check-chars=N   对每行第N 个字符以后的内容不作对照
12、wc的用法(文本统计命令)
    
    wc - print newline, word, and byte counts for each file
    下面显示的是(行数、字符数、字节数),查看帮助可以只显示某一个数值
 -c, --bytes打印字节数
    -m, --chars  打印字符数 
    -l, --lines  打印行数 
    -L, --max-line-length  打印最长行的长度
    -w, --words 打印单词数
13、tr的用法,实现字符转换(从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。)
    tr ‘ab’ ‘AB’ file  将文件里面的小写a、b,换为A、B
网址更详细讲解:http://linux.51yip.com/search/tr

14、命令行跳转
    Ctrl+a : 跳到命令行首
    Ctrl+e :跳到命令行尾
    Ctrl+u :删除光标到命令行首的内容
    Ctrl+k :删除光标到命令行尾的内容

15、history(查看历史)
    -c 删除所有条目从而清空历史列表。
    -d 偏移量 从指定位置删除历史列表。   
    -a 将当前绘画的历史行追加到历史文件中
    -n 从历史文件中读取所有未被读取的行
    -r 读取历史文件并将内容追加到历史列表中
    -w 将当前历史写入到历史文件中  并追加到历史列表中 
    -p 对每一个 ARG 参数展开历史并显示结果 而不存储到历史列表中 
    -s 以单条记录追加 ARG 到历史列表中

echo $HISTSIZE 可以查看history默认保存的条数,默认为1000(环境变量)

!n : 执行命令历史中第n条的命令
!-n : 执行命令历史中倒数第n条命令
!! : 执行上一条命令

16、alias(命令别名)
    alias cls=clear
    alias rm='rm -i' 
取消别名:
    ualias cls

环境变量存放在/etc/bashrc文件中(全局)
    1)用vim /etc/bashrc打开bashrc文件
    2)在最后一行添加alias cls=clear,保存退出
    3)执行source ~/.bashrc命令,来生效,这样所有登陆的用户都可以使用cls这个命令了
环境变量存放在/etc/bashrc文件中(自己用户)
    1)执行 #cd ~ 切换到自己用户的根目录下面 /home/user_directory
    2)vim .bashrc 在后面一行加上cls=clear
    3)保存退出就ok了,该用户就可以使用cls命令了
16、命令替换:$(COMMAND)(引用命令) ${Enveionment}(引用变量)
例如:echo "The directory is $(pwd)"
输出:The directory is /home/admin/test

例如(创建一个文件,文件名里面包含当前时间):touch file-$(date +%F-%H-%M-%S).c
产生一个文件:                            file-2015-06-15-14-51-03.c


16、通配符的使用(man 7 glob)可以查看帮助文档
    * : 统配任意长度的任意字符
    ? : 任意匹配单个字符
    []: 匹配制定范围内的任意单个字符
         [abc],[a-z],[0-9],[0-9a-zA-Z]
         [:space:] 空白字符
         [:punct:] 标点符号
         [:lower:] 小写字母
         [:upper:] 大写字母
         [:alpha:] 大小写字母
         [:digit:] 数字
         [:alnum:] 数字和大写字母
    [^]:匹配指定范围之外的任意单个字符
           

examle:
    1)显示以a或m开头的文件   ls [am]*
    2) 显示所有文件名包含数字的文件: ls *[0-9]*
    3) 显示文件中包含非字母或数字的文件 ls *[^[:alnum:]]*
warning:
有时候通配符不能完全匹配到所需要的文件,就需要正则表达式来匹配


16、which、whereis、locate、find命令区别
    1)which  查看可执行文件的位置 
        是通过PATH环境变量到该路径下查找可执行文件,所以基本的功能是寻找可执行文件
        grammer: which passwd(which 可执行文件的名称)
    2)whereis 查看文件的位置 
        grammer:  whereis passwd (whereis 文件或目录名称)
        -b : 只找二进制文件 
        -m: 只找在说明文件manual路径下的文件 
        -s : 只找source源文件 
        -u : 没有说明文档的文件 
    3)locate 配合数据库查看文件的位置

    4)find 从磁盘上查找
    时间查找参数: 
        -atime n :将n*24小时内存取过的的文件列出来 
        -ctime n :将n*24小时内改变、新增的文件或者目录列出来 
        -mtime n :将n*24小时内修改过的文件或者目录列出来 
        -newer file :把比file还要新的文件列出来 
    名称查找参数: 
        -gid n       :寻找群组ID为n的文件 
        -group name  :寻找群组名称为name的文件 
        -uid n       :寻找拥有者ID为n的文件 
        -user name   :寻找用户者名称为name的文件 
        -name file   :寻找文件名为file的文件(可以使用通配符) 

17、frofile和bashrc介绍,及用户登录读取配置文件的顺序
profiles类文件功能:
    设定环境变量
    运行命令或脚本

bashrc类文件功能:
    设定本地变量
    定义命令别名

bashrc,profile配置文件所放位置:
    全局配置
        /etc/profile, /etc/profile.d/*.sh, /etc/bashrc
    个人配置:
        ~/.bash_profile, ~/.bashrc

登陆式shell:
    正常通过某终端登录
    su -USERNAME
非登陆式shell:
    su USERNAME
    自动执行的shell脚本

登陆式shell如何读取配置文件?
    /etc/profile --> /etc/profile.d/*sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
非登录式shell如何读取配置文件?
    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

example:在bash_profile最后添加 echo "Welcome to come admin ,date id $(date)",则在进入该用户的时候会提醒用户。

18、IO重定向和管道
输出重定向:
    > : 覆盖输出  #ls /etc > a.txt
    >>: 追加输出  #ls /etc >> a.txt

    2>:重定向错误输出
         当使用#ls /etcc >> a.tx
              #cat a.txt 则会报错
    2>>:追加输出

    &>:重定向向标准输出或错误输出至同一个文件
    
    #set -C :禁止对以及存在的文件使用输出重定向
        #ls /etc >| a.txt 强制覆盖输出
    #set +C :关闭禁止覆盖功能

输入重定向:
    < : 输入重定向符号
    <<: 此处生成文档  #cat << EDN

管道:
    | : 符号

19、tee(用来将标准输入的内容输出到标准输出并可以保存为文件) 
    -a 附加到文件
    -i 无视中断
grammar: #tee file.c

20、grep 根据模式,搜索文本,并将符合模式的文本显示出来
基本正则表达式:  
  -i : 忽略大小写
    --color :高亮显示
    -v : 显示没有被匹配到的行
    -o :只显示被匹配到的字符串
    -w :强制匹配字符一样
    -B, --before-context=NUM  打印以文本起始的NUM 上n行
    -A, --after-context=NUM   打印以文本结尾的NUM 行 下n行
    -C, --context=NUM         打印输出文本NUM 行,上下都n行

元字符:
    .:匹配任意单个字符  #grep -i 'r.t' /etc/passwd
    * : 匹配其前面的字符任意次  #grep a*b /etc/passwd 匹配前面a出现任意次,最后跟个b的字符
    .*:代表任意长度的任意字符
    \? : 匹配其前面的字符1次或者0次
    \{m,n\} : 匹配前面的字符,至少m次,至多n次
    [] : 匹配指定范围内的任意单个字符
    [^]: 匹配指定字符外的任意单个字符
    [:digit:]:数字
    [:space:]:空白字符
位置锚定:
   ^ :锚定行首,此字符后面的任意的任意内容必须出现在行首  # grep '^r..t' /etc/passwd
   $ : 锚定行尾,次字符前面的任意内容必须出现在行尾
   ^$:空白行

    \< : 锚定词首,其后面的任意字符,必须作为单词的词首出现
    \> : 锚定词尾,其前面的任意字符,必须作为单词的尾部出现
分组:
    \(\) : \(ab\)*,ab在前面出现任意次
        后向引用:
            \1 : 引用前面出现的第1个括号内容   #grep '\(l..e).*\1' /etc/a.c
            \2 : 引用前面出现的第2个括号内容

扩展正则表达式:
    grep -E :使用扩展正则表达式
    egrep:使用扩展正则表达式
    
    字符匹配 : 
        . : 同上
        []: 同上
        [^]: 同上
     次数匹配:    
        * : 同上
        ? : 同上
        + : 匹配其前面的字符至少1次
        (m,n):不需要再加 \  
        
     位置锚定:
         ^: 同上
         $: 同上
         \<: 同上
         \>: 同上
     分组:
        \1: 同上
        \2: 同上
    或者:
        | : 或者  # grep -E 'a|aab' a.c     
        
grammar:找出ip地址
    #ifconfig | egrep '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>\.){3}(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9])\>)'   (\.)指的就是一个 .   {3}就是重复三次前面的括号

21、查看环境变量命令
    env
    export    
    printenv

22、bash脚本(shell)编写
    warning:
        1、脚本执行结束,变量会被撤销的。
        2、只能包含数字、字母、下划线,并且不能以数字开头
        3、最好做到见名知意
    1)判断一条命令是否执行成功
        $? : 上一个命令的执行状态返回值
        程序执行:可能有两种不同的返回值
             0 :正确执行
             1-255:错误执行   1 2 127 系统预留
    2)实现条件判断
        1、条件测试表达式 [ expression ]
        2、整数比较
            -eq : 测试两个整数是否相等 相等0 不等 1 #[ $A -eq $B ]
            -ne : 测试两个整数是否不等。相等 1,不等 0
            -gt : 测试一个数是否大于梁歪一个数: 大于 0, 否侧 1
            -lt :测试一个数是否小于另外一个数: 大于 1,否则 0
            -ge :大于或等于
            -le : 小于或等于
        3、命令间的逻辑关系
            逻辑与: &&
            逻辑或: ||  
        4、if语句的用法(单分支) #man test 查看用法
             if id user5 &> /dev/null ; then
              echo "user is exist"
             else
               echo "user is not exist"
             fi
            
        5、if语句的用法(多分支)
            if 判断条件 1 ; then
                statement1
            elif 判断条件 2 ; then
                statement1
            .....
            else
                statement  n
             fi
        6、算数运算表达式
            let 算数运算表达式:
                #let C=$A+$B
                += :
                /= :
                %= :
            
            $[算数运算表达式] : 
                C=$[$A+$B]
            $((算数运算表达式)):
                C=$(($A+$B))
        7、退出脚本
            exit num: 退出脚本 num 不能为0 ,
            如果脚本没有明确定义退出状态码,最后执行一条命令的退出码即为脚本的退出码
        8、文件测试
            -e file : 测试文件是否存在  [ -e /etc/inittab ]
            -f file : 测试文件是否为普通文件
            -d file : 测试指定路径是否为目录
            -r file : 测试文件对当前用户而言是否可读
            -w file : 测试文件对当前用户而言是否可写
            -x file : 测试文件对当前用户而言是否可执行  [ -x /etc/rc.d/sysinit ]
        9、测试写的脚本是否有语法错误
            bash -n file.sh : 没有错误不显示,有错误显示
            bash -x file.sh : 单步执行脚本,比较常用
        10、bash的变量类型   (脚本可以从终端读取参数)
            位置变量:
                $1 : 
                $2 :
                shift n:可以一次踢出多个,默认踢出1个
            特殊变量:
                $? :
                $# : 参数的个数
                $* : 参数的列表
                $@ : 参数的列表
                grammar:(提示用户必须输入参数)(位置参数 $1,$2....)
                    if [ $# -lt 1 ] ; then  
                        echo "You must input parameter"
                        exit1
                    fi     
            
        11、字符串比较
            ==/= : 测试是否相等 相等为真,不等为假
            != : 测试是否不等,不等为真,相等为假
            > : 测试是否大于
            < : 测试是否小雨
            -n :测试指定字符串是否为空,空为真,不空为假
            -s :测试字符串是否不空,不空为真,空为假
23、sed命令
参考资料:http://linux.51yip.com/search/sed
    1)使用方法
        sed [option] 'AddressCommand' file
    2)StartLine,EndLine
        '1,3' : 第1行到第三行
        $ : 最后一行
    3)模式匹配 /Exp/
        /root/ : 匹配到root字符串
    4)/pattern1/,/pattern2/
        第一次被pattern1匹配到行开始,至第一次被pattern2匹配到的行结束,中间所有的行
    5)LineNumber 指定的行
    6)StartLine,+N
        从startLine开始,向后的N行
option:
    -n :静默模式,不显示模式空间中的内容
    -i :直接修改原文件
    -e :可以同时执行多个脚本
    -f :把文件的脚本来处理文件
        #sed -f /path/to/scripts file  把scripts文件里的脚本,一个一个作用在file文件上
    
command:
    d : 删除符合条件的行    
        #sed '1,3d' /etc/inittab  删除第1到第3行        
        #sed '/bash/d' /etc/passwd 删除有bash字符串的行
        #sed '/^$/d' stuSed.c 删除空白行
    p : 显示符号条件的行
        #sed '/bash$/p' /etc/passwd  以bash结尾的行,显示了两次
        #sed -n '/bash$/p' /etc/passwd  以bash结尾的行,显示一次,不显示模式空间中的内容
    a \string : 在符号条件处,新增一个strin的新行,\n可以换行        
        #sed '/target$/a\wangzhengjun' /etc/inittab                  
        # sed '/target$/a\wangzhengjun\nis good student' /etc/inittab
    i \string :在指定的行前面添加新行,内容为string
    r file :将指定的文件内容添加至符合条件的行处
    w file : 将指定范围内的内容,另存至指定的文件中去
        #sed '1,3w /home/admin/a.txt' /etc/passwd
    s/pattern/string/ : 查找每一行的pattern样式字符串替换成 string,默认只替换每一行中第一次被模式匹配到的字符串
        # sed 's/bash/BASH/' /etc/passwd   
        g : 全局替换
        i :忽略字符大小写
    s///:s###,s@@@一样
        必须是同时出现三个一样的时候才可以用#和@,否则只能用/
    \(\) : 引用
        \1,\2
        前向匹配: #sed 's/l\(..e\)/L\1/g' a.txt 把l..e变为 L...e
        后向匹配: # sed 's/\(l..\)e/\1E/g' a.txt 
    & : 引用模式,匹配整个字符串
        #sed 's/l..e/&r/g' a.txt  把每一行的l..e,都变为l..er
        
24、bc命令(Linux简单的计算器,能进行进制转换与计算)
    obase=2; :以二进制显示
    sacle=2; :小数点后面两位
    #echo "scale=2;34/5;" | bc
25、seq命令
        seq [起始数] [步进长度] [结束长度]
        #seq 1 100
26、for,while,sleep,continue,until循环,function函数
    1)for
        for index in {1..100} ; do
              sum=$[$sum+$index]
         done
         
    2)while
            
                死循环:
                    
    3)sleep 睡眠命令
        sleep 5 睡眠5s钟
    4)continue
        退出本轮的循环,直接进入下一轮循环
    5)break
        退出循环,和用法C语言一样
    6)until
        
        7)function
        1、定义函数
            
                    

        2、获取函数返回值    
            $?:函数执行的状态结果
            
        3、自定义函数返回值
            return # 函数直接返回
        4、给函数传递参数
            
         5、局部变量与全局变量
            全局变量,在函数内部也可以使用的。    
            局部变量默认可以在函数体外使用,但是加上local就限定只能在函数体内使用
         6、数组的使用
            
            echo ${#arr[1]} 查看每一个的字符个数
            echo ${#arr[*]} 数组中不为空的个数
            echo ${arr[*]} 显示数组中的所有的元素
        产生11个随机数,并找出最大的数:
                    
             产生SumNum个不相同的随机数:
                    



        
 27、vim编辑器的使用
    1)在文件中跳转
        vim + file : 直接跳到文件的最后一行
        vim +/pattern : 定位到第一次被pattern匹配到的行
    
        i : 在当前光标所在字符的前面,转为输入模式
        o:在当前光标所在行的下方,新建一行,并转为输入模式
     2)移动光标:exit
        G:跳到行尾  
        gg:回到行首 
    3)复制命令:
        yy:复制光标所在的行
        yG:复制至档尾
        p: 粘贴到光标后面  
        yy: 复制游标所在行整行。或大写一个Y。
        2yy: 或y2y复制两行。 ㄟ ,请举一反三好不好! :-)
        y^: 复制至行首,或y0。不含游标所在处字元。
        y$: 复制至行尾。含游标所在处字元。
        yw: 复制一个word。
        y2w: 复制两个字(单词)。
        yG: 复制至档尾。
        y1G: 复制至档首。 
        x:删除光标处的字符
        u:相当于Ctrl Z 撤销删
    4)新增一个编辑窗口:
        sp / Ctrl w s:水平拆分窗口
        Ctrl w v :垂直拆分窗口
        Ctrl w 箭头 : 上下左右切换窗口
        Ctrl w q:退出当前的窗口
        Ctrl w  :窗口之间跳转
    5)查找:
        :/admin :查找admin
    6)替换:
        :.,$-1s/admin/ADMIN/g 从当前行,到倒数第一行把admin,替换成ADMIN,全局替换
    7)分窗口显示多个文件
        vim -o :水平分割显示
        vim -O : 垂直分割显示
    8)配置vim
        set nu
        set tabstop
        syntax on  语法高亮
        set ai #设置自动缩进 autoindent
        set hlsearch 设置查找到的文本高亮显示或取消
    
28、locate,find文件查找
    1)locate:
        非实时,查找是根据全系统文件数据库进行,速度快   
        updatedb :手动生成数据库
    2)find: find 查找路径 查找标准 查找到以后的处理运作
        实时、精确、遍历指定目录中的所有文件完成查找、速度慢
        查找路径:默认为当前的路径
        查找标准:默认为指定路径下的所有文件
        处理运作:默认为显示
    3)find匹配标准
        -name file: 对文件名做精确匹配
        -iname file: 对文件名匹配的时候,不区分大小写
        -regx PATTERN: 基于正则表达式查找
        -user USERNAME : 根据属主查找
        -group GROUPNAME :根据属组查找

        -iud UID :根据UID查找
        -gid GID :根据GID查找

        -nouser :查找没有属主的文件
        -nogroup:查找没有属组的文件

        -size FILESIZE:查找文件大小
            +10M :大于10M
            -10M :小于10M
    4)组合条件
        -a :与
        -o :或
        -not :非
    5)时间匹配 [+|-]
        -mtime : 文件修改时间 (天)
        -ctime :改变的文件
        -atime : 访问时间
    
        -mmin : 分钟
        -cmin :
        -amin :
    grammar:
        #find /etc/ -type d 查找是目录的
        #find /etc/ -not type 不是目录的   
        #find -name a.txt -ls  找到文件之后并显示出来       
        
    6)-perm mode 权限匹配查找
        # find ./ -perm 777 -ls  在当前的目录下权限为777的匹配出来
    7)匹配到显示
        -print :显示出来文件
        -ls :显示文件的详细信息,和ls -l差不多
        -ok COMMAND {} \ ; 每一个操作都需要用户确认
        -exec COMMAND {} \ ;每一个操作不需要用户确认 
    8)xargs
        find /etc/ -size +1M | xargs  > /home/admin/a.txt
    9)查找目录
        # find / -name sqlite3 -type d
    
29、facl, setfacl 文件控制列表
    1)getfacl 获取文件访问控制列表
   
    2)setfacl 设置文件的访问控制列表
        -m : 设定
            u : UID:perm   # setfacl -m u:nii:rw shadow
            g : GID:perm
        -x :取消
           u : UID   # setfacl -x u:admin shadow 
           g : GID
30、显示用户命令
    1)w、who
        查看现在都有哪些用户登录到了系统上
    2)whoami
        查看现在登录到系统的用户是谁。
    3)last  /var/log/wtmp
       列出目前与过去登入系统的用户相关信息。
       #last -n 3 显示最近3次登录历史
    4)lastb  /var/log/btmp
        显示用户错误的登录次数
    5)lastlog 
        显示每一个用户最近一次的成功登录信息
        -u USERNAME : 显示特定的用户
    6)bashname
        $0 : 引用脚本的名称,执行脚本路径及名称 
    7)mail 发邮件
        # man shadow | mail -s "how are you" admin  (-s代表主题)
    8)hostname 显示主机名
        #hostname do 把主机名改为do
31、随机数生成器 :熵池
    /dev/random
    /dev/urandom
        #$RANDOM
32、case语句


 33、ln 在文件之间建立连接
    -i : 符号链接
        #ln -i myshell.sh /home/www  生成文件www和                           myshell.sh的idnode不一样     
        #ln myshell.sh /home/www
    -s:建立软链接
        软链接的文件大小是指向原文件的路径
    ln file.c file1.c :直接建立硬链接,两个文件的inode一样
34、du、df
du:  报告磁盘空间使用情况
    -a :显示对所有文件的统计,而不只是包含子目录。
    -b : 输出以字节为单位的大小,替代缺省时1024字节的计数单位。
    -s : 显示一个目录的大小,不包含子目录
    -h :显示以象用M表示二进制 的兆字节
df :  报告文件系统磁盘空间的使用情况
    -h : 用常见的格式显示出大小(例如:1K 234M 2G)
    -a : 列出包括BLOCK为0的文件系统
    -l : 只显示本地文件系统使用状况 
35、mknod 创建特殊文件    mknod [OPTION]... NAME TYPE [MAJOR MINOR]
    b      创建(有缓冲的)区块特殊文件
    c, u   创建(没有缓冲的)字符特殊文件,虚拟设备
    p      创建先进先出(FIFO)特殊文件

    -m :指定权限
        #mknod  -m 777  mydev c 22 44
36、fdisk 查看磁盘分区命令/ 
    -v : 打印 fdisk 的版本信息并退出. 
    -l : 列出指定设备的分区表信息并退出。 . 
    -u : 以扇区数而不是以柱面数的形式显示分区表中各分区的信息
管理分区:fdisk /dev/sda
    p : 显示当前的硬件分区,包括没有保存的改动
    n :创建新分区
    d : 删除一个分区
    w :保存退出
    q :不保存退出
    t :修改分区类型
    l :已知的分区类型列表
37、mkfs 高级格式化文件系统
    #mkfs -t ext3
38、Linux下如何找到一个文件
    1)找根,找根的 inode,找到根对应的磁盘块
    2)在磁盘块上存放的有var文件的inode号
    3)在目录表中找到var文件的磁盘块
    .......
39、 mke2fs 建立Linux系统使用的ext2或ext3
     -j :创建ext3类型文件系统
     -b :指定块的大小
     -L : 指定分区卷标
     -m # :指定预留给超级用户的块数百分比
        # mke2fs -m 5 /dev/sda1
     -i : 指定每个inode的字节数
     -N :指定inode的个数
     -F :强制创建文件系统
     -E :用户指定额外文件系统属性
40、blkid,e2label,tune2fs,dumpe2fs,fsck,e2fsck,mkswap,swapon ,swapoff,dd文件系统的一些其他指令
    blkid :查询或查看磁盘设备的相关属性
        UUID
        TYPE
        LABEL
    e2label : 用于查看或定义卷标
        e2label:设备文件 卷标:设定卷标
    tune2fs: 调整文件系统的相关属性
        -j: 不损害原有数据,将ext2升级为ext3;
        -L LABEL: 设定或修改卷标;
        -m #: 调整预留百分比;
        -r #: 指定预留块数;
        -o: 设定默认挂载选项;
        acl
        -c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
        -i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
        -l: 显示超级块中的信息;
    dumpe2fs: 显示文件属性信息
        -h: 只显示超级块中的信息
 
    fsck: 检查并修复Linux文件系统
         -t FSTYPE: 指定文件系统类型
         -a: 自动修复
 
    e2fsck: 专用于修复ext2/ext3文件系统
         -f: 强制检查;
         -p: 自动修复;
    mkswap:创建交换分区
        在创建交换分区前,要调整分区类型为82
        #mkswap /dev/sda1
    swapon /dev/sda8 挂载交换分区
        -a:挂载所有的的交换分区 所有在/etc/fstab文件中
    swapoff /dev/sda8卸载交换分区
    dd:复制的数据流
        if:数据来源
        of:数据存储目标
        bs:block size 复制文件的一部分
        count:复制的单位 #dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1  备份MBR
        seek=#:创建数据文件时,跳过的空间大小    
        # dd if=a.txt of=/home/a.txt
        创建一个64M的交换分区:
            # dd if=/dev/zero of=/var/swapfile bs=1M count=64
            # mkswap /var/swapfile 创建交换分区
            #swapon /var/swapfile 挂载交换分区
41、free,top 查看系统内存
    1)free
        -m:以M为单位显示
        -h:以以可读形式显示容量
    2)top 监控系统性能的
        M:根据驻留内存大小进行排序
        P:刚那句cpu的利用率进行排序
        T:根据累计时间进行排序
        
        l:是否显示平均负载和启动时间
        t:是否显示进程和cpu状态相关信息
        m:是否显示内存相关信息

        c:是否显示完整的命令行信息
        q:退出
        k:终止某个进程

        -d # :设置刷新时常,单位是秒
                #top -d 1
        -b:批模式
        -n #:在批模式下,共显示多少批
        
        1 line:当前时间 运行了56分钟 3个用户 平均负载 5分钟 10分钟 15分钟的平均负载
       2 line:当前有219个任务 1个正在运行 218个休眠 0个停止 0个僵尸进程
       3 line:us(user space)用户空间 sy(system space)内核空间 ni(nice)值 id空闲百分比 wa(wait)等待IO所占用的时间 hi(hard interrupt)硬件中断所占用时间 si(soft interrupt)软件中断所占用时间 st被偷走所占用三
                
        进程号 用户 优先级 nice值 VIRT(virtual memory usage)虚拟内存集 RES(resident memory usage)常驻内存 SHR(share memory usage)共享的内存 TIME+运行的时间 COMMAND进程名
        
42、 mount 挂载设备(umount 卸载设备) 
    1)mount 设备 挂载点     
         设备    
            设备文件 :/dev/sda1
            卷标 :LABEL=""
            UUID: UUID=""
        挂载点:目录
            要求:
                1、此目录没有被其他进程使用
                2、目录得事先存在
                3、目录中的原来的文件将会暂时隐藏
    2)使用方法
        -a:挂载/etc/fstab 文件中定义的所有的文件系统
        -n:默认情况下,mount命令没挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件,使用-n选项意味着挂载设备时,不把信息写入该文件
        -t FSTYPE:指定正在挂载设备上的文件系统的类型,不使用此选项时,mount会钓鱼blkid命令获取对应文件系统的类型
        -r:制度挂载,挂载光盘时常用此选项
        -w:读写挂载
        -o:指定额外的挂载选项,也即指定文件系统启用的属性
            remount:重新挂载当前文件系统
            ro:挂载为只读
            rw:读写挂载
    3)umount卸载某文件系统
        umount:设备
        umount:挂载点
        卸载注意事项
            挂载的设备没有进程使用
43、ps、fuser、kill、killall,pstree,pgrep,pidof,bg,jobs,vmstat
    1)fuser 验证进程正在使用的文件或套接字文件
        -l 显示信号
        -4 IPv4
        -6 IPv6
        -a 与程序相关的所有文件
        -k 删除程序相关的所有文件
        -I 互交模式
        -s 不显示处理信息
        -u PID显示用户名
        -v 运行时,显示相信处理信息
        - 清零
        -m 挂载文件系统
        -signal 发送信号
        -n 指定关键字进行搜索,如 文件、UDP、TCP
        -V 显示版本显示
            #fuser -km /dev/sda1  杀死这个挂载的文件系统
    2)ps  process state 查看进程的信息
        a: 显示所有与终端有关的进程
        u:显示用户等详细的信息
        x:显示所有与终端无关的进程 
            #ps ax 显示所有的包括与终端有关和无关
            #ps aux | grep "bash"

        -elF:也可以显示详细的进程信息,-e,-f都可以用
    进程的分类
        跟终端无关的进程
        跟终端有关的进程
    进程状态:
        D:不可中断的进程
        R:运行或就绪
        S:可中断的进程
        T:停止
        Z:僵死进程
        
        <:高优先级进程
        N:低优先级进程
        +:前台进程组中的进程
        l:多线程进程
    指定显示哪个字段:
        -o:
            #ps -axo pid,ni
    3)pgrep pattern 查看有pattern的进程号
        #pgrep bash
    4)pidof pid_name 根据进程的名字来查看进程号
        #pidof init    
    5)kill
        -l:若不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
        #kill 1908 杀死进程
        #kill -9 1908 彻底杀死进程
    6)killall  以名字方式来杀死进程
        #killall -9 gdb
    7)Ctrl Z 把一个命令从前台送到后台去
        COMMAND &:让命令在后台运行
    8)jobs 查看后台的所有作业
        作业号:不同于进程号
    9)bg让后台停止的作业继续运行
    10)fg:将后台的作业调用回前台
    11)vmstat报告虚拟内存的统计信息
        #vmstat 2 每两秒显示一次
        #vmstat 2 5   #每二秒显示一次系统内存的统计信息,总共5次
    
44、gzip,bzip2,xz,zip,tar,cpio压缩与解压缩命令
    1)gzip:.gz
        gzip file:压缩文件,不能是目录,压缩完成后默认删除原文件
            -d:解压缩 # gzip -d file.txt.gz 
            -#:1-9指定压缩比,默认是6
        gunzip file.gz:解压缩    
        zcat file.gz:在不解压缩的情况下,查看文件内容
    2)bzip2: .bz2 比gzip有着更大压缩比的压缩工具,压缩文件,不能是目录,压缩完成后默认删除原文件
        bzip2 file:压缩文件
            -d:解压缩
            -#:1-9压缩比,默认是6
            -k:压缩式不删除原文件
        bunzip2:解压缩
        bz cat:可以直接查看
    3)xz:.xz压缩比更大(主流)压缩文件,不能是目录,压缩完成后默认删除原文件
        xz file: 压缩文件
            -d:解压缩文件
            -#:1-9 压缩比
            -k:保存原文件
        unxz file:解压缩
    4)zip:.zip 可以压缩目录,既归档又压缩的工具
        zip filename.zip file1 file2...:压缩后默认不删除原文件
        zip filename.zip directory:压缩目录
    5)tar:归档不压缩的工具,默认不删除原文件
        -c:创建归档文件
        -f filename.tar:操作归档文件
            # tar bk.tar *
        -x:还原归档
            # tar -xf bk.tar
        -t:不展开归档,查看tar文件里都有哪些文件

        -zcf:归档,并调用gzip压缩
        -zxf:调用gzip解压缩,并展开归档
        -jtf:不解压缩,可以直接查看里面的文件
            # tar -ztf all.tar.gz

        -jcf: 归档,并调用bzip2压缩 
        -jxf: 调用bzip2解压缩,并展开归档     
        
        -Jcf:归档,并调用xz压缩 
        -Jxf:调用xz解压缩,并展开归档
    
    6)cpio归档工具
45、read 从命令行界面读取数据
    -p:可以输入提示信息
        read -p "Please input two integers:" A B
    -t #:可以设置超时时间
        [-z $A ] 判断A是否为0
        read -t 5 -p "Please input two integers:" A B  同时设置超时的时间为5s
46、echo控制输出
    -n:不换行
    -e:控制字体    
        # echo -e "\033[31mhello\033[0m,world"  控制颜色 3 代表前景色
        # echo -e "\033[41mhello\033[0m,world"  控制颜色 4 代表背景色
        # echo -e "\033[1mhello\033[0m,world"  字体加粗
        # echo -e "\033[5;31mhello\033[0m,world"  字体闪烁
47、ifconfig,route 网络配置
    1)ifconfig
        -a:显示所有接口的配置住处
    2)route 路由配置,windows添加路由
        print: 显示电脑路由的配置信息
        -p: 添加路由,永久有效
            route -p add 192.168.0.0 mask 255.255.0.0 192.168.0.1
    3)Linux的网络配置文件/etc/sysconfig/network-scripts/ifcfg-ens33
        DEVICE=关联的设备名称,要与文件名的后半部“INTERFACE_NAME”保持一致
        BOOTPROTO={static|none|dhcp|bootp}:引导协议:要使用静态地址,使用static或none:dhcp表示使用DHCP服务器获取地址
        IPADDR=IP地址
        NETMASK=子网掩码
        GATEWAY=设定默认网关
        ONBOOT=;开机时是否自动激活此网络接口
        HWADDR=硬件地址,要与硬件地址保持一致,否则会出错
        USERCTL={yes|no}:是否允许普通用户控制此接口
        PEERDNS={yes|no}是否在BOOTPROTO为dhcp时接受由DHCP服务器指定的DSN地址
        
        在添加完成后不会立即生效,但重启网络服务或主机都会生效

 48、rpm包安装
    1)安装过程
        -h:显示进度
        -v:显示详细过程
            #rpm -ivh file.rpm
        -vv:更详细的过程
    
        --nodeps:忽略依赖关系
        --force:强行安装,可以实现重装或降级
        --replacepkgs:重新安装,替换原有的安装
    2)查询
        rpm -qa:查询已经安装的所有包
        rpm -q rpm_name:根据名字查询安装包是否安装

        rpm -qi rpm_name:查询某个安装包的详细信息
            # rpm -qi libspectre
        rpm -ql rpm_name:查询某个安装包安装之后的文件列表
        rpm -qc rpm_name:查询指定安装包的配置文件
        rpm -qd rpm_name:查询指定安装包的帮助文件

        rpm -q --scripts rpm_name:安装和卸载都有哪些脚本
        rpm -qf /path/to/somefile:查询某个文件是由那个rpm安装包安装之后生成的
    3)升级
        rpm -Uvh /PATH/TO/rpm_name:如果安装有老版本的,则升级,否则,安装
        rpm -Fvh /PATH/TO/rpm_name:如果有老版本的则升级,否则,退出
            --oldpackage:降级
    4)卸载
        rpm -e rpm_name:卸载安装包
            --nodeps:忽略依赖关系
    5)校验
        rpm -V rpm_name
    6)重建数据库
        --rebuliddb 重建数据库,一定会重新建立
        --initdb:初始化数据库,没有才建立,有就不建立
49、logrotate 日志滚动    
    /etc/logrotate.conf  配置文件
    #systemctl status rsyslog.service 查看日志服务状态
    如果想把A主机的日志记录在另外B上
        1、B主机 vim /etc/sysconfig/rsyslog 把 SYSLOGD_OPTIONS=""改为SYSLOGD_OPTIONS="-r"
        2、A主机 
            
50、chkconfig检查,设置系统的各种服务 
    chkconfig --list        #列出所有的系统服务
    chkconfig --add httpd        #增加httpd服务
    chkconfig --del httpd        #删除httpd服务
    chkconfig --level httpd 2345 on        #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
    chkconfig --list        #列出系统所有的服务启动情况
    chkconfig --list mysqld        #列出mysqld服务设置情况
    chkconfig --level 35 mysqld on        #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
    chkconfig mysqld on        #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级
51、netstat 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组
    netstat -tnl :显示Linux系统开放的端口
    
 52、Linux故障排除
    1)常见的系统故障排除
        1、确定问题的故障特征
        2、重现故障
        3、使用工具收集进一步信息
        4、排除不可能的原因
        5、定位故障
            从简单的问题入手
            一次尝试一种方式(备份原文件,尽可能的借助于工具)   
    2)MBR损坏
        1、借用别的主机修复
        2、使用紧急救援模式
            a、boot.iso
            b、使用完整的系统安装光盘
                boot:linux rescue
                    /mnt/sysimage   
53、awk报告生成器  
        1)print item1,item2...
            # awk '{print $1 ,$3}' aaa.c              
        2)分隔符
            -F: 输入分隔符  
                  # awk -F: '{print $1,$3}' /etc/passwd
            OFS:输出分隔符
                  # awk '{OFS=":"}{print $1 ,$3}' aaa.c   使用分隔符:
                  # awk -F: '{OFS="---"}{print $1,$3}' /etc/passwd
54、Ubuntu下开通远程连接22端口
    sudo apt-get install openssh-server openssh-client 
    #service ssh restart

55、gcc 编译
    -l:后面跟要连接的库
         #gcc connectSqlite3.c -o sqlite -lsqlite3  
    -L:参数跟着的是库文件所在的目录名
        -L/usr/X11R6/lib
     #gcc connectSqlite3.c sqlite3.c -o sqlite -ldl -lpthread 用源码进行编译
56、安装chrome
    1)打开终端,进入要保存安装包的位置输入:
        2)执行
        #dpkg -i google-chrome-stable_current_i386.deb

57、size显示一个目标文件或链接库文件各段数据的大小
    
    text:正文大小
    data:静态变量,和已经初始化的全局变量的大小
    bss:(block started by  system)未初始化的全局变量的大小
    数据段: 数据段(data segment )通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

    代码段: 代码段(code segment/text segment )通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

  堆(heap ): 堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

    栈(stack) :栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{} ”中定义的变量(但不包括static 声明的变量,static 意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/ 恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。没有进行过初始化,用的时候,需要用户进行初始胡。

58、PATH的用法
    简介:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
        当输入指令的时候,会自动在PATH环境变量指定的目录下来来寻找这个可以执行文件。
        例如输入ls 命令,会自动寻找到/bin/ls命令来进行执行。
    添加一个目录到PATH中去:
        1、在/etc/profile文件中添加一行PATH=$PATH:/etc/apache/bin
        2、执行source profile(source /etc/profile)

59、od
    用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。
    - A 指定地址基数,包括:
        d 十进制
        o 八进制(系统默认值)
        x 十六进制
        n 不打印位移值
    - t 指定数据的显示格式,主要的参数有:
        c ASCII字符或反斜杠序列
        d 有符号十进制数
        f 浮点数
        o 八进制(系统默认值为02)
        u 无符号十进制数
        x 十六进制数
        
60、ipcs
    显示当前系统的 消息队列、共享内存、信号量、远程队列和本地标题的一些具体信息。

61、ulimit -c 1024
    在程序异常终止的时候可以产生最大是1024k的core文件









  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值