posts - 339,  comments - 93,  trackbacks - 0

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 为单位显示

posted on 2012-05-05 16:08  ZimZz  阅读(4638)  评论(0编辑  收藏