Linux常用命令简记

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 十六进制

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

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

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

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:

对二进制可执行文件而言,让用户在执行程序时暂时获取程序用户组的权限,显示如下
-rwx--s--x 1 root root 24 Oct 14 00:05 /usr/bin/locate

对于目录而言, 用户在次目录下的有效用户组将会变为该目录的用户组
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 与 []

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$ 复制代码

其他判断参数如下

测试的标志 代表意义

关於某个档名的『文件类型』判断,如 test -e filename 表示存在否 -e 该『档名』是否存在?(常用) -f 该『档名』是否存在且为文件(file)?(常用) -d 该『档名』是否存在且为目录(directory)?(常用) -b 该『档名』是否存在且为一个 block device 装置? -c 该『档名』是否存在且为一个 character device 装置? -S 该『档名』是否存在且为一个 Socket 文件? -p 该『档名』是否存在且为一个 FIFO (pipe) 文件? -L 该『档名』是否存在且为一个连结档?
关於文件的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外) -r 侦测该档名是否存在且具有『可读』的权限? -w 侦测该档名是否存在且具有『可写』的权限? -x 侦测该档名是否存在且具有『可运行』的权限? -u 侦测该档名是否存在且具有『SUID』的属性? -g 侦测该档名是否存在且具有『SGID』的属性? -k 侦测该档名是否存在且具有『Sticky bit』的属性? -s 侦测该档名是否存在且为『非空白文件』?
两个文件之间的比较,如: test file1 -nt file2 -nt (newer than)判断 file1 是否比 file2 新 -ot (older than)判断 file1 是否比 file2 旧 -ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定,两个文件是否均指向同一个 inode 哩!
关於两个整数之间的判定,例如 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)
判定字串的数据 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
多重条件判定,例如: 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
使用中括号 [ ] 来判断,使用[ ]需要注意的有
括号两端和判断字符两旁必须有空格,如用 _ 表示空格,则是 ["$var1"=="$var2"]

变量变量用双引号扩起来,否则会出现 "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

存在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

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 来向前向后查找

Last modification:November 25th, 2019 at 05:14 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment