工作中使用的linux命令

2018-10-28  本文已影响0人  436048bfc6a1
  1. pwd: 查看当前光标所在的路径

  2. home directory: 当前用户所在的默认目录
    /root : 超级管理员的默认目录

  3. cd 切换

    (1) cd path : 切换到指定路径
    (2) cd : 直接切换到home directory
    (3) cd - : 回退到上一次输命令时所在的目录
    (4) cd ~ : 切换到当前用户的home directory
    (5) cd ../ : 切换到上一层目录
    (6) cd ../../ : 切换到上两层目录
    
  4. ls 查看当前目录下的文件和文件夹的名称

    (1) ls -l(简写为ll) : 查看当前目录下的文件和文件夹的详细信息
          a)  ll + 文件夹名称:查看当前目录下特定的文件夹里文件或文件 
                             夹的信息
         b) ll /usr/sbin/user* : 显示/usr/sbin文件夹下以user开头的文件
    (2) ls -l -a : 查看隐藏文件( 隐藏文件和隐藏文件夹以 "."开头 )
    (3) ls -l -h : 查看文件的大小( 不是文件夹 )
    (4) ls -l -rt : 将该目录下的文件或文件夹以时间顺序排序
    
  5. mkdir 创建文件夹

    (1) mkdir + 文件夹名称 : 创建一层文件夹
    (2) mkdir -p : 级联创建文件夹
          a) mkdir -p 1/2/3 : 在当前目录下递归创建文件夹
          b) mkdir -p /1/2/3 : 在根目录下递归创建文件夹
    (3) mkdir 4 5 6 : 在光标所在的目录下创建3个文件夹 4 5 6
    
  6. 绝对路径与相对路径

    (1) 绝对路径: 从根目录开始的路径
    (2) 相对路径: 从当前目录( pwd得到的目录 )开始的路径
    
  7. 创建文件

  (1) vim + 文件名:
  (2) touch + 文件名 : 创建一个空文件
  1. mv 与 cp
  (1) mv henry.log   newFolder : 将henry.log移动到newFolder文件夹
      (类似于windows的剪切)
  (2) cp henry.log   newFolder : 将henry.log复制到newFolder
  1. ">" 与 ">>"
  (1) echo "hello" > henry.log : 清空henry.log的内容,将hello写入到      
                                 henry.log的原有内容的后面
  (2) echo "hello" >> henry.log : 不清空henry.log, 将hello追加到 
                                  henry.log中
  1. 显示文件内容命令
  (1) cat  henry.log : 将henry.log的内容全部显示在terminal中
  (2) more henry.log : 将henry.log的内容分页显示在terminal中
  (3) less henry.log : 将henry.log的内容分页显示在terminal中
      (在工作中没怎么使用过,等用到了再探讨它与less的区别)
  1. 配置命令别名
  (1) alias cdrz = 'cd  /root/henry' : 临时配置 cdrz 为 cd /root/henry, 但 
       是此为临时配置, 即打开另一个terminal无法找到该别名
  1. 全局环境变量配置
  (1) 在 /etc/profile 中写入全局环境变量
  (2) source /etc/profile :生效全局环境变量配置
  1. 个人环境变量
  (1) 配置文件: home_directory/.bash_profile 
               OR
               home_directory/.bashrc
  (2) 生效个人环境变量 : source home_directory/.bash_profile 
                       OR
                      . .bash_profile(此时路径就是home_directory)
  1. 切换用户
   (1) su henry: 切换到henry账户,并且所在目录即输入su命令时所在的目录, 不执行环境变量
   (2) su - henry: 切换到henry账户,并且所在目录即henry的home directory, 执行环境变量
  1. 删除文件
(1) rm henry.log : 删除henry.log文件(先询问是否还要删除,如果是自己
                   创建的就直接删除)
(2) rm -f henry.log : 强制删除henry.log, 不询问
(3) rm -rf henry.log : 不询问删除文件夹
  1. 查询历史命令
history : 将输入过的命令一行一行显示
!241: 执行屏幕上241行的命令
  1. 用户与用户组
(1) 寻找与用户相关的文件:  ll /usr/sbin/user*
(2) 寻找与组相关的文件: ll /usr/sbin/group*
(3) 增加用户henry: useradd henry
(4) 查看用户henry的id信息: id henry
    显示结果:( 用户id, 主组id, 组id)
             uid=501(henry) gid=501(henry) 组=501(henry)
    注: 创建了一个henry用户, henry用户组, 其中henry用户组为主组
(5) 删除用户henry: userdel henry
    注: 在删除用户henry之后,其home directory不会删除,如果重新创建用户henry,
        系统会报警告:此主目录已经存在。
(6) 查看系统中的所有用户 : cat /etc/passwd
    teminal显示: henry:x:501:501::/home/henry:/bin/bash
    其中/home/henry为henry用户的home directory
(7) 如何使henry用户无法登录: 在 /etc/passwd中修改
    a) henry:x:501:501::/home/henry:/bin/nologin
       再次登录henry用户时,会报su: /bin/nologin: No such file 
       or directory 错误
    b) henry:x:501:501::/home/henry:/bin/false
       切换到用户henry时没有提示,切换失败
(8) 如何找到组: cat /etc/henry
(9) 增加组: groupadd newGroup
(10) 将某个用户添加到新组中: usermod -a -G newGroup henry
     此时henry的情况: 
     uid=501(henry) gid=501(henry) groups=501(henry),502(newGroup)
     此时henry的主组还是henry组
(11) 将newGroup设置为henry的主组: usermod -g newGroup henry
     但是此时henry的信息里没有henry组
     uid=501(henry) gid=502(newGroup) groups=502(newGroup)
     所以需要将henry组加回到henry用户
  1. 如何查看命令帮助
(1) man + 命令  : 详细帮助
(2) 命令 --help : 精简帮助 
(3) 以usermod为例:
      a) 输入usermod --help显示
         Usage: usermod [options] username : 表示命令如何使用, []表示可选选项
         -G, --groups GROUPS  new list of supplementary GROUPS
         (命令简写, 命令全拼 哪个组 命令代表的意思)

19 管道符

(1) 管道符 : "|"
(2) 管道符作用 : 命令1 | 命令2 ===> 将命令1结果作为命令2的输入
(3) 统计文件中有多少行: cat henry.log | wc -l
(4) 模糊匹配: cat henry.log | grep aod 
             找到文件中包含aod字符的行
  1. 重置用户密码
(1)passwd henry
   由于之前在/etc/profile中将henry的home directory修改了,但是没有将
   原home directory的隐藏文件复制过来,所以当su henry时, 会出现bash-4.1$ 

   解决方案是cp /etc/skel/* newHomeDirectory, 之后再修改权限
  1. 修改权限
(1) 什么是权限
    a) 读:  r 4   (读命令: cat, more)
    b) 写:  w 2  (写命令 >, >>, vim) 
    c) 执:  x 1  (一般是对于shell脚本来说)
    d) 无权限: - 0
(2) Example
    drwxrwxr-x. 2 henry henry 4096 Oct 1 16:37 newFolder

    d代表目录,d之后有三组权限: rwx rwx r-x <==> 775
    第一组: 代表当前用户henry对该文件或文件夹的权限,可读可写可执行
    第二组: 代表当前用户组的所有成员对该文件的权限,也是可读可写可执行
    第三组: 代表其他用户组的所有成员对该文件的权限,可读不可写可执行

(3) 修改权限
    chmod 755 -R /home: 递归的给/home下的文件和文件夹修改权限
(4) shell脚本
      a) 头部添加 #!/bin/bash
      b) 赋予权限
          i) 给其他用户赋予权限: "." + 相对路径 或者 直接输入绝对路径
          ii) 给其他用户不赋予x权限: 使用sh命令执行脚本
  1. 网络安装
(1) yum install httpd : 网络安装httpd
(2) yum -y install httpd : 不询问 y/n 的方式安装httpd
(3) service httpd status : 查看httpd是否启动
    service httpd status: 启动httpd
(4) ps -ef: 打印后台运行的所有程序
     注: ps -ef | grep henryLoop的结果是(用户, 进程id, )
        root   6209  6010  0 05:46 pts/1  00:00:00 grep henryLoop

        也就是说grep henryLoop也是一个进程     
        如果不想显示grep的话,输入ps -ef | grep henryLoop| grep -v grep
(5) 消灭一个进程 : kill -9 pid
(6) Example: httpd
     root    6110   1  0 05:33 ?      00:00:00 /usr/sbin/httpd
     apache  6115  6110  0 05:33 ?    00:00:00 /usr/sbin/httpd
     apache  6116  6110  0 05:33 ?    00:00:00 /usr/sbin/httpd
     假如kill -9 6110之后, 6115和6116进程仍旧存在,但是httpd服务已经停止
     重新启动时, 由于6115和6116 apache进程存在, 无法重启

     解决方法是 kill -9 $(pgrep -f http), kill所有匹配的
     但是kill之前必须ps -ef查看一下kill的进程是否是需要kill的
(7) 查询端口号: netstat -nlp | grep 2985
      Local Address(:::80)
(8) 几种Local Address的意义
      a) 0.0.0.0:22 或者 :::22 表示本机ip的22端口, 任意ip都可以访问
      b) 127.0.0.1:22 只能是本机才可以访问
      c)  192.168.152.122:22 能访问到该ip地址才可以访问
(9) 查询所有rpm包: rpm -qa
(10) rpm -e --nodeps + 包名: 移除某个包不用先移除其依赖
  1. 临时获得root权限
(1) 先在/etc/sudoers中加入henry(想要获得root权限的用户)  ALL=(ALL)  ALL
      OR
     yanghenry  ALL=(root)  NOPASSWD:ALL(sudo时不需要输入密码)
     
(2) 此时henry用户可以用sudo 获取临时root权限
(3) 切换用户并获得root权限: sudo su - henry
  1. chmod 与 chown(只有这两个命令出现R)
(1) chmod : 修改权限
    a) chmod 777  文件
    b) chmod -R 777 文件夹
(2) chown henry:henry 文件 : 将某个文件改为henry的用户组 
(3) 注意: 在生产上,如果某个文件属于特定的用户组,那么只有该用户组的用户才能访问该文件
(4) 如何给一个脚本的三组权限都加上执行权限
      a) chmod -x test.sh
      b) chmod +x test.sh
(5) 如果只关心当前用户(第一组)是否能执行test.sh
    a) chmod u+x test.sh
(6) 如果只关心当前组用户(第二组)是否能执行test.sh
    a) chmod g+x test.sh
(7) 如果只关心当前用户(第三组)是否能执行test.sh
    a) chmod o+x test.sh
(8) 使用英文字母+数字形式作为机器名
  1. 查看ip
(1) ifconfig : 查看网络的一些信息(包括网卡名称等)
(2) 网卡对应的配置文件在哪个文件夹
      a)在/etc/sysconfig/network-scripts
        eg. etho的配置信息就在ifcfg-eth0文件里
(3) 下图中inet addr就是ip
(4) 另外查看ip的方法: 
    a) ping localhost(或者是主机名称)
    b) hostname - i
    c) 去 /etc/hosts中找, 此文件默认开头有两行如下
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    注意该两行不要删除
123.png
  1. 如何判断linux服务是否存活

    (1) 具体步骤: 
          a) 首先ping服务所在机器的ip: 保证保罗是畅通的
          b) 查看该服务的端口号和服务地址
             eg. 192.168.42.131:80 
          c) ping ip + 端口号: telnet 192.168.42.131 80 
    (2) 相关命令  
          a) 查看进程是否存在 : ps -ef | grep httpd 
          b) chkconfig --list 将所有服务都列出来
             httpd  0:关闭    1:关 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
             如果想要开机自启动,使用chkconfig httpd on 将httpd的2, 3, 4, 5都置为on
          c) 设置开机自启动: chkconfig 服务 on 
          d) 查看端口号: netstat -nlp | grep 4517
    
  2. 实时查看文件内容

    (1) tail -f xxx.log
    (2) tail -F xxx.log <==> tail -f + -retry
    情景:在生产上一般保留11份大小固定(比如200m)的log,某个窗口一般第一个log文件满了之后,
    会做mv xxx.log xxx1.log操作,touch xxx.log, 此前实时监控(tail -f)xxx.log的窗口无法再继续监控,但是如果使用tail -F就可以继续监控
    
  3. 命令是怎样找到的

    (1)根据linux的$PATH (必须是大写)得到命令的所在目录
       注: linux是以:来分隔
       eg. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin
    (2)  从左往右用 ll + path/命令 依次寻找知道找到代表该命令的文件
    (3)  如何找到命令位置: which + 命令
    综上所述,一个新命令必须先配置$PATH
    
  4. 寻找文件的位置

    (1) 全局搜索: find / -name '*abc*': 从根目录寻找名字含有abc的文件
    (2) 从当前目录搜索: find ./ -name '*abc*'
    (3) 从指定目录搜索: find /tmp -name '*abc*'
    
  5. vi

(1) 三种模式 
     a) 命令模式、编辑模式、尾行模式
     b) 三种模式之间的转化
         i) 命令模式与编辑模式
            ~ 命令模式按i键进入编辑模式
            ~ 编辑模式按esc键会命令模式
         ii) 命令模式与尾行模式
             ~ 命令模式按 shift + ":" 进入尾行模式 
   

     c) 三种模式具体命令
          i) 命令模式:
             ~ gg: 跳转到第一行第一个字符
             ~  G: 跳转到最后一行的第一个字符
             ~ shift + $: 从行首跳到行尾
             ~ dd: 删除当前行
             ~ dG: 删除当前行及以下所有行
             ~ ndd: 删除光标以下的n行
        iii) 尾行模式
            ~ q!: 强制退出
            ~ wq: 保存退出
            ~ wq!: 强制保存退出(可以保存修改read only文件)
      d) 如何清除一个文件
            ~ gg + dG
            ~ cat /dev/null > henry.log

            不要用echo '' > henry.log, 这样还会使文件又一个空行
      注: 修改生产上面配置文件和其他同事的文件
            先cp备份一份,再进行编辑
      e)  vi 设置行号:  ":"set nu
      f)  vi取消行号:   ":"set nonu  
      g) vi 查询: ":/" + 需要匹配的字符,按空格之后相应的字符便会高亮显示,按n是下一行,N是上一行
      h) 跳转到任意一行: 在尾行模式下,首先输入set nu显示行号,然后输入行号,这时光标就会跳转到相应的行上
  1. 上传和下载
(1)  上传指 : win ===> linux    rz
     下载指 : linux ===> win    sz
注:由于日志文件较大,在linux服务器上打开耗时,传到windows之后,瞬间打开
  1. 查看文件大小与文件夹大小
(1) 查看文件大小
    a) ll -h: eg. -rwxr-xr-x. h henry henry 31K 2月  31 25:78 henry.sh
    b) du -sh: eg. 32K  henry.sh
    
(2) 查看文件夹大小
    a) du -sh 
  1. 系统情况命令
(1) 查看内存: free -m(m 代表 mb)
             free -g
              ~ eg.  total used free shared buffers cached
                Mem: 7893  780  7112   4      48      495
              如果free很少,但是buffer+cache很多,说明还可以使用
(2) 查看硬盘: df -h : 
             ~ /boot  引导目录 
             ~ swap   划分2G作为内存 
             ~  /     根目录挂载点 
             ~  /dev/shm 
(3) 系统负载: top
            eg. 21:10:36 up  8:57, 6 users(什么时候开机,启动多长时间, 几个用户使用)
            load average: 0.53, 0.47, 0.39
                               1min  5min  15min
             如果数字大于10,说明机器繁忙
  1. 压缩解压
(1)"zip -r henry.zip henry/* "
    将henry文件夹压缩成henry.zip
    "tar -czf henry.tar.gz henry/*"
    将henry文件夹压缩成henry.tar.gz
(2) 解压: 
         ~ unzip henry.zip
         ~ tar -xvzf henry.tar.gz
上一篇下一篇

猜你喜欢

热点阅读