<转>Linux命令小结 --写得最全最有用的

<转>Linux命令小结 --写得最全最有用的,原链接: http://blog.sina.com.cn/s/blog_6bbe9f580100lm3h.html

命令
总括
关闭bash的历史记录

命令的排序
在命令之间放上特殊的字符(; &&)。
command1;command2
先执行command1,不管command1是否出错,接下来执行command2。
command1&&command2
只有当command1确运行完毕后,才执行command2。
命令的任务调度(后台)
当您运用任务的调度或将命令置于后台,终端就立即解放了,这样一来,终端立即就可以接受新的输入。为实现这样的目的,您只需在命令后面添加一个 &
当您要关闭终端窗口时,这一点就很重要,因为关闭终端将导致所有在其中运行的任务都将被中止。
(1)相关命令
jobs:告诉你,在这个终端窗口中,运行着那些命令和程序。
bg:将前台运行着的一个程序放到后台去。
nohup:将命令放到不挂断地运行,即使终端关掉,也继续运行,一般和&连用。输出结果默认追加到当前目录的nohup.out文件中。
(2)例
gqview &
jobs
[1]+ Running gqview &
gqview
<CTRL z>
[2]+ Stopped gqview
bg
[2]+ gqview &
nohup /root/test.php &
nohup ./table1.sh > nohup.table1.out &

命令的替换
command1 $(command2)
command1 `command2`
command2的输出作为'command1'的参数

kill $(pidof gqview)
kill ` pidof gqview `
通配符、引号和转义字符
通配符:*,?
转义字符:\   用于在输入文件名等参数时输入保留字。
$echo "$HOME $PATH"
/home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
$echo '$HOME $PATH'
$HOME $PATH
$echo \$HOME $PATH
$HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbwork/bin
输出重定向
(1)       重定向
管道符号:|
ls -l | less   其中,第一个命令提供目录内容,第二个则将其以翻页的方式显示
pwd | cat - > a.txt 将pwd的输出通过管道到cat一个参数,-代表管道过来的内容
(2)       重定向到文件
符号:> < >>
>:重定向到文件替换
<:从文件中读取内容作为输入
>>:重定向到文件追加
定义别名
alias shortcut='command'
目录、查找操作等命令
pwd
显示当前工作目录
man command
查看命令帮助
结束时,输入:q退出。
help [-s] [pattern]
显示一些命令的帮助。
Help kill
Help –s kill
history
显示在命令行界面中使用过的命令
df –k
显示当前文件系统
cd
改变当前工作目录
cd /home/user  /home/user为绝对目录
cd ..  ..代表上一级目录
cd    返回用户主目录
'~'就是您的 home 目录的简写形式。
cp sometext /home/myusername/docs 可以用简写:
cp sometext ~/docs
cd - 进入前一个的目录,路径可以查看$OLDPWD
ls
显示当前目录中的文件
ls –a  显示所有文件,包含隐含文件
ls –l  显示每个文件的所有信息
ls –F 在目录文件后加/,在可执行文件后加*,在连接文件后加@
ls *.c 显示所有的c程序
ll与ls –l的效果相同
ll -S 按文件大小排序
ll -rS按文件大小反向排序
ll --sort=size按文件大小排序 还有其他参数可以查看man
ll -r --sort=size 按文件大小反向排序
file filename
得到文件的类型
echo
选项:
-n    不换行
-e    启动像\n的转义字符
echo $PATH           显示当前用户的搜索路径
echo –n “what”
echo –e “\t\v\n\b\r”
echo –en “what\b”         输出wha
find
#find /usr –name spell –print 查找子目录/usr中的spell
#find /usr/bin –type f –atime +100 –print 查找子目录/usr/bin中最近100天没有使用过的程序
#find /usr/bin –type f –mtime -1 print 查找子目录/usr/bin中建立不到一天的新文件或者24小时内修改过的文件
#find /usr –name ‘*.ps’ –print 查找子目录/usr中所有postscript格式的文件
which
which指令会在环境变量$PATH配置的目录里查找符合条件的文档
which pwd
文件的复制、删除和移动
cp
cp [选项] 源文件或目录 目标文件或目录
a:在复制目录时使用,保留链接、文件属性,并递归复制目录
f:如果目标文件或目录已存在,就覆盖它,不做提示
i:与f相反,覆盖时,要用户“Y”确认。
p:复制文件时保留修改时间和访问权限
r:若给出的源是一个目录,那么cp 将递归复制该目录下所有的子目录和文件,不过这要求目标也是一个目录名。
$ cp a.txt b.txt /home/user1  //将a.txt、b.txt复制到/home/user1目录中
rm
rm [选项] 文件
f:在删除过程中不给提示,直接删除
i:交付式删除
r:将参数中列出的全部目录、子目录都递归删除
mv
mv [选项] 源文件或目录 目标文件或目录
f:不提示
i:交付式
mkdir
mkdir 目录名
创建新目录 –p可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录。
mkdir -p /u02/oradata/orcl
rmdir
rmdir 目录名
删除空目录
文件管理
tmpwatch
删除不必要的暂存文件,您可以设置文件超期时间,单位以小时计算。
tmpwatch [-afqv][--test][超期时间][目录...]
-a或--all  删除任何类型的文件。
-f或--force  强制删除文件或目录,其效果类似rm指令的"-f"参数。
-q或--quiet  不显示指令执行过程。
-v或--verbose  详细显示指令执行过程。
-test  仅作测试,并不真的删除文件或目录。
文本查找及处理
grep
$ ls -l | grep '^a'   通过管道过滤ls -l输出的内容,只显示以a开头的行。   
$ grep 'test' d*   显示所有以d开头的文件中包含test的行。   
$ grep 'test' aa bb cc   显示在aa,bb,cc文件中匹配test的行。   
$ grep '[a-z]\{5\}' aa   显示所有包含每个字符串至少有5个连续小写字符的字符串的行。   
$ grep 'w\(es\)t.*\1' aa   如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
wc
统计指定文件中的行数、字数、字节数顺序显示, 并将汇总统计结果显示输出。
- c 统计字节数
- l 统计行数
- w 统计字数
wc file1 file2
awk
对输入的每一行内容进行处理。
split
大文件切割
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件的前置文件名]
split -b 100m filename
tr
转义字符集
sar 5 3 | tr -s ' ' ',' //将sar53的输出中连续的空格用一个,替换
浏览文本文件命令
cat
不分屏
cat 文件名
cat 文件名一 文件名二
cat text 显示text这个文件
cat file1 file2 依顺序显示file1,file2的内容
cat file1 file2>file3 把file1,file2的内容结合起来,再“重定向(>)”到file3文件中;注意一点是file3是在重定向以前还未存在的文件,如果file3是已经存在的文件,那么它本身的内容被覆盖,而变成file1+file2的内容。
cat >file1:结果是会“空出一行空白行”,等待你输入文字,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会结束编辑,并产生file1这个文件,而file1的内容就是你刚刚输入的内容。
cat file1>>file2:这将变成将file1的文件内容“附加”到file2的文件后面,而file2的内容依然存在。
cat /dev/null >data.xxx 文件"data.xxx"现在被清空了
cat <<EOF     等待输入文本显示,直到以EOF结束
cat <<HELLO 直到HELLO结束
more
分屏,浏览文件
less
分屏,浏览文件,但比more更强大,可以向前向后翻页。
前翻:b,后翻:p,指定位置:百分比,退出:q
head
查看某文件的前几行
head 行数 文件名 //未指定行数,默认10
tail
查看文件的尾部
编辑文件
vi
vi 文件名
(1)       使用行号
:set nu
(2)       移动
①箭头、Page Up、Page Down
②h,j,k,l,ctrl+b,ctrl+f
(3)       删除文本
①删除当前字符:x
②删除当前单词:dw
③删除当前行:dd
④撤销最后一个命令(可以撤销多次):u
(4)       搜索文本
/dollar
查找下一个:n
(5)       插入方式
按ESC退出插入方式
(6)       执行shell命令
在命令前面加上:!即可。
:!ls /etc/cron.daily
(7)       vi命令表
链接文件
ln
为某一个文件在另外一个位置建立一个不同的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
有几点要注意:
(1)       ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。
(2)       ln的链接又软链接和硬链接两种,软链接就是ln –s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
(3)       目录也可以做链接
举例:
(1)       ln -s 源文件或目录 目标文件或目录(即链接文件)
ln -s /bin/less /usr/local/bin/less
源文件一定要是绝对路径,因为它会根据这个路径字符串来找原始文件。
目标是文件时则创建的链接文件就是该文件,目录时则创建的链接文件在此目录下,且与源名相同。
压缩与备份文件
tar
备份命令。为文件或目录创建档案。可以把一大堆的文件和目录全部打包成一个文件。
tar 主选项+辅选项 文件或目录
注意:主选项必须的,告诉要做什么。辅选项可选。
主选项
c-创建新的档案文件。
r-把要存档的文件追加到档案文件的末尾。
t-列出档案文件的内容,查看已备份了哪些文件。
u-更新文件。也就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到档案文件的最后。
x-从档案文件中释放文件。
辅助选项
b-为磁带机而设,其后跟数字,说明区块的大小。
f-使用档案文件或设备,这个选项通常是必选的。
k-保存已经存在的文件。例如我们把某个文件还原,在还原过程中,遇到相同的文件,不会进行覆盖。
m-在还原文件时,把所有文件的修改时间设定为现在。
M-创建多卷的档案文件,以便在几个磁盘中存放。
v-详细报告tar处理的文件信息,如无选项,tar不报告文件信息。
w-每一步都要求确认。
z-用gzip来压缩/解压文件。对档案文件进行压缩,但还原时也一定要使用该选项解压。

tar zxvf oracle8161_tar.gz     解压到当前目录下
例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar。
  $ tar cvf usr.tar /home
例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 。
  $ tar czvf usr.tar.gz /home
例3:把usr.tar.gz这个备份文件还原并解压缩。
  $ tar xzvf usr.tar.gz
例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。
  $ tar tvf usr.tar | more
要将文件备份到一个特定的设备,只需把设备名作为备份文件名。
例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都拷贝到备份文件中。
  $ tar cf /dev/fd0 /home
要恢复设备磁盘中的文件,可使用xf选项:
  $ tar xf /dev/fd0
如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。
  $ tar cMf /dev/fd0 /home
要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。
$ tar xMf /dev/fd0
gzip
压缩命令。只对一个文件进行压缩或解压。
gzip [选项] 压缩(解压缩)的文件名
各选项的含义:
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件,显示下列字段:
  压缩文件的大小
  未压缩文件的大小
  压缩比
  未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。

$ gzip *   把当前目录下的每个文件压缩成.gz文件
$ gzip -dv *    把例1中每个压缩的文件解压,并列出详细的信息
$ gzip -l *      详细显示例1中每个压缩的文件的信息,并不解压
$ gzip usr.tar   压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz
unzip
用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于解扩展名为.zip的压缩文件。
语法:unzip [选项] 压缩文件名.zip
各选项的含义分别为:
  -x 文件列表 解压缩文件,但不包括指定的file文件。
  -v 查看压缩文件目录,但不解压。
  -t 测试文件有无损坏,但不解压。
  -d 目录 把压缩文件解到指定目录下。
  -z 只显示压缩文件的注解。
  -n 不覆盖已经存在的文件。
  -o 覆盖已存在的文件且不要求用户确认。
-j 不重建文档的目录结构,把所有文件解压到同一目录下。

例1:将压缩文件text.zip在当前目录下解压缩。
  $ unzip text.zip
例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。
  $ unzip -n text.zip -d /tmp
例3:查看压缩文件目录,但不解压。
  $ unzip -v text.zip
zip
压缩
重启、关闭机器、登出
三组合键重启
reboot
重启
halt
关闭
shutdown
shutdown 命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据同步的工作。
shutdown [选项] [时间] [警告信息]
命令中各选项的含义为:
- k 并不真正关机,而只是发出警告信息给所有用户。
- r 关机后立即重新启动。
- h 关机后不重新启动。
- f 快速关机,重启动时跳过fsck。
- n 快速关机,不经过init程序。
- c 取消一个已经运行的shutdown。
需要特别说明的是,该命令只能由超级用户使用。
shutdown –h now
shutdown –r +10
logout
登出
用户管理
id
id 当前用户信息
id oracle 判断是否有oracle用户并输出用户信息
增加一个新用户
(1)       root才能够创建新用户
(2)       没有密码的用户是不能登录系统的
(3)       默认情况下,在/home下新建一个与用户名相同的用户主目录。如果需要另外指定用户主目录,使用#useradd –d /home/xf user1
(4)       用户登录时,将获得一个shell程序:/bin/bash。如果不想让用户登录,可以指定用户的shell程序为:/bin/false,这样用户即使登录,也不能执行linux下的命令。
#useradd –s /bin/false user1
(5)       新增一个用户的同时创建一个组,这个组与该用户同名,而这个用户就是该组的成员。如果让新增用户属于一个已存在的组,使用#useradd –g user user1。如果让用户再属于一个组(一个用户可以属于多个组,一个主组),使用#useradd –G user user1
(6)       举例:
#useradd user1 //新建一个user1用户
#useradd -g oinstall -G dba,oper oracle //创建oracle用户 主组oinstall 副组dba oper
删除一个用户
userdel 用户名
userdel –r 用户名 //将留在系统上的文件也删掉
设置密码
passwd
passwd user1 //设置用户user1的密码,只有root才可以,系统给出提示让用户输入密码
passwd user1 -l //临时关闭用户 即在/etc/shadow中加密密码前加个*号
passwd user1 -u //释放用户
修改用户属性
(1)       usermod –g 组名 –G 组名 –d 用户主目录 –s 用户shell
(2)       直接的方法:修改/etc/passwd文件,每个用户占一行,内容为:
用户名:密码:用户ID:组ID:用户全名:用户主目录:用户shell
增加一个组
groupadd 组名
删除一个组
groupdel 组名
修改组成员
(1)       编辑/etc/group文件,将用户名写在组名的后面。
(2)       举例:
softdevelop:x:506:user1,user2,newuser //softdevelop的组成员有user1,user2,newuser
图形化用户管理工具
userconf
su
临时切换用户的身份
-l登录并改变到所切换的用户环境
-c command 执行一条command后退出
su -l oracle
权限管理
chmod
(1)       文字设定法
chmod [who] [opt] [mode] 文件/目录名
who(对象):ugoa的一个或组合
opt(操作):+-=
mode(权限):rwx的一个或组合
例:chmod g+rw a.txt
(2)       数字设定法
chmod [mode] 文件/目录名
相应位用10表示
例:chmod 664 a.txt  //即110110100 -> rw-rw-r--
chown
改变文件的属主
chown [选项] 用户名 文件/目录名
chown -R oracle:oinstall /u01 对u01下所有子目录进行变更 oracle用户 oinstall所属组
chgrp
改变文件的属组
chgrp 组名 文件/目录名
umask
设置文件或目录的默认权限的“补码”。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
记住umask是从权限中“拿走”相应的位。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。
如:umask值为022,则默认目录权限为755,默认文件权限为644。
umask 022
内核管理
sysctl
查看内核参数
sysctl –a | grep sem 查找sem内核参数的行值
sysctl –p 修改内核参数文件/etc/sysctl.conf后生效
lsmod
list module显示已载入系统的模块
insmod
install module载入模块
进程管理
top
相当于任务管理器
可以看到有几个cpu
ps
查看进程
-e 显示所有进程。
-f 全格式。
ps –ef | grep css
pidof
查找程序的进程号
pidof gqview
pgrep
通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。
pgrep httpd
pgrep –l httpd 列出程序名和进程ID
pgrep –lo httpd 列出起始进程
pgrep –ln httpd 列出终止进程
终止进程
(1)       后台进程:kill 进程号 kill -9 强行杀掉
(2)       前台进程:ctrl+c终止
who
who - [husfV] [user]
说明:显示系统中有那些使用者正在上面,显示的资料包含了使用者 ID,使用的终端机,从那边连上来的,上线时间,呆滞时间,CPU 使用量,动作等等。
选项:
-h : 不要显示标题列
-u : 不要显示使用者的动作/工作
-s : 使用简短的格式来显示
-f : 不要显示使用者的上线位置
-V : 显示程式版本
whoami
网络配置
ifconfig
(1)       相当于windows的ipconfig
(2)       在/sbin目录下,可以查看当前的网络配置
(3)       可以指定IP地址、硬件端口、网络掩码、激活和冻结网卡。
(4)       为网络指定新的IP
# ifconfig eth1 10.122.238.3
(5)       激活和冻结网卡
# ifconfig eth0 down
# ifconfig eth0 up
(6)       指定IRQ端口和I/O地址
# ifconfig eth1 irq 9
# ifconfig eth1 io_addr 0x300
(7)       指定网络掩码
# ifconfig eth1 netmask 255.255.255.0
netstat
检查网络状况
route
命令是在本地 IP 路由表中显示和修改条目网络命令。
service network restart
重启网络服务,当网络的配置改变以后,可能要重启。
arp
(1)       地址解析协议(ARP)将IP地址与网卡上的硬件地址相关联。计算机连接网络上的另一台计算机之后,要交换硬件地址,然后存放在ARP数据库中。因此可以用arp命令在自己的计算机中找到这个arp数据库。
主机名命令

(1)       设置主机名
hostname archangel
控制台启动图形化命令
redhat-config-network或system-config-network
网络设置
internet-druid
internet设置向导
redhat-config-network-druid
redhat-config-date
设置日期和时间
redhat-config-time
设置日期和时间
配置版本命令
chkconfig
检查,设置系统的各种服务
chkconfig –list
httpd           0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:启用  6:关闭
linux下的6种状态,说明HTTPD这个服务在0.1.2.3.4.6下是关闭的,在5下是开启的,0代表的是关机状态,6代表的是重启状态,1代表的是单用户模式,2是没有网络功能的多用户模式,3是有网络功能的多用户模式,4还没有定义,5是桌面模式。

设置服务的启动或关闭
chkconfig –level 2345 sendmail off
rpm
rpm –q bind 检查rpm包是否已安装
rpm –qi bind 列出包中的内容信息
rpm –ql bind 列出包的所有文件
rpm –qa bind* 列出所有bind开头的包
rpm –ivh bind.rpm  i安装 v给出更多的信息 h显示信息mark
rpm –e 卸载软件包
uname
显示系统信息
uname –a        显示所有的系统信息,例如操作系统名称、内核版本等
环境变量
export
设置或显示环境变量
export –p 列出所有变量
export PATH=$PATH:/usr/sbin
env
显示所有的环境变量
set
显示所有本地定义的shell变量
unset
清除环境变量
readonly
环境变量设置为只读,不可修改和清除。
常见的环境变量
HISTSIZE是指保存历史命令记录的条数。
LOGNAME是指当前用户的登录名。
HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
SHELL是指当前用户用的是哪种Shell。
LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
MAIL是指当前用户的邮件存放目录。
PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。
磁盘管理命令
fdisk
(1)       DISK:形如/dev/hda或/dev/sda
PARTITION:形如/dev/hda1
(2)       列出分区表
fdisk –l
(3)       显示fdisk版本
fdisk –v
(4)       改变分区
fdisk DISK
(5)       改变分区命令
partprobe
创建分区并且在不重新启动机器的情况下系统能够识别这些分区
mkfs
格式化命令
(1)       格式化为指定的文件系统
mkfs –t ext3 /dev/hda1
mkfs –t ext2 /dev/hda2
mkfs –t vfat /dev/hda1
mkfs –t reiserfs /dev/hda1
(2)       检查坏块
mkfs –c /dev/hda1
(3)       另一种生成ext3文件系统方法:-j生成杂志
mkfs –j /dev/sda1
mkswap
交换分区格式化
tune2fs
将格式化为ext2文件系统转换成ext3。
tune2fs –j /dev/hda1
du
列出当前目录(默认)及其下面的每个子目录或文件(默认不列出)所用空间量。默认是kb数。
du –h  容易理解的方式列出
du –k  以kb为单位列出
du –b  以byte为单位列出
du –a  不仅列出目录,还要列出文件。
du –h ./wallpaper  列出当前目录下wallpaper目录的空间使用量
du –s 只列出汇总数
df
显示文件系统(默认所有已装载的文件系统)的使用情况,以及挂载点,包括任何其他文件系统,如当前装载的软盘和光碟。
df –a  包括大小为0个块的文件系统。
df –h  容易理解的方式显示
df –m  以mb数表示
df –k  以kb数表示
df /root 显示/root所在的文件系统的使用情况。
bdf
查看空间使用
mount
读取或写入Linux分区之前,首先要装载到目录中。
mount partition directory  partition是要装载的设备,directory为装载点。
mount /dev/sdb1 /home/mj
umount
卸载目录。多数计算机,Linux会锁定光碟驱动器,直到执行卸载命令。
umount /mnt/cdrom
硬件信息
内存信息
cat /proc/meminfo
free
开机信息
dmesg
即保存在/var/log目录
用户之间通信
wall
对全部已登录的用户发送信息
wall < 文件名       用户可以先把要发送的信息写好存入一个文件中
wall ‘Thank you!’
write
向系统中某一个用户发送信息
write 用户帐号 [终端名称]
$ write xxq
$ write xxq pts/2
此时系统进入发送信息状态,用户可以输入要发送的信息,输入完毕,希望退出发送状态时,按组合键即可。
mesg
是否允许其他用户用write命令给自己发送信息。对于超级用户,系统的默认值为 n;而对于一般用户系统的默认值为y。
# mesg y
# mesg n
# mesg    如果mesg后不带任何参数,则显示当前的状态是y还是n
talk
talk person [ttyname]
说明:与其他使用者对谈
person : 预备对谈的使用者帐号,如果该使用者在其他机器上,则可输入 [email protected]
ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息。
例子.1 :
与现在机器上的使用者Rollaend对谈,此时 Rollaend 只有一个连线 :
talk Rollaend
接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk jzlee`即可开始对谈,结束请按 ctrl+c。
例子.2 :
与linuxfab.cx上的使用者Rollaend对谈,使用pts/2来对谈 :
talk [email protected] pts/2
接下来就是等Rollaend回应,若Rollaend接受,则Rollaend输入 `talk [email protected]`即可开始对谈,结束请按 ctrl+c
注意 : 若萤幕的字会出现不正常的字元,试着按 ctrl+l 更新萤幕画面。
日期与时间
cal
cal [-mjy] [month [year]]
显示日历。若只有一个参数,则代表年份(1-9999),显示该年的年历。年份必须全部写出:``cal 89\ 将不会是显示 1989 年的年历。使用两个参数,则表示月份及年份。若没有参数则显示这个月的月历。
1752 年 9 月第 3 日起改用西洋新历,因这时大部份的国家都采用新历,有 10 天被去除,所以该月份的月历有些不同。在此之前为西洋旧历。
-m : 以星期一为每周的第一天方式显示。
-j : 以凯撒历显示,即以一月一日起的天数显示。
-y : 显示今年年历。
举例:
cal : 显示本月的月历。
cal 2001 : 显示公元 2001 年年历。
cal 5 2001 : 显示公元 2001 年 5 月月历。
cal -m : 以星期一为每周的第一天方式,显示本月的月历。
cal -jy : 以一月一日起的天数显示今年的年历。
date
显示和修改日期和时间
hwclock
硬件时钟设置、同步、显示等。
hwclock --show
hwclock --hctosys
hwclock --systohc
sleep
sleep [--help] [--version] number[smhd]
说明 : sleep 可以用来将目前动作延迟一段时间
参数说明 :
--help : 显示辅助讯息
--version : 显示版本编号
number : 时间长度,后面可接 s、m、h 或 d
其中 s 为秒,m 为 分钟,h 为小时,d 为日数
例子 :
显示目前时间后延迟 1 分钟,之后再次显示时间 :
date;sleep 1m;date
ntpdate
定时任务
crontab
crontab [ -u user ] filecrontab
crontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数 :
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推。
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每n小时个时间间隔执行一次,其余类推。
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推。

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
例子 :
每月每天每小时的第 0 分钟执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 [email protected] :
0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意:当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。
杂项
watch
一定的间隔执行一条命令。
watch date #默认2秒
type
查看命令的类型
type pwd
type ssh-copy-id
shell编程
内建命令
true         #什么事都不做,就是shell返回0
! true      #反转true,返回1
变量的类型
不区分类型
本质上都是字符串,允许算术操作和比较操作,决定的因素是,变量中的值是否只有数字。
若变量的值非只有数字(如:abc,BB45)或空时,进行算术运算,当作0来处理。
例:a=abc;let “a=a+1”  #a的值为1 =前后不要有空格
参数和特殊变量
参数分别用$1,$2,……$9,${10},${11}……表示。
$0表示运行脚本的名称,如./script.sh,可以通过basename $0命令只获取script.sh部分。
$*表示所有参数。
$#表示参数的个数。
$?最近执行的命令的返回值。一般0正确,非0错误。
间接引用
!      取得所引用变量的值。
例:
1 args=$#              #位置参数的个数
2 lastarg=${!args}
引号
“      部分引用,阻止除$`\之外的特殊字符的重新解释
‘      完全引用
两种在echo显示’的方法

转义
在特殊字符的前面加\告诉shell这个字符失去了特殊的含义。
但有些反效果(在echo的命令中,需使用 -e选项 或者 $’\X’ 结构):
\n    新的一行
\r     回车
\t     tab键
\v    垂直tab键
\b    backspace
\a     “alert”(如beep或flash)
\0xx        转换成8进制ASCII码字符,等价于oxx
\xxx        转化成xx16进行ASCII码字符
例:
echo –e “\n”
echo $’\n’
echo $’\t \042 \t \x22’
shift
移动参数指令。即向左移动,$2->$1, $3->$2. 在移位之前的第一个位置参数$1在移位后将不在存在,且$#减1。
let
算术运算,可以用来赋值变量。=前后不要有空格
例子:
let a=1+2        #变量a被赋值为3
a=1+2            #变量a被赋值为1+2文本
read
等待从前台输入值到变量中。read将不作变量替换,但会删除多余的空格,直到遇到第一个换行符(回车),并将输入值依次赋值给相应的变量。
read a      #等待键入变量a的值
$ read var1 var2 var3
Hello   my  friends
$ echo $var1 $var2 $var3
Hello my friends
$ echo $var1
Hello
$ read var1 var2 var3
Hello my dear friends
$ echo $var3
dear friends   <-输入多余变量时,输入值余下的内容赋给最后一个变量
$ read var1 var2 var3
Hello friends
$ echo $var3
                <- var3为空
$
b=${a/23/BB}
将变量a中的23替换成BB。
例:
a=2334
b=${a/23/BB} # 将23 替换成BB
echo "b = $b" # b = BB35
test
测试表达式
$ str1=”abcd  ”
$ test $str1=abcd
$ echo $?        #1
测试
测试字符串
str1 = str2              #二者相长,相同
str1 != str2            #不同
-n    string             #不为空(长度不为0)
-z    string             #为空
string                    #不为空
注意:符号的两边最好加空格。比较的字符串用”引起。
测试整数
int1 –eq int2          #相等
int1 –ne int2          #不等
int1 –gt int2           #大于
int1 –ge int2          #大于等于
int1 –lt int2           #小于
int1 –le int2           #小于等于
测试文件
-r filename            #用户对文件filename有读权限
-w filename           #用户对文件filename有写权限
-x filename            #用户对文件filename有执行权限
-f filename            #文件filename为普通文件
-d filename            #文件filename为目录
-c filename            #文件filename为字符设备文件
-b filename           #文件filename为块设备文件
-s filename            #文件filename大小不为零
-t filename            #与文件描述符fnumb(默认值1)相关的设备是一个终端设备
测试之逻辑运算
-a           #AND
-o           #OR
例如:
$ test –r empty –a –s empty
$ echo $?
1
测试条件之否定
$ cat /dev/null > empty
$ test -r empty
$ echo $?
0
$ test -s empty
1
$ test ! -s empty
$ echo $?
0
测试符号[]
test命令相当于[]符号。注意在[]两边请加空格。
$ int1=4
$ [ $int1 -gt 2 ]
$ echo $?
0
结构
if结构
if command
then
        command
elif    command
then
        command
elif    command
then
        command
else
fi

if command; then
fi
case结构
case value in
    pattern1)
       command
       command;;
    pattern2)
       command
       command;;
    ...
    patternn)
       command;
esac
*可以用来表示默认匹配动作,pattern1 | pattern2 )可以用来使用逻辑操作。
while循环结构
while   command
do
        command
        command
        command
        ...
done
until循环结构
until command
do
        command
        command
        ....
        command
done
for循环结构
for var in arg1 arg2 ... argn
do
        command
        ....
        command
done

对当前目录下的所有文件操作:
$ for i in *
  do
        if [ -f $i ]
        then
                echo "$i is a file"
        elif    [ -d $i ]
                echo "$i is a directory"
        fi
  done

求命令行上所有整数之和:
#!/bin/sh

sum=0

for INT in $*
do
        sum=`expr $sum + $INT`
done

echo $sum
退出循环
break
continue

猜你喜欢

转载自yingbin920.iteye.com/blog/2094566