• Linux常用命令简记


    ls: 查看文件夹下文件和文件夹列表

    ls -lah

    -l: 列表形式显示

    -a: 查看所有目录,包括隐藏目录

    -h: 以易读的方式显示文件大小

    -s: 显示文件占用的data block空间大小

    -S: 按文件大小降序排列

    -t: 按文件m/a/ctime降序排列

    -r: 逆序排列

    -R: 递归遍历

    cp: 复制文件或目录

    cp -ai ~/test ~/Downloads/

    -a: 相当与 -pdr,重要参数

    -p: 连同文件属性一起复制过去(备份时常用)

    -d: 如果源文件为链接文件的属性,则复制后的文件为链接文件,而不是真实文件本身

    -r: 递归的复制所有文件

    -i: 当遇到已存在文件时,询问用户

    top: 查看系统进程资源占用情况

    top -d 2 -p 1234 : 将资源使用情况更新时间设为2秒,查看的进程为pid 1234

    top中的PRI和NI是进程的优先级,其中Priority(new)=Priority(Old)+Nice, PRI越小表示进程优先级越高,用户仅可以调整NI值,所以将NI调整为负值可以提高进程优先级,

    NI的调整范围是 -20~19

    在top程序界面内快捷键

    shift + p : 按cpu使用率排序

    shift + M : 按内存使用率排序

    r : 调整process的NICE值

    q : 退出top

    使用 nice 和 renice 命令调整进程优先级

    nice -n 10 vim & : 运行一个vim,并将他的nice值设置为10

    renice -10 1234 : 将pid为1234的进程的nice值调整为-10

    ps: 显示详细进程信息

    常用格式: ps aux

    a 显示所有用户进程,包括其他用户

    u 以用户为主的格式显示进程状况

    x 显示不受终端控制的进程

    ps -l : 以特定格式现实当前用户shell进程

    ps axjf : 以工作格式现实所有用户进程的树状图

    ps -ef : 使用全格式显示所有进程

    -e: 显示所有进程

    -f: 使用全格式

    mv: 移动或重命名文件或文件夹

    常用格式: mv -f test1/ test2/

    -f 强制模式,在移动前不询问

    test1/ 待移动文件夹

    test2/ 移动到的目标文件夹

    常用格式: mv file1 file2 dir1/

    将file1 file2 移动到 dir1

    find: 查找文件或文件夹

    常用格式: find / -type f -iname '*test'

    / 查找的目录,此处为更根目录

    -type f,d,l 类型:普通文件,目录,链接文件

    -iname 查找文件名,并忽略大小写

    '*test' 要查找的文件名,此处是以test结尾的文件名

    -mtime n/+n/-n : 指定最后修改时间在  n天前24小时内 / (n+1)天前无限小时 / n天至今 的文件  find ~/ -mtime +4 查找5天前的文件

    -newer file: 查找mtime比 file 新的文件   find ~/ -newer test

    df: 查看磁盘使用情况

    常用格式: df -aTh

    -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统

    -T 显示磁盘类型,如ext4

    -h 根据目前磁盘空间和使用情况 以更易读的方式显示

     

    cat: 显示文件内容,或合并两个文件

    常用格式: cat myfile

    常用格式: cat -n myfile1 > myfile2

    -n 对myfile1数据加上行号

    myfile1 需要复制数据的文件

    myfile2 复制数据的目标文件,会将myfile2的原数据清空

    常用格式: cat -n myfile1 myfile2 > myfile3

    myfile1 myfile2 需要合并的文件

    myfile3 合并后保存的文件

    chmod: 改变文件或文件夹的权限

    常用格式: chmod 664 myfile

    664 文件权限码,此处为默认新建文件权限,rw-rw-r--

    chmod u=rwx g=rwx o=rwx myfile

    将myfile的权限改为用户为rwx,用户组为rwx,其他用户为rwx

    chgrp: 改变文件或文件夹所属用户组

    常用格式: chgrp root myfile

    root 修改到的目标用户组

    myfile 需要修改的文件名

    chown: 改变文件或文件夹所有者

    常用格式: chown -R lewis.mygroup filename

    -R: 当前目录下的所有文件和文件夹

    lewis.mygroup: 将所有者改为mygroup用户组的lewis用户

    filename: 需要修改所有者的文件或文件夹名称

    grep: 字符串查找,常用于其他命令的结果中的查找

    常用格式: ls -l | grep myfile

    myfile 需要查找的字符串

    ls -l | grep -vi 'test'

    查找除了test或TEST之外的内容

    wc: 统计文件中的单词书,字节数,行数

    常用格式: wc -wml myfile

    -w 文件中的单词数

    -m 文件中的字符数

    -c 文件的字节数

    -l 文件的行数

    tar: 解压或压缩文件

    常用格式: tar -zcv -f ~/Downloads/downloads.tar.gz ~/Downloads

    将Downloads的文件压缩到一个叫downloads.tar.gz的文件

    -z 使用gzip解压或压缩

    -c 建立压缩文件

    -v 显示执行过程

    -f 需要操作的文件

    tar -zvcp -f backup.tar.gz --exclude=/etc/*.sh /etc

    备份etc文件夹下除了.sh结尾的所有文件到 backup.tar.gz

    -p 压缩时保留文件原有的属性,备份常用

    --exclude 不打包的文件

    常用格式: tar -xjv -f ./test.tar.bz2 -C ./test/  #解压文件到指定目录

    -x 解压文件

    -j 以bzip2解压或压缩

    -C 解压到指定目录

    常用格式: tar -zv -f ./test.tar.gz  #查看压缩包文件

    -t: 查看压缩包文件

    ctrl+z: 挂起当前任务

    jobs: 查看后台任务

    fg: 将一个后台任务启动后调至前台执行

    常用格式: fg %1

    %1: 任务号,可以从jobs命令查看得到

    bg: 将一个后台任务启动后调至后台执行

    常用格式: bg %1

    %1: 任务号,可以从jobs命令查看得到

    mount: 挂载一个设备

    mount -a

    读取/etc/fstab文件,将未挂在的设备全都挂载上去

    mount -n -o remount,rw /

    -n : 不将挂在记录写入/etc/mtab

    在单用户模式时,将根目录重新挂载变成读写模式

    mount -o iocharset=gb2312,ro -t ntfs /dev/sda5 /mnt/windrived

    -o: 额外参数, iocharset: 设置编码, ro 只读

    -t ntfs: 设置要挂载设备的文件系统,有super block信息的磁盘分区可以不需要次参数

    /dev/sda5: 要挂载的设备路径

    /mnt/windrived: 要挂在的目标挂载点

    mount -o loop /home/alexis/game.iso /mnt/iso

    挂载特殊设备,如镜像文件,文件系统文件

    umount: 卸载一个设备

    常用格式: umount -l /mnt/windrived

    -l: lazy umount,等到设备空闲的时候自动卸载之

    此外umount命令也可以使用设备名来卸载设备,例如 umount -f /dev/sda3

    kill: 杀掉一个进程

    常用格式: kill -9 1234

    -9: 强制杀掉他,也可以用-SIGKILL

    1234: 进程pid,可以有ps aux查看获得 

    进程信号:

    1 : 重启进程

    9 : 强制结束进程

    15 : 正常结束进程 

    17 : 挂起进程,相当与ctrl+z

    kill -l : 列出所有可用的进程信号量

    killall: 杀掉同名进程

    常用格式: killall -KILL chromium

    -KILL: 强制终止,这里加进程信号量,和kill命令的一样

    chromium: 要杀掉的同名进程名

    tail: 显示文件尾部内容

    常用格式: tail -1 /etc/passwd, tail -f /etc/passwd

    -1: 显示最后一行内容

    -f: 显示最后十行内容,并不断更新

    useradd: 添加用户账号

    常用格式: useradd testuser -u 1234 -g root -d /home/testuser -s /bin/bash

    -u: 设置用户uid

    -g: 设置用户组

    -d: 设置用户根目录

    -s: 设置用户启动shell

    简记: 此命令会在/etc/passwd /etc/shadow中添加两条记录

     userdel: 删除用户账号

    常用格式: userdel -r testuser

    -r: 删除用户相关,如用户根目录,但如果用户根目录是由其他用户创建的则不会删除

    usermod: 修改用户属性

    常用格式: usermod -L testuser , usermod -U testuser

    -L: lock,禁用用户

    -U: unlock,启用用户

    常用格式: usermod -g mygroup testuser

    -g: 修改用户组, 将 testuser 用户组改为mygroup

    groupadd: 添加用户

    常用格式: groupadd mygroup -g 1234 

    -g: 设置用户组uid

    groupdel: 删除用户组

    常用格式: groupdel mygroup

     ln: 建立文件链接

    常用格式: ln file fileln, ln -s file filesln

    -s: 建立软链接,不加上 -s 则建立硬链接

    注意建立链接请用绝对路径,不然链接文件会出现错误

    seq: 生成一个序列

    常用格式: seq -w 1 100

    -w: 等宽序列,生成 001 002 003 ... 099 100

    常用格式: seq -f "str%03g" 1 100

    -f "str%03g": 指定生成格式,此处用str拼接 1~100的序列, 1~100为3位等宽数字,不够的用0补齐,不写0则用空格补齐,如图

    seq -f '%0.f' 10000000000 10000000000

    seq在生成大数字会默认使用科学计数法, 这个格式可以避免使用科学计数法

    ifconfig: 网络设备设置

    常用格式: ifconfig -a

    -a: 显示所有网络设备,包括未启用的网络设备

    常用格式: ifconfig eth0 up

    eth0 up: 激活第一块网卡

    iwconfig: 无线网络设备设置

    chkconfig: 管理linux daemon(包括 stand alone 和 super daemon管理的服务)

    常用格式: chkconfig --level 0123456 network on

    --level 0123456 network on: 在系统级别为0123456时启动network服务

    chkconfig --add testdaemon : 加入自定义的服务,testdaemon位于/etc/init.d

    chkconfig --del testdaemon : 删除自定义的服务

    lspci: 查看所有pci设备

    lsusb: 查看所有usb设备

    scp: 远程复制命令

    常用格式: scp -P 1234 /root/test root@192.168.3.3:/var/www/io/

     -P 1234: 目标主机端口号

    root@192.168.3.3:/var/www/io/: 将test文件复制到192.168.3.3的/var/www/io文件夹,使用root账号登录

    passwd: 修改密码

    netstat: 查看端口状态

    常用格式: netstat -anptu

    a: 显示所有连接的socket

    n: 用IP代替域名

    p: 显示连接的程序以及PID

    t: 显示tcp连接

    u:显示udp连接

    du: 查看文件夹和文件大小

    常用格式: du -sh ./*

    ./*: 统计当前文件夹下所有文件夹容量情况

    h: 以用户友好的方式显示文件大小

    s: 只显示顶层文件夹的容量,不显示子文件夹的容量

    统计结果递归包括子目录下所有文件大小总和

    du -Ssh ./

    统计当前目录所有文件大小,统计出来的总和不包括子目录内的文件

    make : 编译源码

    make mrproper : 清除编译过程产生的中间文件以及配置文件

    make clean : 仅仅清除编译过程产生的中间文件

    fdisk: 磁盘管理工具

    fdisk -l  : 列出磁盘分区信息

    fdisk /dev/sda  # 注意没有 sda1 或者 sda2 这个数字

    对 /dev/sda 这块磁盘进行管理,可以增加分区,删除分区等

    使用fdisk添加或删除分区后,执行 partprobe 让内核更新系统分区表

    mkfs: 分区格式化,在使用fdisk分区以后可以是用此命令格式化分区

    mkfs -t ext4 /dev/sda8

    -t: 指定分区格式,此处将sda8分区格式化成ext4分区

    unzip: 解压zip压缩包

    unzip test.zip -d ./test  #将test.zip的文件解压到test文件夹

    unzip -v test.zip  #查看压缩包文件

    uname: 查看系统信息

    uname -a : 查看所有系统信息

    tracerout: 路由跟踪

    traceroute -T --sport=3324 -p 80 www.google.com

    -T : 使用 tcp 的方式来 trace. 除了 -T 还可以用 -I 表示 ICMP, -U 表示 UDP, Linux 下默认是 UDP

    --sport : 指定源端口

    -p : 指定目标端口

    nslookup: 域名信息查看

    nslookup www.google.com

    init:  切换系统 level

    init 0/3/5/6

    0: 关机

    3: 命令行模式

    5: 图形界面模式

    6: 重启

    sync: 将内存中未保存数据同步到硬盘

    shutdown: 关机/开机等

    shutdown -h now "alexis shutdown the server": 立即关机,并发送通知消息"alexis shutdown the server"给其他用户

    shutdown -r 20:30 : 在20:30分重启

    shutdown -k 10 "i will shutdown the server in 10 minutes" : 不是真正的关机,只是发送消息给其他用户

    ctrl+d: 相当与在shell中输入exit

    忘记root密码后的处理方法

    1.进入grub菜单后按e键,进入编辑模式

    2.在kernel那行的最后空格,并键入 single

    3.F10启动

    4.输入新密码重启

    last: 列出登入系统的用户相关信息

    last -xnR 10 -f /var/www/wtmp -i 127.0.0.1 -id alexis

    -x: 显示登入登出信息

    -n: 显示的行数

    -R: 去掉hostname栏位

    -f: 指定log文件, /var/log/wtmp为linux记录所有用户登入相关信息的日志文件,默认用的就是这个,可以不加 -f,而/var/www/btmp则更为详细,记录了远程登录信息,如SSH

    -i: 指定查询的id

    -id: 指定查询的用户名

    nl: 显示文件内容并显示行数

    od: 以二进制形式显示文件内容

    od -t c test

    -t: 指定显示类型, a 默认字符, c askii, d 十进制, f 浮点数, o 八进制, x 十六进制

    关于文件时间,文件的时间有三个

    1. modification time (mtime): 文件最后修改时间

    2. access time (atime): 文件最后读取时间

    3. status time (ctime): 文件属性最后修改时间, chmod 什么的

    默认的ls和ll显示的时间是 modification time,如果要显示atime,ctime,可以添加--time参数

    ls -l --time=atime test

    显示的就是test文件的最后访问时间

    可以用touch来更新文件时间,此命令更新的是mtime和atime,而ctime则无法更改

    touch test

    可把test文件的m/atime更新为当前时间

    touch -d "2 days ago" test

    可把test文件的m/atime改为两天前 

    xargs: 将某命令输出作为另一个命令的参数输入

    sudo find /usr/local/test/bin -type f -iname ‘*.sh’ | xargs -i  sudo ln -l /usr/local/test/bin/{} /usr/bin/{}

    这条命令批量建立软链接,其中 xargs -i 参数表示用 {} 代表管道前的命令的标准输出结果

    xargs -I 则是指令管道前的命令的标准输出结果替换符号,例如 xargs -I {} sudo lin -l /test/bin/{} /usr/bin/{}

    tar -tz -f test.tar.gz | xargs -i rm -rf {}

    这个命令可以用来删除你一不小心散落一地的节操

    ls | xargs -i -e'test' file {}

    将ls的结果作为file的参数输出,并且在遇到 test 的时候停止

    egrep: 正则匹配

    find /var/www -type f | egrep -name '*.(c|php)$' 

    获取所有后缀为.c .php的文件

    file: 查看文件类型

    locate: 通过数据库文件 /var/lib/mlocate 来查找文件,其速度会比find快很多

    由于该数据库文件是定时跟新的,所以查找前可以先更新数据库

    updatedb

    locate -i -r .*\.php$

    查找所有以php结尾的文件,忽略大小

    whiereis : 命令用来查找path里的位置,例如 whereis ls

    which : 用来在path里查找可执行文件的位置,查找出来的东西比whereis少

    ldd (library dependency discovery) : 查找共享库的依赖包

    ldd $(which mysqld)

    chattr +x/-x: 给文件添加特殊属性

    chattr +a test: 让test只能添加内容,不能修改和删除内容

    chattr +i test: 让test不能删除,改名,设置软链接,也不能写入,添加数据

    chattr -ai test: 去除 ai 属性

    lsattr: 列出文件的特殊属性

    dumpe2fs: 查看ext文件系统信息

    dumpe2fs -h /dev/sda1

    -h: 只显示super block的信息,不加则会现实所有 block group的信息

    fsck: 文件系统检测修复工具

    fsck -CaDf /dev/sda8

    -C: 现实进度条

    -a: 自动修复问题sector

    -D: ext文件系统专有选项,可以对文件系统的目录进行优化

    -f: ext文件系统专有选项, 对没有unclean标志的磁盘分区也强制检查

    e2label: 修改磁盘分区卷标

    e2label /dev/sda7 "Smilodon"

    hdparm: 磁盘性能测试

    hdparm -tT /dev/sda

    -t: 测试实际读取性能

    -T: 测试磁盘cache读取性能

    生成磁盘分区文件并挂载

    dd: 转换和复制文件

    dd if=/dev/zero of=/home/alexis/loopdev bs=1M count=512

    使用/dev/zero生成一个blocksize为1M,一共512M大小的/home/alexis/loopdev文件

    mkfs -t ext4 /home/alexis/loopdev

    将loopdev格式化成ext4文件系统

    mount -o loop /home/alexis/loopdev /mnt/linux/test

    将刚刚生成的那个文件挂载到系统中

    生成新的swap空间

    dd if=/dev/zero of=/home/alexis/swapdev bs=1M count=128 #生成大文件

    mkswap /home/alexis/swapdev  #格式化成swap

    swapon /home/alexis/swapdev  #启动swap

    free #查看内存和Swap的使用情况

    parted: 分区工具,可以支持2TB以上的空间分区

    parted /dev/sda print

    打印所有分区状况,打印出来的比fdisk -l要好看哦~

    parted /dev/sda mkpart logical ext4 210.2G 270.2G 

    创建一个逻辑分区,格式是ext4,柱面从210.2G~270.2G,比起fdisk n和mkfs -t来说简单一点。一步到位

    parted /dev/sda rm 9

    删除 /dev/sda9 分区

    操作系统备份组合 dump/restore

    dump: 备份文件系统或目录

    dump -W #输出/etc/fstab文件里所有挂载设备的备份记录

    dump -S /dev/sda2 #预测某个设备不压缩备份需要的空间

    dump -u0 -j9 -f loop0.dump.0.bz2 /dev/loop0

    这条命令备份/dev/loop0到loop0.dump.0.bz2里

    -u 将备份记录写入到文件 /var/lib/dumpdatas, 具体的日志文件因系统而异

    -0 备份级别,0~9,0为全量备份,1~9为增量备份,1的增量备份相对与0而呀,2相对与1而言,依次类推

    -j 使用bzip2进行压缩,后面的数字 -j9 为压缩等级,从1~9,压缩率依次增加,速度依次减慢

    -f 指定要备份文件的文件名

    /dev/loop0 要备份的文件系统

    restore: 查看或恢复dump出来的备份文件

    restore -t -f loop0.dump 

    查看loop0.dump里的文件信息

    -t 查看备份文件具体信息

    -f 指定要操作的文件

    restore -C -f loop0.dump

    -C 将备份文件与当前挂载的文件系统比较

    restore -r -f loop0.dump

    将loop0.dump还原到当前目录的文件系统,如果是增量备份的还原,则需要继续执行 restore -r -f loop0.dump.1 . 2. 3 等等

    使用dd备份MBR或整个磁盘备份

    dd if=/dev/sda of=mbr.dd bs=512 count=1

    备份sda的前512Bytes,实际上就是备份了MBR和Partition Table

    dd if=/dev/sda1 of=sda1.dd.wholedisk

    备份整个sda1

    mkisofs: 做镜像

    cdrecord: 通过镜像文件刻录光盘

    cpio: 高级备份工具,参数巨多,暂时搁置

    type: 查看命令的类型信息

    type cd  -->  cd is a shell builtin

    表示 cd 是bash命令的内置命令

    type ll -->  ll is aliased to `ls -alF'

    表示ll是ls的别名

    type mysql -->  mysql is /usr/bin/mysql

    表示mysql是外部命令,并显示其来源

    umask: 显示创建文件或文件夹的时候的默认权限

    umask -->  0002

    表示创建该文件时,文件默认权限是  -rw-rw-rw- 减去 --------w- = -rw-rw-r--

    创建目录时,目录的默认权限是 -rwxrwxrwx  减去  --------w- = -rwxrwxr-x

    Linux文件特殊权限

    SUID

    让用户在执行文件时暂时获取文件所有者的权限,例如sudo。该属性只能用于二进制可执行程序,其显示如下

    -rwsr-xr-x 1 root root 69708 Jun  1 11:53 /usr/bin/sudo

    SGID: 

    1. 对二进制可执行文件而言,让用户在执行程序时暂时获取程序用户组的权限,显示如下

    -rwx--s--x 1 root root 24 Oct 14 00:05 /usr/bin/locate

    2. 对于目录而言, 用户在次目录下的有效用户组将会变为该目录的用户组

    SBIT:

    该属性仅对目录有效,用户在该目录下创建的文件和目录,仅有root和该用户才能删除

    drwxrwxrwt 12 root root 4096 Nov 20 11:11 /tmp

    设置这三个属性很简单 chmod 7755

    其中第一个7是特殊属性  , 4: SUID, 2: SGID, 1: SBIT

     route : 路由管理命令

    route add -net 192.168.0 netmask 255.255.255.0 gw 10.8.1.1

    添加路由

    -net : 表示这是一个网域

    -host : 表示这是一个具体主机

    netmask, gw: 子网掩码, 网关

    route -n

    查看路由状态, -n 不显示主机名称,直接显示ip

    route del -net 192.168.2.0

    删除路由

    alias: 设置命令别名

    alias lm='ls -l | more'

    以后执行lm命令的时候就相当与执行了 ls -l | more

    unalias: 取消别名

    unalias lm

    history: 查看历史命令

    linux bash执行的历史命令都会存放在 ~/.bash_history,每次注销bash的时候会将内存中的history内容写入文件,history命令查看的是内存中的历史命令

    history 10: 查看最后的10条历史命令

    history -w: 强制将内存中的历史写入~/.bash_history 文件

    !number: 执行第 number 条历史命令

    !command: 执行 history中以 command 开头的最近的那条历史命令

    !!: 执行上一条历史命令

    cut: 切分输出内容

    cut infile -d ':' -f 2

    -d: 切分的分割符

    -f: 要选取的切分后的列号

    cut -c 5-12

    获取每行的第5至12个字符

    tr: 删除或替换信息内容

    cat test | tr -d ':'

    删除 : 符号

    cat test | tr '[a-z]' '[A-Z]'

    将小写字母替换成大写字母

    col: 转换tab和其他特殊字符

    cat test | col -x

    将tab转换为对等的空格

    cat test | col -b

    所有反斜杠 \ 只保留反斜杠最后连接的那个字符

    join: 合并两个文件中含有相同数据的行

    join -t ':' -1 4 ~/test -2 3 ~/test2

    用分隔符 : 切分每一行的数据,若第一个文件的第四列和第二个文件的第三列相同,则合并两行,默认是比较每行的第一列,如果相同则合并

    paste: 合并两个文件的内容,以tab隔开

    paste file1 file2

    expand: 将tab替换成空格

    expand file -t 10

    将file的tab编程10个空格

    split: 文件大小切割

    split -b 300k test TMP

    将test文件按照300k每个的大小切分,切分出来的文件前缀是 TMP, 他们是 TMPaa TMPab TMPac ...

    split -l 10 test TMP

    将test文件按照每10行切分一次切分

    time: 计算命令执行时间

    time ls

    sort: 对输出进行排序

    cat ~/test | sort

    cat ~/test | sort -t ':' -k 3

    用:号切割,并按照第3列排序

    last | cut -d ' ' -f 1 | sort

    uniq: 将连续重复的数据只显示一行

    last | cut -d ' ' -f 1 | sort | uniq -c

    统计所有重复的行的条数

    tee: 双向重定向

    last | tee last.list

    将last的输出同时输出到stdout也重定向到last.list

    last | tee -a last.list

    -a: append,即追加到文件尾

    bash判断命令test 与 []

    1. test用于判断变量属性,它的结果不会输出,但是通过返回信号表示,例如运行完以后可以通过$?来查看结果,或者&& || 来控制后续命令的执行 

    alexis@Smilodon:~/scripts$ ls
    sh01.sh  sh02.sh  sh03.sh
    alexis@Smilodon:~/scripts$ test -e
    alexis@Smilodon:~/scripts$ echo $?
    0
    alexis@Smilodon:~/scripts$ test -e sh01.sh && echo "exist" || echo "not exist"
    exist
    alexis@Smilodon:~/scripts$ test -e nofile && echo "exist" || echo "not exist"
    not exist
    alexis@Smilodon:~/scripts$

    其他判断参数如下

    测试的标志 代表意义
    1. 关於某个档名的『文件类型』判断,如 test -e filename 表示存在否
    -e 该『档名』是否存在?(常用)
    -f 该『档名』是否存在且为文件(file)?(常用)
    -d 该『档名』是否存在且为目录(directory)?(常用)
    -b 该『档名』是否存在且为一个 block device 装置?
    -c 该『档名』是否存在且为一个 character device 装置?
    -S 该『档名』是否存在且为一个 Socket 文件?
    -p 该『档名』是否存在且为一个 FIFO (pipe) 文件?
    -L 该『档名』是否存在且为一个连结档?
    2. 关於文件的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外)
    -r 侦测该档名是否存在且具有『可读』的权限?
    -w 侦测该档名是否存在且具有『可写』的权限?
    -x 侦测该档名是否存在且具有『可运行』的权限?
    -u 侦测该档名是否存在且具有『SUID』的属性?
    -g 侦测该档名是否存在且具有『SGID』的属性?
    -k 侦测该档名是否存在且具有『Sticky bit』的属性?
    -s 侦测该档名是否存在且为『非空白文件』?
    3. 两个文件之间的比较,如: test file1 -nt file2
    -nt (newer than)判断 file1 是否比 file2 新
    -ot (older than)判断 file1 是否比 file2 旧
    -ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定,两个文件是否均指向同一个 inode 哩!
    4. 关於两个整数之间的判定,例如 test n1 -eq n2
    -eq 两数值相等 (equal)
    -ne 两数值不等 (not equal)
    -gt n1 大於 n2 (greater than)
    -lt n1 小於 n2 (less than)
    -ge n1 大於等於 n2 (greater than or equal)
    -le n1 小於等於 n2 (less than or equal)
    5. 判定字串的数据
    test -z string 判定字串是否为 0 ?若 string 为空字串,则为 true
    test -n string 判定字串是否非为 0 ?若 string 为空字串,则为 false。
    注: -n 亦可省略
    test str1 = str2 判定 str1 是否等於 str2 ,若相等,则回传 true
    test str1 != str2 判定 str1 是否不等於 str2 ,若相等,则回传 false
    6. 多重条件判定,例如: test -r filename -a -x filename
    -a (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
    -o (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
    ! 反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true

    2. 使用中括号 [ ] 来判断,使用[ ]需要注意的有

    1) 括号两端和判断字符两旁必须有空格,如用 _ 表示空格,则是 [_"$var1"_==_"$var2"_]

    2) 变量变量用双引号扩起来,否则会出现 "Too many arguments" 的错误

    3) 字符串用双引号或单引号扩起来

    以下是shell示例脚本

    #!/bin/bash
    # use 'test' command to dump file properties
    
    echo "Please enter a file name, and I will dump the file properties"
    read -p "Enter your file name here: " filename
    
    # 判断该变量是否是个非空字符串
    test -z $filename && echo "You MUST input a filename" && exit 0
    
    # 判断文件是否存在
    test ! -e $filename && echo "file '$filename' DOES NOT exist" && exit 0
    
    # 检查文件类型与属性
    test -f $filename && filetype="regular file"
    test -d $filename && filetype="directory"
    test -r $filename && perm="readable"
    test -w $filename && perm="$perm writable"
    test -x $filename && perm="$perm executable"
    
    # 输出文件属性
    echo "File '$filename' is a $filetype"
    echo "And the permissions are : $perm"
    #!/bin/bash
    # test []
    
    read -p "Please input (Y/N)" yn
    # 使用 -o 表示 or
    [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0
    [ "$yn" == "N" -o "$yn" == "n" ] && echo "OK, interrupt" && exit 0
    echo "I don't know what you choice is" && exit 0

    id : 显示用户的用户id和用户组id信息

    alexis@Smilodon:~/scripts$ id alexis
    uid=1000(alexis) gid=1000(alexis) groups=1000(alexis),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare)

    finger : 显示用户信息

    alexis@Smilodon:~/scripts$ finger alexis
    Login: alexis                     Name: Alexis
    Directory: /home/alexis                 Shell: /bin/bash
    On since Wed Jan 16 17:32 (CST) on tty7    1 hour 35 minutes idle
    On since Wed Jan 16 17:56 (CST) on pts/0 from :0.0
    No mail.
    No Plan.

    newgrp : 更改当前用户的有效群组(创建文件时显示的群组)

    newgrp sudo : 把当前用户有效群组改为sudo

    su : 切换用户身份

    su - : 以login-shell的方式切换到root,会重新读出login-shell配置

    su -l alexis : 以login-shell的方式切换到alexis

    sudo与sudoers文件

    要使用sudo命令必须通过sudoers文件授权,切换到root用户编辑sudoers文件,加入一下行

    alexis ALL=(ALL) ALL

    %sudo ALL=(ALL) ALL

    第一列表示授权的用户或用户组(带%的为用户组)

    第二列的ALL表示可以从任何ip的主机使用sudo

    第三列的(ALL)表示alexis可以通过sudo切换为任何用户下达命令

    第四列的ALL表示用户可以通过sudo下达所有命令

    w, who : 查看当前在线用户状况

    lastlog: 查看所有用户最后登录情况

    write : 发送信息给其他在线用户

    write alexis pst/1 : 发送消息给 pst/1 的 alexis

    mesg [y/n] : 接受或拒绝write的消息(root的消息除外)

    wall : 广播信息给所有用户

    wall "I will shutdown the system in 3 minutes"

    一次性计划任务 at 的使用

    at : 可以执行一次计划任务,并且有nohup效果,即不会因为会话结束而被中断

    at的用户管理文件是/etc/at.allow /etc/at.deny

    1. 存在at.allow,则在at.allow文件中的所有用户可以执行at任务,不存在的用户不可执行at任务

    2.存在at.deny,则在at.deny文件中的用户不可执行at人物,不存在的用户可以执行at任务

    3.如果两个文件都不存在,则只有root可执行at任务

    命令格式

    at -l 或 atq : 查看所有at任务

    atrm [jobid] : 删除第jobid号任务

    at TIME : 在TIME时间内执行任务,TIME可以是HH:MM, HH:MM yyyy-mm-dd, now +5 minutes, 04pm +3 days

    之后会进入一个shell,将你要执行的命令输入在shell中,最后ctrl+d(EOF)退出

    周期性计划任务crontab

    crontab : 可以执行周期性计划任务,此命令的计划任务是针对用户而言的

    crontab的管理文件是/etc/cron.allow, /etc/cron.deny.其管理规则与at的相同

    crontab -u username -l : 列出某用户的所有计划任务,不加-u为列出当前用户的任务

    crontab -r : 删除所有计划任务

    crontab -e : 编辑计划任务,此计划任务的文件一般是自动创建于/var/spool/cron文件夹内

    编辑计划任务的格式

    0   12  *  *  * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc

    计划任务一共6个栏位,分别表示

    代表意义 分钟 小时 日期 月份 命令
    数字范围 0-59 0-23 1-31 1-12 0-7 需要执行的命令

    需要注意的是:周栏位的0和7都代表周日,且周不能与日月同时使用,否则会有问题,下面还有一些特殊的表示方法 

    特殊字符 代表意义
    *(星号) 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思!
    ,(逗号) 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:
    0 3,6 * * * command
    时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!
    -(减号) 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:
    20 8-12 * * * command
    仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!
    /n(斜线) 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:
    */5 * * * * command
    很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

    如果是要编辑系统的计划任务,而不是针对用户的计划任务,可以使用/etc/crontab文件,编辑他

    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    # m h dom mon dow user    command
    17 *    * * *    root    cd / && run-parts --report /etc/cron.hourly
    25 6    * * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6    * * 7    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6    1 * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #

    注意这个文件和crontab命令的区别,他多了一个user栏位,这里用来标注命令的运行者,其他地方和使用crontab命令一样

    nohup : 无终止运行命令

    使用nohup运行命令可以使命令在session断开后继续运行,比如用ssh登录的时候

    nohup ./test.sh &

    这样test.sh在退出ssh登录后依然运行

    pstree : 以树状形式现实进程关系

    pstree -Aup

    A : 程序间用ascii字节连接

    u : 显示进程所属用户id

    p : 现实进程pid

    dmesg : 显示开机时内核检测的硬件信息

    fuser : 通过文件显示使用该文件的用户

    fuser -uv sh01.sh

    u : 除了显示pid,也显示pid对应的用户名

    v : 现实详细的文件相关信息, ACCESS 和 COMMAND

    ACCESS有以下几种

    • c :此程序在当前的目录下(非次目录);
    • e :可被触发为运行状态;
    • f :是一个被开启的文件;
    • r :代表顶层目录 (root directory);
    • F :该文件被开启了,不过在等待回应中;
    • m :可能为分享的动态函式库;

    COMMAND 是使用该文件的命令

    modprobe : 模块管理命令

    modprobe vfat : 加载vfat模块

    modprobe -r vfat : 删除vfat模块

    modprobe -l : 列出所有可用模块

    lsmod : 列出已加载模块

    modinfo : 查看模块详情

    modinfo vfat

    man hier : Description of the file system hierarchy

    cat /etc/issue : 查看linux的发行版本

    rsync : 将远程主机数据同步到本地

    rsync -avzP bkuser@192.168.10.1:/bk/remotebackup   /localbackup

    将远端的 remotebackup 备份到本地

    -a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
    -z 传输时压缩;
    -P 传输进度;
    -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
     
    rsync -chavzP --rsync-path="sudo rsync" source  192.168.1.1:/dst
     
    使用 sudo 用户将数据 rsync 到 dst
     
     
    apt-get update : 跟新软件列表
    apt-get upgrade : 更新现有软件
    apt-get dist-upgrade : 更新disribution
     

    sar -n DEV 1 100

    查看网络流量, 每1秒输出一次, 输出100次, 输出内容

    sar 还可以监控cpu -u, 内存 -r 具体看man

    iftop: 查看网卡流量

    iftop -i eth0 : 查看指定网卡流量, 右侧三列分别为 2s 10s 40s 平均流量, 可以点击 1, 2, 3 分别按这三列排序

    mac

    lsof -i -P: 可以用来查看端口

    -i: 只显示网络地址

    -P: 让端口号不会转化成端口名

    sudo tcpdump -X -i lo0 src host 127.0.0.1 and port 8081 

    -X: 将数据转换成ASCII

    -i: 指定网卡

    src: 指定源地址

    dest: 指定目标地址

    port: 端口

    stty: tty 设置

    stty -ixon 开启 XON 流控制, 开启这个以后 reverse search(ctrl+r) 可以使用 ctrl+r ctrl+s 来向前向后查找

    lscpu: 显示 cpu 信息

    free: 查看内存信息

    -m : 以 mb 为单位显示

  • 相关阅读:
    kuangbin专题最短路 D
    AC日记——总分 Score Inflation 洛谷 P2722
    AC日记——[USACO09OCT]Bessie的体重问题Bessie's We… 洛谷 P2639
    AC日记——[USACO07DEC]手链Charm Bracelet 洛谷 P2871
    AC日记——[JLOI2014]松鼠的新家 洛谷 P3258
    AC日记——小行星 洛谷 P2711
    AC日记——[USACO09JAN]全流Total Flow 洛谷 P2936
    AC日记——圆桌聚餐 cogs 729
    AC日记——[USACO11DEC]牧草种植Grass Planting 洛谷 P3038
    AC日记——[USACO15DEC]最大流Max Flow 洛谷 P3128
  • 原文地址:https://www.cnblogs.com/zemliu/p/2484820.html
Copyright © 2020-2023  润新知