• Linux系统的使用框架


    Linux系统

    Linux系统的一些知识框架
    

    1.概念类

    字和字符
        文本和word之列
    交互式和非交互式
        vim nano  sed
    面向行的和面向屏幕的
        面向行的
        面向屏幕--分页 less	 pg 命令 分页显示文件内容 命令:pg (page) 
    命令行和图形界面
        shell 内部命令和外部命令
    远程和本地
         本地命令行和图形界面
    	 远程命令行和图形界面
    主机和终端
       
    参数方式  
        Unix 风格
    	BSD  风格
    	GNU  风格
    	其他
    	-- 长选项 短选项  必选项  可选项   可组合 不可组合  不带-  带-个 带--个
    服务前台和后台
        bg  fg
    帮助系统
       内部命令: help 
       外部命令: man  info   -h   --help
       type  history
    

    2.动作类

    --增删改查-- 查-确认状况 动作反馈  
    --查询-了解和查看
        框架: who  when  where  	what  which  why  how	
    	命令: whoami  locate
    	         echo cat  head  tail ls
    	echo   $JAVA_HOME
        uname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号	
    	env
    	printenv
    	
    -搜索和匹配
        find  regex
    	
    -动作类 -- 增加 删除  修改  查-验证
        cd
    	chmod
    	文件:
    	    复制  创建 创建目录 创建文件
        	改名 改内容  移动位置  改权限   替换
            删除文件  			
    

    3.层级类

    三大层级
     资源和硬件   文件和用户  进程和服务
     01.资源和硬件   本地和网络  cpu  内存  硬盘  内核  网络  lshw
                   cpu: lscpu
                   内存 free
                   显存:  lspci | grep -i nvidia
                   硬盘 lsblk  df  du    mount umount 
    	   网络 ping ifconfig  netstat   traceroute   host  ip  / ip addr
                   时间 data
                   设备:  lsusb    `lsusb`查看USB设备信息
                          lspci  `命令查看系统中PCI总线和连接了哪些设备
                   内核: cat /proc/version
     02.文件和用户   ls  tree
                    cd pwd touch cp scp rm rmdir chmod mv tar  wget
                    su  sudo 	 uname whoami  useradd userdel usermod id group
     03.进程与服务: ps pstree  top   vmstat  fuser lsof
                    jobs fg bg  &   at   crontab
                    systemctl  journalctl  
                    export source fork exec sh  kill
                    `lsof`显示正在打开的Linux文件、网络端口和进程
     补充:硬件-硬件驱动-内核    
        service --status-all   chkconfig  --list  init
            rsyslog.service /logrotate
            tail -f 持续显示文件信息
            Nvidia自带了一个 nvidia-smi 的命令行工具,会显示显存使用情况	 
    

    4.流程类--目的

    安装程序 下载-移动-改变位置-解压-修改权限-配置环境变量-运行
    编译程序   configure  make  make install
    数据分析  导入数据-管道-预处理-数据统计-数据输出
    流程-- 给出命令,给出验证命令成功的标志 
    
    安装程序
        01.源码编译安装
          wget  tar cd  mv chmod  configure  make install 
        02.编译包安装
         wget tar   mkdir  cd  ./idea.sh
        
        03.编译包在线 
          RPM (RedHat Package Manager) -- YUM(Yellow dog  Updater Modified): 基于RPM包构建的软件更新机制
    	    sudo  yum install -y git
          dpkg   APT 软件管理系统
    	    sudo apt-get install git 
    

    5.常识记忆类

    cat /proc/version
    ---静态信息--动态信息
    # 操作系统类型 操作系统版本 操作系统位数
        lsb_release -a
        uname -a
        cat /proc/version
    # cpu
        lscpu
        cat /proc/cpuinfo
        总核数 = 物理CPU个数 X 每颗物理CPU的核数 
        总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
        查看物理CPU个数
        cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
        查看每个物理CPU中core的个数(即核数)
        cat /proc/cpuinfo| grep "cpu cores"| uniq
        查看逻辑CPU的个数
        cat /proc/cpuinfo| grep "processor"| wc -l
    	查看CPU的主频 
        cat /proc/cpuinfo |grep MHz|uniq 
    # 内存
        free -h 
        vmstat -s 
    #查看盘的情况lsblk命令的英文是“list block
        lsbsk
        df -h 
        du --max-depth=1 -h
    	fdisk -l  gdisk
        mount	
    #网卡信息
        ifconfig 当前主机的ip地址和网卡信息
        ping
    	
    # 文件-磁盘  程序-进程-服务  用户-权限
    

    6.逻辑思维类

    ###1.了解和判断--命令类型
        $ type mv
        mv is hashed (/bin/mv)
        $ type -a echo
        echo is a shell builtin
        echo is /bin/echo
        type命令可以查询命令类型
        说明:
           内部命令:命令本身存放在系统内存中,是shell程序的一部分,这些命令由shell程序内部完成运行,不需要添加运行程序。
             is a shell builtin   --------->>> 表示该命令为内部命令
          外部命令:因为命令功能比较大,所以在系统启动加载时不会存放在内存中,只有在使用时才会加载到内存中。
             is hashed (/bin/mv) ---------->>> 表示命令为外部命令 
        第一次,按path搜索命令文件再次运行,已hash在内存中  
    ####Linux系统的查询命令顺序
         alias   builtin-内部命令  外部命令/hash-已经通过哈希加密    PATH
        查看内部命令  enable -a  利用enable 查看shell中已集成的内部命令
    	查看hash的命令  hash 
    	PATH 可以通过  echo $PATH    或者 env
    	    ~/.bash_profile  ~/.bashrc 
    		~/.bash_profile 是交互式、login方式进入bash运行的,
    		~/.bashrc是交互式non-login方式进入bash运行的,通常二者设置大致相同,所以通常前者会调用后者。
    		/etc/profile
    ###2.搜索和查找--命令位置	
        $ which mv
        /bin/mv
        
        $ whereis mv
        mv: /bin/mv /usr/share/man/man1/mv.1.gz
    	
        which  whereis  locate  find 
    	
        #file指令, 文件的类型
    	#文件查看  head -n 100   tail  cat  less  more
    	
    ###3.详细的内容和案例
          whatis   mv
    	  man  mv
    	  info mv
    	  mv  --help
    
    ###其他
         ~ 帐户的 home 目录
    	 $
    	 # root 权限
    

    7.解释说明

    0.命令方式--空格  空白符
        find ./ -type f
    	通配符-- 通配符必须用引号引用起来,find 取反 !  或者'!'  ii ignorecase
    	find ./  ! -name "*.jpg" 
        ls -al ./	
    1.重定向:
          一: Linux系统预留可三个文件描述符:0、1和2, 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr)
    	     /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。
    	  二: 重定向的符号有两个:>或>>
    	    &>   - 以覆盖的方式将正确输出和错误输出同时输出到指定位置
            &>>  - 以追加的方式将正确输出和错误输出同时输出到指定位置
    	    2>&1 - 将错误输出以正确输出的形式输出到指定位置
            > /dev/null     作用是将标准输出1重定向到/dev/null
           2>/dev/null       把错误输出到 
           > /dev/null 2>&1 命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中
    	   1>/dev/null 2>&1  等价于 >/dev/null 2>&1  标准输出和错误输出都进了“黑洞”
    	   2>&1 >/dev/null  是标准输出进了黑洞,错误输出打印到屏幕
    	  三: tee
    	     tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
    
    2.工作job
        01.fg、bg、jobs、&、ctrl + z都是跟系统任务	   
    	   jobsID  PID
    	   1. 首次让任务进入后台  &
    	   2. jobs 查看后台运行的进程 
           3. fg %n 让后台运行的进程n到前台来 
           4. bg %n 让进程n到后台去;
    	  Job的状态 -- running, stopped, Terminated
    	02.nohup
    	    nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
       案例:
    	01.后台执行 root 目录下的 runoob.sh 脚本 :   nohup /root/runoob.sh &
    	02.后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:
    		nohup /root/runoob.sh > runoob.log 2>&1 &
    	2>&1 解释:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文	
    3.管道
        01.多个命令在同一行,用分号划分
    	02.多个命令连续执行
    	 管道符号 |
    	  xargs    -i(insert) 允许{}作为占位符 自定义占位符
    	  
    4.搜索
        type  命令搜索--内部命令 -外部命令-PATH
    	which  whereis locate find 
    	变量  变量值 反引号
    5.查看日志   
           服务  systemd
    	      systemctl
    	   日志
    	       内存日志: journald.service
    		   硬盘日志: rsyslog.service
    		      日志轮循: logrotate
    		   日志分析: logwatch
    

    挂载的操作

    lsblk
    df -h 
    sudo umount  -f /media/test
    fuser -muv /media/test
    fuser -kv /media/test
    kill -9 
    sudo mount  /dev/sdb1 /media/test
    说明: 
      ####结束进程
           killall  kill processes by name killall命令用于杀死指定名字的进程
       kill     terminate a process
       fuser   使用文件、文件结构或者套节字来表示识别进程 
             常用的两个功能:查看需要的进程和要kill查到的进程
     ####查看端口占用
    netstat -ntlp | grep 22
    lsof -i:22
     ####查看文件占用
    fuser  -mv /opt
    lsof /opt
    
    1.磁盘空间根目录占满,命令逐级查找大文件
       du -h -x --max-depth=1 
    2. fuser查询并关闭使用相应文件系统的进程  
       fuser -mv /mytest
       
    3.排查删掉的数据是否还在占用磁盘空间,如果有进程占用文件,kill -9 PID 可以释放
       通过 lsof 这个命令可以获取一个已经被删除但仍然被应用程序占用的文件列表
        lsof | grep delete:
    	
    	检查/tmp下最大的三个数据文件
        du -s /tmp/*|sort -nr|head -3
    	  进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,可以通过如下命令完成:echo " " >/tmp/acess.log
        ctrl + h 显示隐藏的文件夹
    		
    4.磁盘的IO iostat
       iostat -x 
        磁盘的平均响应时间 <5ms,磁盘使用率>80 磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB
          rqm/s:每秒这个设备相关的读取请求有多少被Merge了
          rsec/s:每秒读取的扇区数
          Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
     5.挂载
    /IP地址是windows地址,后面跟上windows上的共享目录,后面的路径是linux上的挂载路径
    mount -t cifs -o username="共享用户",password="密码" //ip/sharing_folder /mountpoint
    sudo mount -t cifs -o username=Everyone //192.111.111.111/win  /home/sk/win
    NFS(Network File System)即网络文件系统
    CIFS(Common Internet File System) CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享
      CIFS可以在linux系统和windows系统之间共享文件
         提供CIFS的服务是SAMBA: samba samba-common samba-client
    	samba服务的组成部分
      samba在linux系统上的服务名称:smb
        samba – 服务端应用程序
        samba-common – 用来提供一些配置文件
        samba-client – 客户端应用程序
        主配置文件:/etc/samba/smb.conf
        服务端口:通常使用TCP/445进行所有连接。
         还使用UDP137、UDP138和TCP/139进行向后兼容
          mount -r /dev/sdb1 /media/data
        1. -t 
    	  vfstype 指定文件系统的类型,通常不必指定。
    	    nfs  -UNIX(LINUX) 文件网络共享
    	2. -o 
    	   options 主要用来描述设备或档案的挂接方式。常用的参数有:
    	3.device 要挂接(mount)的设备。 
      4.dir设备在系统上的挂接点(mount point)
    

    Windows命令行

    cmd是command的缩写.即命令行

     命令 MS-DOS Linux  
     列举文件 dir      ls 
     查看文件    type     cat 
     显示你在文件系统中的位置 chdir pwd 
     用指定的路径(绝对路径,absolute path)来改换目录 cd 路径名 
    显示文件目录 tree 
     用一个相对路径(relative path)来改换目录 cd .. cd ..  
     把输出“回响”到屏幕上 echo echo echo this message
     查看文件 more less([d]) less thisfile.txt
    搜索  where  where命令显示命令所在的路径
     在文件中寻找字串 find grep grep 词或词组 thisfile.txt
     显示命令帮助 命令 /?    man([c])  
     创建目录 mkdir mkdir mkdir 目录
     复制文件 copy cp  
     转移文件 move mv
     重新命名文件 ren mv([e]) mv thisfile.txt thatfile.txt
     程序
        查看所有进程     tasklist 
        查看进程号信息:   tasklist |findstr  9999
        杀进程: taskkill -f -t -im javaw.exe; 
     设置环境变量
         set path=G:ant
    ocketmq-all-4.2.0;%path%;    
     其他相关
        explorer ------- 打开资源管理器
        taskmgr  ------- 任务管理器
    
    windows变量
    cmd
    %APPDATA%	 C:Users用户名AppDataRoaming
    %HOMEPATH%	 C:Users用户名
    %USERPROFILE%	C:Users用户名
    %TEMP%和%TMP%	C:Users用户名AppDataLocalTemp
    %SystemRoot%	C:Windows
    %WINDIR%		 C:Windows
    
    windows进程
    explorer.exe是Windows程序管理器或者文件资源管理器,
        它用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用。
    	%SystemRoot%explorer.exe
    iexplore.exe 是浏览器进程
    
    示例
         type c:windowssystem32driversetchosts
         net start 查看开启了哪些 Windows 服务
    	 echo %PATH%    Linux中是 echo $PATH
     退出
      exit
      ver     uname -a
      点击 F7  或者 doskey /history     类似于 linux  history
      查看最近操作  recent
      执行情况
         bat文件是dos下的批处理文件,批处理文件是无格式的文本文件,
    	它包含一条或多条命令,后缀为.cmd或.bat
    

    区分文件类型

     window中默认情况下有一下后缀名的文件可以直接执行:
          .EXE 最常见的可执行文件
          .MSI 一般用来做安装文件
          .VBS 这个是vb脚本文件
          .JS 这个是java脚本文件
          .CMD 这个是操作命令文件
          .BAT 这个是批处理文件
          .SCR 这个一般是屏保之类的
          .REG 这个是导入注册表文件
    Linux与Windows不同,不是根据扩展名来区分文件类型的
    UNIX/LINUX 平台下三种主要的可执行文件格式:
        a.out(assembler and link editor output 汇编器和链接编辑器的输出)
    	COFF(Common Object File Format 通用对象文件格式)、
        ELF(Executable and Linking Format 可执行和链接格式
    

    积累的一些操作

    重命名

    #01.
     unable to execute /usr/bin/rename: Argument list too long
    #02. find需要知道exec的参数何时终止 ;
       find /old -name '*.*' -exec mv {} /new ;
    # 03批量重命名
    find ./ -name "*.jpeg" |xargs -i sudo rename -v 's/.jpeg/.jpg/' {} 
    # <() 操作 类似于匿名文件
      comm <(find ./ -maxdepth 1 -type f -name "test*.zip" |cut -d . -f1-2 |sort) <( find ./ -maxdepth 1 -type d -name "test*"|sort )
    ### 比较两者之间的差异,然后删除  uniq -d表示仅显示重复行
      sort   <(find ./ -maxdepth 1 -type f -name "test*.zip" |cut -d . -f1-2  )    <( find ./ -maxdepth 1 -type d -name "test*"  )  |uniq -d   | xargs -i rm -v {}.zip
    

    批量查看

    --查看当前目录下每个子目录的文件数量
    find ./ -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l);echo "$dir :$count"; done
    -- 查看当前目录压缩文件内的图像个数
    find ./ -maxdepth 1 -type f -name "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep ".jpg" |wc -l); echo "$dir : $count "; done
    --命令说明
       01.linux变量赋值  :变量赋值的格式:变量名=值
         注意: 变量名和和值与=之间不要有空格 bash中变量赋值,等号两边均不能有空格存在;
    	  count=$(unzip -v "$dir" |grep ".jpg" |wc -l); 对的格式
    	  count = $(unzip -v "$dir" |grep ".jpg" |wc -l);错误格式
       02.:查看压缩文件目录,但不解压   -v  list verbosely/show version info 
          unzip -v ./345.zip | wc -l
       03.shell中while read line的一种用法:
    	 read通过输入重定向,把file的第一行所有的内容赋值给变量line
    	  while read line 是一次性将文件信息读入并按行赋值给变量line ,
    	  while中使用重定向机制,文件中的所有信息都被读入并重定向给了整个while 语句中的line 变量
        04.find
    	  --不是以Test开头的有哪些
           find . -name "[^Test]*"  
    	   简名	全名	中文名	含义
             atime	access time	访问时间	文件中的数据库最后被访问的时间
             mtime	modify time	修改时间	文件内容被修改的最后时间
             ctime	change time	变化时间	文件的元数据发生变化。比如权限,所有者等
    		 ls -l                               #默认的ls -l显示的是mtime 
    		 ls -l --time=ctime                #列出ctime
    		 find  -amin -mmin  -cmin   (注意只能以time、min作为单位)
    
    ##进一步完善
        find ./ -maxdepth 1 -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done 
    	find ./ -maxdepth 1  -ctime 0 -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done 
    	find ./ -maxdepth 1   -newermt '2021-10-01' ! -newermt '2021-10-21' -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done 
    	 -newermt '2021-10-01' ! -newermt '2021-10-21
    	 find -newermt的真正形式是find -newerXY {variable}  X可选a,c,m; Y可选a,c,m,t。
    	 2. 进行反选,在find中加入 !
        Linux目录下面,如果有文件或文档名中带有空格, 可以考虑将空格转化其它的字符,比如将空格转化为“_”这种下划线
        find . -type f -name "* *" -print |while read name; do rep_nm=$(echo $name | tr ' ' '_') if [[ $name != $rep_nm ]]; then mv "$name" $rep_nm fi done	 
    

    shell命令

    循环-常用循环方式
    for  i  in  `cat $FILENAME`
    do
        echo $i
    done
    
    while read line
    do
       echo $line
    done < file
    
    command | while read line
    do
        …
    done
    

    shell 一行写一个循环

    管道命令
    数据重定向
     while read f_nm; do echo "$f_nm "; done  < /opt/test.txt
     cat /opt/test.txt | while read f_nm ;do echo "$f_nm "; done  
     for file_nm in `cat /opt/test.txt`  ;do echo $file_nm; done
     for file_nm in $(cat /opt/test.txt) ;do echo $file_nm; done
    

    shell脚本

     $# 是传给脚本的参数个数 
     $0 是脚本本身的名字 
     $1是传递给该shell脚本的第一个参数 
     $2是传递给该shell脚本的第二个参数 
     $@ 是传给脚本的所有参数的列表
    
    视角:
     硬件: CPU机制:寄存器机制、多级缓存机制、分段机制、分页机制、中断机制、多核同步机制
     Linux的开发者(内核开发 和后台程序开发 和应用开发)
     Linux系统管理员
     Linux桌面用户
    

    私服

    echo 1.10.10.10	repo.test.com >> /etc/hosts
    cd /etc/apt/
    cp sources.list{,_bak}
    
    echo deb https://repo.test.com/repository/apt-aliyun/ bionic main restricted universe multiverse >/etc/apt/sources.list
    echo deb https://repo.test.com/repository/apt-aliyun/ bionic-security main restricted universe multiverse  >>/etc/apt/sources.list
    

    --非常不安全
    sudo apt-get update --allow-insecure-repositories
    sudo apt-get install vim --allow-unauthenticated

  • 相关阅读:
    [野外实验] 塞罕坝遥感实验(2020.7-8月)
    [学术论文] 一时兴趣的产出(新型TLS布站策略)被TGRS录用
    c++11 新特性实战 (一):多线程操作
    用 Docker Swarm 来部署 Nebula Graph 集群
    用图机器学习探索 A 股个股相关性变化
    图数据库对比:Neo4j vs Nebula Graph vs HugeGraph
    【程序人生】25岁,一位女程序员的幸运几年
    【开发总结】order by 为什么没有走索引?
    【故障总结】CPU飙升?我写的?
    mysql比现实时间少了八小时
  • 原文地址:https://www.cnblogs.com/ytwang/p/14549983.html
Copyright © 2020-2023  润新知