Linux随记

一、Linux常用命令:


Expect实现scp 免交互执行命令

远程文件拷贝 scp 基于ssh登陆进行安全的远程文件拷贝命令。(ssh基于SSL加密) 
      scp -r ./test.sh root@172.16.72.120:/root/
        再输入密码登陆。

telnet是明文传输,适用于局域网内。
expect实现免交互:spawn scp -r ........
       执行.exp 文件。

示例脚本如下:

#! /bin/expect  #使用expect解释器执行
set src_file [ lindex $argv 0 ]
set dest_file [ lindex $argv 1 ]
set host_ip [ lindex $argv 2 ]
set username [ lindex $argv 3 ]
set password [ lindex $argv 4 ]
spawn scp -r $src_file $username@$host_ip:$dest_file
expect {
        "yes/no" { send "yes\r"; exp_continue }
        "password:" {   send "$password\r" }   #需要\r结束,回车确认
        }
expect 100%
expect eof

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
ifconfig、ip addr、tail、 top、 head/tail 

mount :远程挂载windows共享目录命令:mount -t cifs //$ip/$share /mnt -o [user];

挂载U盘: mount /dev/sda4 /mnt/

grep  -i或--ignore-case   忽略字符大小写的差别
        -v或--revert-match   反转查找
        -n 显示行号
        -c 查询个数

安装rpm包: rpm -ivh xxx.rpm


文件描述符FD
File Desciption,当应用程序请求内核打开/新建一个文件时,内核会返回一个文件描述符用于对这个打开/新建的文件,是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
应用程序进程拿到的文件描述符 ID == 进程文件描述符的索引,通过索引拿到文件指针,指向系统级文件描述符表的文件偏移量,再通过文件偏移量找到inode指针,最终对应到真实的文件。


0-标准输入、1-标准输出、2-标准错误

    exec 3<file 将file读入到fd3中
    exec 4>file 将fd4中的内容写到file中
    exec 5<&4   创建fd4中的拷贝-fd5
    exec 3<&-   关闭fd3


2> &1 将标准错误重定向到标准输出
      make install 2> /dev/null 执行命令时不报错,将错误重定向到null

> 为创建, echo "hello" > out.txt
>> 为追加,echo "helle"  >> out.txt  :将hello 追加保存到 out.txt的末尾


du :disk usage    用于显示目录或文件的大小,参数:-h或--human-readable 以K,M,G为单位,提高信息的可读性 。
查看文件大小:du -h

df:disk free 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计-h或--human-readable 以K,M,G为单位,提高信息的可读性 。
查看磁盘空间:df -hl

 
cat * | wc -l  :查询文件的总行数,原理就是统计文件中换行符的数量。
ps -ef | grep test.sh | grep -v grep | wc -l
—统计执行test.sh的进程,过滤掉grep的。单例模式。

查看日志格式化命令: column

查看占用端口: lsof -i:8080


查看Linux内核版本:

uname -a
cat /proc/version
lsb release -a
cat /etc/redhat-release
或者系统日志中查找,dmesg/messages 中搜索 linux version

查看资源限制:

ulimit -a 列出所有当前资源极限
ulimit -n 每个进程可以同时打开的最大文件数
ulimit -s 指定堆栈的最大值
ulimit -v shell可使用的最大的虚拟内存


vi 编辑器批量替换:

例如将文件tihuan中所有的字符auto 替换成 wide,具体步骤如下:
1、vi tihuan 进入编辑模式
2、按ESC键,并在:后输入 %s/auto/wide/g
  其中s 表示substitute,    %表示所有行,g表示global 全部
如果需要替换指定部分,如文件34行至78行之间,输入   : 34,78s/a/w/



shell脚本转换成unix格式文件:
    1、vi编辑器下 :set ff=unix   #fileformat
    2、在Notepad++等编辑器下修改 文件格式为UNIX


alias 的使用

如何避免rm -rf ?   可以用 rm -i 每次删除都要确认的。
1、在 ~/.zshrc 或者 ~/.bashrc(根据具体shell而定)添加一句 alias rm='rm -i' 
2、source ~/.bashrc 立即生效即可。


实现脚本的单例运行:使用Flock 文件锁

方法一:

LOCK_FILE=/tmp/%0.lock
exec 99>"$LOCK_FILE"    #表示创建文件描述符99,指向锁文件。

flock -n 99  #非阻塞获取锁文件。没有立即获得锁,直接失败(而不是等待)
if [[ $? -ne 0 ]]
then
    echo "$0 is running"
    exit 1
fi
echo "now start running sleeep.sh"
sleep 512

方法二: man flock查看

#! /bin/bash
#在需要单例执行的脚本前加上以下一行。
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :

echo "now start running sleeep4.sh
sleep 512

crontab定时任务中同样可以 添加flock -xn 去单例执行定时任务。

crontab -e #编辑任务
flock -xn /tmp/auto.lock -c /root/test/auto.sh >> /root/test/auto.log 2>&1

环境变量的配置:

系统级别: /etc/profile        用户级别: ~/.bashrc
自定义全局环境变量(需要root权限)
    1、在/etc/profile 中定义,有如下3种方法:
        A、export 变量名=value  #export work_dir=/root/Desktop
        B、变量名=value ; export 变量名 #work_dir=/root/Desktop ; export work_dir
        C、declare -x 变量名=value  #declare -x work_dir=/root/Desktop
    2、执行 source /etc/profile 立即生效即可。

应用:Linux系统下设置上网代理:

1、编辑/etc/profile,设置变量
    export http_proxy=http://username:password@proxy_ip:port
    export https_proxy=http://username:password@proxy_ip:port
2、更新环境文件
    source /etc/profile
3、测试连接外网
    curl -v www.baidu.com

***注意,当password存在特殊符号@时,如何解决?
    将特殊符号转换成ASIIC码输入
    ~:0x7E  !:0x21  @:0x40  #:0x23  *:0x2A
    $:0x24  %:0x25  ^:0x5E  &:0x26  ?:0x3F

二、如何在后台运行Linux命令? 

—在命令后加上符号 & ,将一个进程放在后台运行。用进程ID来恢复/终止对应进程。

例如: ping -c 172.16.72.120 > out.log 2>&1 &

        将ping命令重定向到out.log里,遇到错误时也输出,&表示后台执行。
 

三、Linux下 开机自动重启脚本(该总结参考自微信公众号:良许Linux)

1、在 /etc/rc.local 中去完成开机执行。

2、crontab (定时任务)实现:

        首先,crontab -e 编辑定时任务(这个玩法挺高级的)

        其次,添加 @reboot /root/script/test.sh,重启时自动执行该脚本。

3、通过Systemd实现:

        首先,编写一个名为test的Systemd服务      

$ vim /lib/systemd/system/test.service

[Unit]
Description=test
After=default.target

[Service]
ExecStart=/root/script/test.sh

[Install]
WantedBy=default.target

        然后,启用这个Systemd服务,开机时就会自动执行该服务对应的脚步

$ systemctl daemon-reload
$ systemctl enable test.service

     四、常用Linux版本和内核对照关系


    Linux 内核版本号释义,例如 Linux version 3.10.0-693.el7.x86_64
    第一项:3  当前内核主版本号
    第二项:10 当前内核次版本号;稳定版(次版本号为偶数),开发版(次版本号为奇数)
    第三项:0-693  0表示当前内核更新次数,693表示当前内核修补次数
    第四项:el7    当前内核为RHEL 7版本
    第五项:x86_64 代表64bit系统


普通OS镜像查看路径: install\vmlinuz
live OS镜像路径:\casper\vmlinuz

1、ubuntu(基于Debian)

        ubuntu 16.04: linux version  4.4.0-21-generic (buildd@lgw01-21)
        ubuntu 16.10: linux version  4.8.0-22-generic (buildd@lgw01-11)
        ubuntu 17.04: linux version  4.10.0-19-generic (buildd@lcy01-13)
        ubuntu 17.10.1: linux version  4.13.0-21-generic (buildd@lgw01-amd64-037)
        ubuntu 18.04.1: linux version  4.15.0-29-generic (buildd@lgw01-amd64-057)
        ubuntu 18.04.2: linux version  4.15.0-45-generic (buildd@lgw01-amd64-031)
        ubuntu 18.10: linux version  4.18.0-10-generic (buildd@lgw01-amd64-060)
        ubuntu 19.04: linux version  5.0.0-13-generic (buildd@lcy01-amd64-020)

 2、RHEL/CentOS       

            Red Hat Enterprise Linux 6.5(64 bit)   linux version 2.6.32-431.el6.x86_64
            Red Hat Enterprise Linux 6.6(64 bit)   linux version 2.6.32-504.el6.x86_64
            Red Hat Enterprise Linux 6.7(64 bit)   linux version 2.6.32-573.el6.x86_64
            Red Hat Enterprise Linux 6.8(64 bit)   linux version 2.6.32-642.el6.x86_64
            Red Hat Enterprise Linux 6.9(64 bit)   linux version 2.6.32-696.el6.x86_64
            Red Hat Enterprise Linux 7.0(64 bit)   linux version 3.10.0-123.el7.x86_64
            Red Hat Enterprise Linux 7.1(64 bit)   linux version 3.10.0-229.el7.x86_64
            Red Hat Enterprise Linux 7.2(64 bit)   linux version 3.10.0-327.el7.x86_64
            Red Hat Enterprise Linux 7.3(64 bit)   linux version 3.10.0-514.el7.x86_64
            Red Hat Enterprise Linux 7.4(64 bit)   linux version 3.10.0-693.el7.x86_64
            Red Hat Enterprise Linux 7.5(64 bit)   linux version 3.10.0-862.el7.x86_64
            Red Hat Enterprise Linux 7.6(64 bit)   linux version 3.10.0-957.el7.x86_64
            Red Hat Enterprise Linux 8.2(64 bit)   linux version 4.18.0-193.el8.x86_64

打开ISO镜像,到rpm包的目录里面去找到kernel-********.P这个包,中间的星号那一段就是内核
\Packages\kernel-3.10.0-693.el7.x86_64.rpm

基于Debian的OS:Debian、Ubuntu、Google Chrome OS

基于RedHat:RHEL、CentOS、Oracle Linux

其他:Suse

五、软件包管理

1、rpm是RedHat公司的软件包管理机制,内部自动处理软件包的依赖关系。

      yum:基于rpm包管理,从指定服务器自动下载rpm包并安装。

     yum(Yellow Dog Updater,Modified)        配置文件:/etc/yum.conf

     repo:在/etc/yum.repos.d 目录下增加.repo 文件来配置repo 源的地址,定义不同的仓库源。

     更新:yum update
     安装:yum install XXX
     移除:yum remove XXX
     清除已安装过的档案(/var/cache/yum/): yum clean all
    列出所有档案:yum list


搭建yum仓库:

    yum repolist
    vi /abc.repo  #创建本地yum源文件
    [abc]          #文件名
    name=abe
    baseurl=file:///mnt #指定安装源挂载路径
    enabled=1     #开启yum仓库
    gpgcheck=0    #不检查软件序列号


 RPM命令:

    1、安装指定rpm文件: rpm -ivh xxx.rpm
    2、更新指定rpm文件: rpm -uvh xxx.rpm
    3、删除软件包: rpm -e xxx.rpm
    4、查询软件包包含的所有文件列表: rpm -ql xxx
    5、查询文件属于哪个
    6、查询默认软件包是否安装: rpm -q xxx
    5、查询系统已安装的所有软件包: rpm -qa


2、Ubuntu中的软件管理方法  apt-get

    更新:sudo apt-get update
    安装:sudo apt-get isntall package
    移除:sudo apt-get remove package

   

六、硬件相关

cat /proc/cpuinfo 查看CPU 信息,可看到OS的线程属于哪个物理CPU。

驱动位置: cd /lib/modules/3xxx/kernel/driver/scsi/      modinfo 驱动模块
sosreport 收集系统日志
        /var/log/messages 查看驱动     
        sos_commands/pci/lspci  根据BDF查看PCIe设备和驱动名

U盘格式:U盘作为系统启动盘,建议选择FAT32格式,引导系统启动的兼容性较好;
                普通使用时,建议选择exFAT格式。
windows下查看USB驱动版本:右键我的电脑-管理-设备管理器-找到USB设备-右键-属性-驱动程序;
windows下查看VGA驱动版本:CMD运行dxdiag - DirectX诊断工具。


查看物理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


数据库IO:

IO的四种类型:连续读、随机读、连续写、随机写,连续读写的IO size通常比较大(128KB-1MB),主要衡量吞吐量;而随机读写的IO size比较小(小于8KB),主要衡量IOPS和响应时间。

数据库中的全表扫描是连续读IO,索引访问是典型的随机读IO,日志文件是连续写IO,而数据文件是随机写IO。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值