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 来向前向后查找
版权属于:Jolly
本文链接:https://totoro.site/index.php/archives/17/
关于转载:原创文章,禁止转载