介绍

本文将对Linux常用的各种命令进行介绍。

alias

说明: 为了支持在shell脚本中使用alias命令对其他命令进行重命名

shopt –s expand_aliases   #可以这样进行enable

ascii

说明: 得到一个完整的ASCII表,有对应的16进制和10进制的值

# man ascii

ausyscall

说明: 查看系统调用名和调用号的映射

# ausyscall  --dump

apt-get

序号 命令 说明
1 apt-get install gcl 安装包/更新包
2 apt-get install –s gcl 模拟安装包(simulate)
3 apt-get install –d gcl 下载包,但是不安装它。
4 apt-get clean 清除下载的包文件
5 apt-get remove gcl 删除包
6 apt-get autoremove gcl 1)同时删除依赖的包 2)如果没有指定包名,删除系统中作为依赖包安装的所有不使用的包
7 apt-get update 更新本地数据库
8 apt-get upgrade 命令更新系统上的所有包

相关配置文件:
1)/etc/apt/sources.list 这个列表告诉 apt-get 到哪里寻找包,包括 CD-ROM、本地文件系统以及使用 http 或 ftp 在网上寻找。 可以在 /etc/apt/sources.list.d 目录中添加更多来源。

2)/etc/apt/apt.conf  如果您经常使用 apt-get 命令,觉得不喜欢默认选项,可以设置新的默认选项。 可以使用 apt-config 程序访问 apt.conf 文件。关于 apt.conf 和 apt-config 的更多信息参见手册页。

3)/var/cache/apt/archives/ 下载的文件常常放在 /var/cache/apt/archives/ 中

awk

while循环

# cat file | awk '{ i=1;while(i<=NF) {print NF,$i;i++}}' file

for循环

# cat file | awk '{ for(i=1;i<NF;i++) {print NF,$i}}' file

if语句

# cat file |  awk '{ if (NR<3)  print $1;  else print $2 }'

求和

# cat file | sed -n '1,10p' |  awk '{ print $6 }' | awk 'BEGIN {sum=0}; {sum=sum+$1}; END {print sum}'

bash

说明:可以查看man bash来获取默认键的绑定设置

序号 快捷键 说明
1 ctrl + r 通过关键字搜索history文件里的命令
2 ctrl + u 清除整行
3 ctrl + a 回到命令开头
4 ctrl + w 来清除最后一个单词
5 alt + . 遍历前一个命令使用的最后一个参数
6 !command 执行最近一次执行command的命令
7 ctrl+shift+t 开启一个新的tab terminal,使用alt+num进行切换
8 ctrl + p 搜索前一条命令
9 ctrl + n 搜索后一条命令
10 alt + b 回到前一个字符串
11 alt + f 回到后一个字符串

bc

说明:shell里进行小数计算

# total=`echo "scale=2;($throughput+$total)" | bc`

注:scale表示小数精度。

chrt

说明:调整进程优先级

# chrt -p $pid  //显示进程的优先级属性
# chrt -m      //显示系统支持的最大/最小优先级值
# chrt -f -p 30 $pid
# chrt -f 30 $cmd

cpio

打包压缩:

cpio -o -H newc ./* | gzip -n 9 > abc.cgz

cpupower

查看/设置CPU相关信息

# cpupower frequency-info //查看P-State相关信息
# cpupower idle-info  //查看C-State相关信息
# cpupower idle-set   //设置C-State相关状态

cp && rm

说明:
1) /root/.bashrc里面对cp与rm命令都使用alias进行了重命名
2) rm如果遇到冲突的选项,会以最后一个选项为参数执行rm命令
3) cp如果遇到冲突的选项,会以最开始的选项为参数执行cp命令

这样就会导致,在终端下执行cp –f命令时仍然需要手工进行确认。

dpkg

序号 命令 说明
1 dpkg -s gcl 查看安装包的状态
2 dpkg -L gcl 列出某个包所包含的文件
3 dpkg –S /bin/ls 查看某个文件属于哪个安装包
4 dpkg -S `update-alternatives –display java` 当文件是软链接时, 查看某个文件属于哪个安装包
5 apt-cache search “gcl*” 查找某个包
6 dpkg –l grep gcl 查看某个包是否被安装
7 dpkg -i gcl.deb  安装一个Debian软件包
8 dpkg -r gcl.deb 删除一个已安装的软件包
9 dpkg-deb -build  创建一个新的软件包
10 dpkg-deb -info gcl.deb 从软件包中解压出通用信息
11 dpkg-deb -contents gcl.deb 显示一个软件包的内容

相关配置文件: 1)/etc/dpkg/dpkg.cfg  可以通过 /etc/dpkg/dpkg.cfg 控制 dpkg 的配置,还可以通过主目录中的 .dpkg.cfg 文件提供进一步配置。

2)/var/lib/dpkg dpkg 工具使用文件系统中/var/lib/dpkg树中的许多文件,尤其是/var/lib/dpkg/status文件包含系统上包的状态信息。

dhparm

说明:查看硬盘相关信息

# dhparm  -a  /dev/sda

dmidecode

说明:查看机器型号

# dmidecode | grep "Product Name"

ethtool

说明:查看与设置网卡的相关信息

# ethtool eth0
# ethtool –s ethN speed 1000 duplex full port tp autoneg on

注: 设置网卡1000Mbit/s,全双工,接口方式为tp,自动协调网卡相关参数

expand

说明:转换tab为空格

fdisk

shell脚本中使用

#!/bin/bash

fdisk /dev/sda <<END

m

p

END

find

mtime查询的是文件last modified时间,其中最让人迷惑的就是参数 +N 、 N 、 -N 三个参数的意义了。

参数 说明
+N -∞ — (当前时间-(N+1)*24)
-N 当前时间-(N*24)— +∞
N 当前时间-(n+1)24 — (当前时间 - n24)
  • -mtime 0:24小时内
  • -mtime +0: 24小时前 
# find / -mtime 50    #查找过去的第50天被修改过的文件
# find / -mtime -50   #查找过去50天内被修改过的文件
# find / -mtime +50   #查找50天前修改过的文件
# find / -mtime +50 -mtime +110 #查找过去110天前到过去50天前修改过的文件

hash

说明:缓存command的路径

# hash -l  //list所缓存的路径
# hash -r  //清空缓存

hostnamectl

说明: 看当前主机的信息

# hostnamectl
   Static hostname: localhost.localdomain
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 447762032abf487799cd5dc26f9baa7b
           Boot ID: 81b94e038fcd4f3482ae9eb907b8f9ff
  Operating System: Fedora 26 (Workstation Edition)
       CPE OS Name: cpe:/o:fedoraproject:fedora:26
            Kernel: Linux 4.13.15-200.fc26.x86_64
      Architecture: x86-64
#

id / whoami / groups

说明: 显示用户id和gid

ipmitool

说明:查看系统电力消耗

# ipmitool sensor

grep

# grep  . ./test.txt /dev/null >2/dev/null (追加多个检索文件时会打印出文件名)

growisofs

说明:制作iso的DVD盘

# growisofs -dvd-compat -Z /dev/dvdrw1=/mnt/fedora.iso

注:/dev/dvdrw1 为/dev目录下dvd设备名称,具体名称要到/dev目录下去查看。

gzip

解压缩:

# gzip abc.cgz -dc | cpio -idumv

ipcs

说明:共享内存查看

# ipcs –ma

journalctl

序号 命令 说明
1 journalctl 查看所有日志
2 journalctl -k 查看内核日志
3 journalctl -b 查看系统本次启动的日志
4 journalctl -b -p err 查看指定优先级的日志
4 journalctl -b -1 查看系统上次启动的日志
5 journalctl -n 20 显示尾部指定行数的日志
6 journalctl -f 实时滚动显示最新日志
7 journalctl _PID=xxx 查看指定进程的日志
8 journalctl _UID=xxx 查看指定用户的日至
9 journalctl -u xxx.service 查看某个服务的日志
10 journalctl /path/to/file 查看某个文件的日志
12 journalctl –vacuum-size=1G 指定日志文件占据的最大空间
13 journalctl –vacuum-time=1years 指定日志文件保存多久
14 journalctl –disk-usage 显示日志占据的硬盘空间
15 journalctl –since “2015-01-10” –until “2015-01-11 03:00” 查看指定时间的日志

日志共有8个级别:

  • 0: emerg
  • 1: alert
  • 2: crit
  • 3: err
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug

losetup

  • 查看img内容
# losetup  –f  xxx.img                (把img文件虚拟成硬盘)
# losetup  –a                         (查看)
# kpartx   –a  /dev/loopX             (映射分区,通过loseup –a查看获得)
# mount  /dev/mapper/loopXpX  /mnt

# umount  /mnt
# kpartx  –d  /dev/loopX
# loseup  –d  /dev/loopX

注: 1)当出现vdi等格式的img文件时可能无法kpartx,可以使用qemu-img convert命令把起格式转换为raw格式,然后再尝试。
2)当img文件里面使用的是LVM方式的磁盘分区时,mount时可能出现错误:”mount: unknown filesystem type LVM2_member”,

这个时候需要这样挂载:

# pvscan                    (查看逻辑卷组)
# vgchange –ay $vol_group   (激活逻辑卷组)
# mount /dev/$vol_group/xxx /mnt
  • iso文件虚拟成光驱
# ln -s /dev/loopN /dev/cdrom
# losetup /dev/loopN  ***.iso
# mount /dev/cdrom  /mnt/cdrom

# umount /mnt/cdrom
# loseup –d /dev/loop7

lsblk

说明:

# lsblk

查看磁盘是HDD还是SSD

# lsblk -d -o name,rota /dev/sda
# cat /sys/block/sda/queue/rotational

localectl

说明:查看本地化设置

# localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
#

loginctl

说明:查看当前登录的用户

# loginctl
   SESSION        UID USER             SEAT             TTY
         2       1000 renyl            seat0            /dev/tty2
        c1         42 gdm              seat0            /dev/tty1

2 sessions listed.
#

lscpu

说明:查看CPU个数及相关信息

# cat /proc/cpuinfo
# lscpu
# nproc
# getconf _NPROCESSORS_CONF

配置文件:cat /sys/device/system/cpu/cpu0/cache/index

lshw

查看显卡驱动等信息

# lshw –c display
# lspci –vnn

lsos

说明:利用lsof监控系统进程与程序

序号 命令 说明
1 lsof /home/renyl/testfile 查看文件被哪个进程在使用
2 lsof -c processA 显示进程A打开的文件
3 lsof -p PID 根据进程ID显示打开的文件
4 lsof -u username 根据用户显示打开的文件
5 lsof -g GPID 根据进程组IP显示打开的文件
6 lsof -i tcp:25 查看指定协议/端口号的文件
7 lsof -i tcp@192.168.34.128 查看远程已打开的网络链接
8 lsof +D /home/ren 查看目录被打开的情况

lspci

# lspci -vvv

mcpet-kvm

# mcpet-kvm -t  <秒数>

mii-tool

说明:查看网卡连接状况

# mii-tool -w eth0 eth1

mktemp

说明:创建临时文件供shell脚本使用

# mktemp  -dq  /tmp/file. XXXXXXXXXX (必须以X这种格式结尾)

注:
1) -d:表示生成一个目录而不是一个文件
2) -q:表示quiet模式(即使出错也不输出一些错误信息到stdout)

modinfo

查看模块xfs的相关信息

# modinfo xfs

mount

说明:远程挂载

# mount -t nfs 192.168.2.14:/data/sdb2/RHEL_GA/RHEL7.2GA_x86_64/ /mnt/
# mount -o username=share,password=share  //10.167.226.124/share  /mnt

注:

  • 当使用root账户都无法改正文件权限时,重新挂载文件所在分区,因为挂载的时候可能是以只读方式挂载的。
  • 使用如下命令重新挂载:mount /dev/sda3 -o remount

如果下面命令能挂载成功,说明UUID没有错误。

mount UUID=bf0c50bb-8b71-45f8-91e2-f197e2f8b7c9 /home/renyl/,如果能挂载成功,说明UUID没有错误。

multipath

查看:

# multipath –ll
# dmsetup ls

删除:

# multipath -F /dev/mapper/xxx
# dmsetup remove

mv

-T选项的用法:

# touch fileA
# mkdir dirA
# ln -sf dirA  linkA
# mv fileA linkA  => fileA will be put into dirA
# mv -T fileA linkA => file A will be rename linkA
# touch fileA
# mkdir dirA
# mv fileA dirA
# mkdir dirB

# mv dirA dirB    => dirA will be put into dirB
# mv -T dirA dirB => rename dirA to dirB, dirB must be a empty directory

netcat

在server端执行

# nc -l -k port  # -l参数表示listen,-k表示连续监听,port表示端口号
# nc -l port |   # 显示出来执行送给bash执行

在client端执行

# nc  ipaddr  port
# echo  "command" | nc ipaddress portnum

ntpdate

说明:同步时间并设置墙上时间

# ntpdate cn.pool.ntp.org
# hwclock -w

numactl

说明:查看与控制CPU和Memory的使用

# numactl –hardware   (查看numa node)

openssl

说明: 查看证书

openssl s_client -showcerts -connect www.baidu.com:443

oprofile

说明:

  • 配置 OProfile 是否监视内核,这是启动前唯一需要的配置选项,其它选项都是可选的。
  • 需要装kernel-debug包。

root用户身份执行以下命令:

# opcontrol –-vmlinux=/boot/vmlinuz-`uname –r` //设置是否监视内核

# opcontrol  --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux
# opcontrol  --no-vmlinux  //不监视内核

# opcontrol  -p/ --separate=none 
# opcontrol  -l/--list-events //查看可监视事件并设置

# opcontrol --event=DTLB_MISSES:6000:0x01:1:1
# opcontrol  -s/--start  //启动

# opcontrol  --init
# ./path/to/mybinary //运行待分析的程序

# opcontrol  -s/--start
# opcontrol –d/--dump //取数据

# ./my-start-run.sh.bak log-host-nopci-full-memory-oprofile-1
# opcontrol –t/--stop //停止

# opcontrol  -d/--dump
# opreport –l ./path/to/mybinary //分析结果

#opcontrol  -t/--stop

parted

序号 命令 说明
1 parted $DISK p 显示磁盘分区信息
2 parted $DISK rm $number 删除disk的number号分区
3 parted /dev/$disk -s mklabel gpt 设置磁盘为gpt模式
4 parted -s $DISK mkpart primary xfs 1049KB $SIZE 创建新分区

partprobe

通知操作系统分区表发生的变化

# /sbin/partprobe  #通知操作系统分区表发生的变化

pfmon

序号 命令 说明
1 pfmon –l 列出硬件事件名称
2 pfmon –i event_name 查看事件详细信息
3 pfmon –e event_name /path/mybinary 指定硬件事件并运行程序使

当程序运行结束后,pfmon会显示该事件的采样次数,如下所示:

pfmon –e L2D_MISSES ./test
  1652 L2D_MISSES

perf

序号 命令 说明
1 perf record –g –o result ./a.out 采集信息
2 perf record -g -p $pid -o result 根据PID来采集信息
3 perf report -g -i result 查看采集的信息
4 perf list 列出系统事件
5 perf stat –e “kvm:*” -a command -a监视所有cpu,kvm:*表示所有的kvm
6 perf stat -e cache-misses -p 4625 采集进程号为4625的cache-misses数
7 perf record -q -ag –realtime=1 -m 256 – sleep 10  

powertop

查看:查看进程电力消耗相关信息

# powertop

qemu-img

说明:创建一个设备文件

# qemu-img create -f raw  myfile.img 8G cache=none

注:

  • 7系下不要加cache=none
  • 使用上面的命令后,ls命令查看该文件的大小,会显示8个GB,但是当你用du命令查看该文件时,你会发现该文件的大小为0KB

raw

序号 命令 说明
1 raw /dev/raw/raw 通过主从设备号绑定
2 raw /dev/raw/raw /dev/ 通过设备来绑定
3 raw –qa 查看
4 raw /dev/raw/rawN 0 0 指定主从设备号为0来解绑

注:

  • 其中N的范围是0-8191。(raw目录不存在可以创建)
  • 执行序号1的命令后,会在/dev/raw下生成一个对应的raw[N]文件,用命令方式绑定裸设备在系统重启后会失效。

IO测定:

  • blockio模式:不挂载 直接dd操作那个分区。
  • raw模式:先raw /dev/raw/raw1 /dev/sdd1 ,再直接操作分区。

相关背景知识:

  • 裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Linux通过文件系统来读取的特殊字符设备。 裸设备可以绑定一个分区,也可以绑定一个磁盘。
  • 字符设备:对字符设备的读写不需要通过OS的buffer。它不可被文件系统mount。
  • 块设备:对块设备的读写需要通过OS的buffer,它可以被mount到文件系统中。

rpm

说明:强制安装rpm包不检查依赖性

# rpm -ivh /home/qemu-kvm-0.12.1.2-2.209.el6.x86_64.rpm  --nodeps

说明: check postinstall script

# rpm -qp --scripts xxx.rpm

rpm2cpio

说明:解压与查看rpm包内容(rpm包括是使用cpio格式打包的,因此可以先转成cpio然后解压)

# rpm2cpio xxx.rpm | cpio –div

seq

说明:以单位1进行递增

# for i  in `seq num1 num2`; do echo $i; done

scp

# scp  192.168.11.4:/home/renyl/*    ./    (把远程的文件传到本地,可以使用*号)
# scp  localfile   192.168.11.4:/home/renyl (把本地的文件传到远程)

screen

序号 命令 说明
1 screen –S session_name -S选项表示给会话起个名字
2 screen -ls 查看
3 screen –r xxx 恢复
4 ctrl+a+d detach
5 exit 退出

ssh

  • 在远程机器上运行命令
# ssh  root@192.168.122.92 (之间要有空格) “cd /home/renyl/; ./start_run.sh”

注: ssh IP “command”(command接在ip之后,同一行)

  • 端口转发
# ssh -L  [bind_address:]port:host:hostport <hostname>
# ssh -R  [bind_address:]port:host:hostport <hostname>

说明:
1)表示访问IP地址为bind_address、端口号为port的连接会被SSH转发到IP地址为host、端口号为hostport的应用。
2)SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。一旦关闭了此连接,相应的端口转发也会随之关闭。
3) 我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发
4) -L表示正向端口转发,-R表示逆向端口转发。

Ex1:(访问192.168.10.10:80端口会被转发到192.168.10.20:80上)

ssh -L 192.168.10.10:80:192.168.10.20:80 192.168.10.20
ssh -L 192.168.10.10:80:localhost:80 192.168.10.20

Ex2:(访问192.168.10.20:88端口会被转发到192.168.10.10:80上)

ssh -R 192.168.10.20:88:192.168.10.10:80 192.168.10.20
ssh -R 192.168.10.20:88:localhost:80 192.168.10.20

下面的command-line表示访问当前机器的任何IP地址都会进行转发:

# ssh -g -L port:host:hostport <hostname>
# ssh -L 0.0.0.0:port:host:hostport <hostname>

或者在~/.ssh/config文件进行如下配置

Host allen-forward

	User renyl
	HostName lucky
	LocalForward localhost:6666 192.168.0.2:22

Host allen
	User renyl
	HostName localhost
	Port 6666

说明:
1)首先运行 ssh allen-forward 建立ssh通道
2)然后就可以运行 ssh allen 进行连接了

stty

说明: 调整终端size

stty cols 231 rows 81

sync

说明:将dirty的内容写回硬盘

sync

sysctl

sysctl -a #查看系统所有配置参数
sysctl -n kernel.hostname #打印参数值
sudo sysctl -w kernel.hostname="kulong0105" #改变参数值
sudo sysctl -p  #添加设置到/etc/sysctl.conf,使其重启后仍然有效

sar

序号 命令 说明
1 sar $interval $count -o sar.log 采集信息
2 sar –f sar.log –P ALL 采集所有的CPU信息
3 sar –f sar.log –P 1,2,3-P 表示指明具体的CPU
4 sar –f sar.log –S xx:xx:xx –E xx:xx:xx 指定起始和结束时间
5 f8sar –f sar.log –u ALL –P ALL 看所有系统信息
6 sar –f sar.log –n ALL 查看网络统计的信息

smartctl

说明:查看磁盘信息

# smartctl -i /dev/sda

taskset

说明: 绑定程序到某一个或某些cpu core上

序号 命令 说明
1 taskset –p mask pid 根据PID及掩码绑定
2 taskset –c numlist command 根据命令及cpulist绑定
3 taskset -p –c numlist pid 根据PID及cpulist绑定
4 taskset –p pid 查看

timedatectl

说明:查看当前时区设置

# timedatectl

tmux

说明:终端多路复用工具

序号 命令 说明
1 tmux 打开一个匿名的session
2 tmux new-session -s kulong0105 开个一个命名为“kulong0105”的session
3 tmux ls 列出所有的session
4 ctrl+s+d detach 这个session
5 tmux a -t kulong0105 attch 到命名为kulong0105的session
6 tmux kill-session –t kulong0105 杀死命名为“kulong0105”的session
7 tmux kill-server 杀死所有session
8 ctrl+s+t 显示钟表,很geek
9 ctrl+s+c 创建一个新窗口
10 ctrl+s+w 窗口之间的切换
11 ctrl+s+b/v 创建一个新的窗格

相关配置:(文件/etc/.mtux.conf或~/.tmux.conf)

unbind C-b
set -g prefix C-s
setw -g mode-keys vi

# split window like vim
# vim's defination of a horizontal/vertical split is revised from tumx's

bind b split-window -h
bind v split-window –v

# move arount panes wiht hjkl, as one would in vim after C-w
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# resize panes like vim
# feel free to change the "1" to however many lines you want to resize by,
# only one at a time can be slow
bind < resize-pane -L 10
bind > resize-pane -R 10
bind - resize-pane -D 10
bind + resize-pane -U 10

# bind : to command-prompt like vim
# this is the default in tmux already
bind : command-prompt

注: 为了使配置文件生效,先启动一个tmux,按下ctrl+s+:,然后输入source /root/.tmux.conf,按下Enter键即可。

tc

  • 限制输出流量:

method1: (only use tc)

#!/bin/bash

export MY_CARD="enp2s0"
tc qdisc add dev $MY_CARD root handle 1: htb
tc class add dev $MY_CARD  parent 1: classid 1:1 htb rate 400mbit
# 同时限制端口速度
tc filter add dev $MY_CARD parent 1: prio 1 protocol ip u32 match ip dst 0.0.0.0/0 match ip sport 80 0xffff flowid 1:1

method: (tc with cgroup)

#!/bin/bash

export MY_CARD="enp2s0"
echo 0x100001 >  /sys/fs/cgroup/net_cls/net_cls.classid
tc qdisc add dev $MY_CARD root handle 10: htb
tc class add dev $MY_CARD parent 10: classid 10:1 htb rate 400mbit
tc filter add dev $MY_CARD  parent 10: protocol ip prio 10 handle 1: cgroup
  • 取消输出流量限制:
#!/bin/bash

export MY_CARD="enp2s0"
tc qdisc delete dev $MY_CARD root

注意:(网络带宽为1000mbit)
1) 当设置输出带宽限制为20mbit时:对输入带宽没有任何限制,即输入带宽仍可以达到1000mbit。 2) 当设置输出带宽限制为200kbit时,同时还会对输入流量产生限制作用,经测定此时输入带宽只能达到20mbit/s。(不理解)

  • 限制输入与输出流量:
#!/bin/bash

export MY_CARD1="enp2s0"
export MY_CARD2="ifb0"

modprobe ifb  numifbs=1
ip link set dev $MY_CARD2 up
tc qdisc add dev $MY_CARD1 handle ffff: ingress
tc filter add dev $MY_CARD1  parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $MY_CARD2

#限制输出
tc qdisc add dev $MY_CARD1 root handle 1: htb default 10
tc class add dev $MY_CARD1 parent 1: classid 1:1 htb rate 50mbit ceil 50mbit burst 1m
tc class add dev $MY_CARD1 parent 1:1 classid 1:10 htb rate 50mbit

#限制输入
tc qdisc add dev $MY_CARD2 root handle 1: htb default 10
tc class add dev $MY_CARD2 parent 1: classid 1:1 htb rate 40mbit ceil 40mbit burst 1m
tc class add dev $MY_CARD2 parent 1:1 classid 1:10 htb rate 40mbit
  • 取消输入流量限制:
#!/bin/bash

export MY_CARD1="enp2s0"
export MY_CARD2="ifb0"

tc qdisc delete dev $MY_CARD1 root
tc qdisc delete dev $MY_CARD2 root
tc qdisc delete dev $MY_CARD1 handle ffff: ingress

ulimit

修改系统资源限制,有两种方法:

  • ulimit 命令 (立刻生效,仅对当前session)
  • /etc/securit/limits.conf 文件(需要重新登陆session才能生效)

然而,发现对systemd启动的服务进程却无效,根本原因是由于systemd启动的服务,不通过PAM认证, 因此,不会调用pam_limits.so模块,进而,通过ulimit命令或者使用limits.conf文件,都没有效果。

可以通过修改/usr/lib/systemd/system/xxx.service文件,在[Service]字段,添加类似

LimitNOFILE=65536
LimitMEMLOCK=infinity

这样的变量,使其生效。

refers:

  • https://support.hpe.com/hpsc/doc/public/display?docId=mmr_kc-0128457

yum

使用createrepo配置

# mount –o loop  XX.iso  /root/
# cd /root/Packages
# rpm -ivh createrepo-0.9.8-5.el6.noarch.rpm
# cd /root
# createrepo /root/       (表明把仓库文件放在该目录下)
# cd /etc/yum.repos.d
# cat /etc/yum.repos.d/mycdrom.repo
[Base]
name=RHEL7 ISO Base
baseurl=file:///mnt/         #mnt为mount的目录
enabled=1
gpgcheck=0
[root@localhost /]

直接使用/etc/ yum.repos.d/file.repo 文件配置:

# cd /etc/yum.repos.d/
# cp file.repo file.repo.bak
# cat file.repo
[file]  #最好和文件名保持一致
name=test  #这个随便写
baseurl=file:///mountdir   #这个目录很重要,跟iso文件下的repodata同一层目录
enabled=1
gpgcheck=0

yum相关命令

序号 命令 说明
1 yum list 列出所有软件包
2 yum list available 列出可用的包
3 yum list updates 列出可更新的包
4 yum install 安装
5 yum remove 删除
6 yum grouplist 列出可安装的组
7 yum groupinstall 用系统中的组安装
8 yum groupinfo 系统中组的信息
9 yum search command 查找command这个命令在哪个包
10 yum clean all 清空缓存
11 yum –showduplicates list 列出所有包括不同版本的包
12 yum install $pkg-version 安装指定版本的包
13 yum –downloadonly $pkg 只下载包
14 yumdownloader $pkg 只下载包
15 yumdownloader –resolve $pkg 下载包及其相关依赖
16 yum localinstall $path_to_rpm 安装本地包

virsh

序号 命令 说明
1 virsh list –all 查看系统所有虚拟机
2 virsh list 查看已启动虚拟机
3 virsh start domain 启动某个虚拟机
4 virsh edit domain 编辑配置文件
5 virsh dumpxml domain > tmp.xml dump配置文件
6 virsh vcpupin domain $guest_cpu $host_cpu 绑定Guest的CPU
7 virsh vcpuinfo domain 查看信息
8 virsh destroy domain 关闭虚拟机
9 virsh –c lxc:/// define domain.xml 定义xml文件
10 virsh –c lxc:/// start domain 启动一个lxc
11 virsh –c lxc:/// console domain 连接一个lxc
12 virsh -c qemu+ssh://IP/system list 查看远程机器的Guest

virt-what

说明:检测当前是否在虚拟机环境下

# virt-what

或者

# cat /proc/cpuinfo | grep hypervisor

watch

说明:查看变化信息

# watch -d -n1 du -m file1      //-d表示显示后面命令执行的变化

wget

  • 在A机器上(IP地址为:193.168.116.53)执行如下命令,从fedora官网拉openstack仓库。

juno:

# wget -m -np -p -k -L -P . https://repos.fedorapeople.org/repos/openstack/openstack-juno/epel-7/
# wget -m -np -p -k -L -P . https://repos.fedorapeople.org/repos/openstack/openstack-juno/epel-7/epel/
# wget -m -np -p -k -L -P . https://repos.fedorapeople.org/repos/openstack/openstack-juno/epel-7/repodata/

注:-c选项表示断点续,在实际应用中,加了-c选项,网络断开后,重新连接网络后,再执行如上命令,不会继续下载。

  • 在A机器上,启动httpd服务。(在/etc/httpd/conf/httpd.conf文件中配置Documentroot参数)

  • 在B、C、D机器上,添加yum源,内容如下:

    [juno_repo]
    name=juno
    baseurl = http://193.168.116.53/epel-7
    enabled=1
    gpgcheck=0
    

xargs

说明:

  • 使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。
  • 但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。 错误信息通常是“参数列太长”或“参数列溢出”。
  • xargs命令每次只获取一部分文件而不是全部。当find命令把匹配到的文件传递给xargs命令, 它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

注:-exec: find命令对匹配的文件执行给出的shell命令(如:find . -type f -exec ls -l { } \;)

# find ./ | xargs dos2unix {}        --- {} 表示所有find到的文件
# ls | xargs -i mv {} {}.bak         --- -i 选项告诉 xargs 用每项的名称替换{}
# find -name ".svn" |xargs rm -rf

xfs

备份与恢复:

# xfsdump -f /mountdir/backup  -L lable  -M lable /dev/sda3
# xfsrestore -f /mountdir/backup  ./new_dir

配额控制:

# mount -o usrquota,grpquota  /dev/xxx  /mountdir
# xfs_quota -x -c 'limit bhard=500m someuser' /mountdir
# xfs_quota -x -c "report"
# repquota -ug /mountdir

拷贝:

# xfs_copy /dev/sdc1 /dev/sdc2

注:
1)使用xfs_copy可以拷贝XFS文件系统,用户可以将一个或几个文件系统拷贝到磁盘分区或文件中
2)如果多个目标,可并行
3)目标文件直接被格式化xfs文件系统
4)如果原始文件系统小于新文件系统,建议使用mkfs.xfs/xfsdump/xfsrestore

冷冻与恢复:

# xfs_freeze -f /mountdir    //暂停
# xfs_freeze -u /mountdir    //恢复

注:源文件系统应该被卸载或者只读被挂载或者被freeze,目标文件系系统应该被卸载。

修复:

# xfs check /dev/sdc1

注:xfs文件系统的检测和修复在运行xfs_check 、xfs_repair之前,被检测的文件系统应该被卸载或者只读被挂载,否则文件系统会崩溃。