常用命令参考

用到一个记录一个,不求系统。要查看 Linux 中有哪些命令,可以输入头一个或者头几个字母,然后按两次 Tab 键,浏览以这个字头的命令。在 Ubuntu 上获得命令的简单帮助信息,可以用“命令名称 --help"的方式获取,获取详细帮助,则可通过 man. 命令执行后,如果成功,一般是不会返回任何提示信息的,这点比较符合"No news is good news."的说法。

命令详解

cal

cal 命令显示日历,但默认以星期天作为每月的开头,怎样调整成星期一作为开头? 答:cal -m 1

chkconfig

配置开启启动程序的命令,有 on/off 两个选项,需要管理员权限执行。

sudo chkconfig tomcat6 off #开机不启动 tomcat
sudo chkconfig tomcat6 on #开机启动 tomcat

在 Ubuntu 中,chkconfig 默认是不安装的,需要执行命令"sudo apt-get install chkconfig"手动安装。

chmod

u: 本用户, g: 本组, o: 其他人(其他组的人?), a: 所有用户

x 可执行, w 可写, r 可读.

示例:

  • chmod u+x helloworld # 对本用户,给文件 helloworld 加上可执行属性
  • chmod a+wr helloworld # 对所有用户,给文件 helloworld 加上可读可写属性
  • chmod a-x * # 对所有用户,对当前目录的所有文件,去掉可执行属性

数字用法:

chmod (u)(g)(o) filename

前面例子中的三条命令, 适合对现有文件增删属性. 如果直接使用数字方式, 则需要明确 u, g, o 三位的数值.

括号位为数字位. 数字含义: 1: x 可执行, 2: w 可写, 4: r 可读.

准确一点的说法应该是,1表示可执行但不可读。

这里的数字定义其实是这样来的:

  • x = 001
  • w = 010
  • r = 100

例如:

  • chmod 764 helloworld # 764 对应 ugo, 即: u 的权限为7(1+2+4=xwr), g 的权限为6(2+4=wr), 等等

上面这个命令相当于

  • chmod 764 helloworld # 764 对应 ugo, 即: u 的权限为7(1+2+4=xwr), g 的权限为6(2+4=wr), 等等

参素 -R 表示对当前目录以及目录下所有文件(包含目录)都有效。

chgrg

改变文件所属的组

  • chgrg pei ccav #将文件 ccav 所属的组属性改为 pei

chown

改变文件的拥有者和所属组(Change the owner and/or group of each FILE to OWNER and/or GROUP.)

  • chown hellouser ccav #将文件 ccav 的拥有者改为 hellouser
  • chown hellouser:pei ccav #将文件 ccav 的拥有者改为 hellouser, 并将所属的组属性改为 pei

chsh

切换 shell

chsh -s /bin/csh 切换到 csh,不过 Ubuntu 默认安装的两个 shell 里没有它。

附:如果要查看当前系统支持的 shell,可以通过 ls -l /bin/*sh 达到。

crontab

这个命令很棒,用于设定系统定时或周期性任务。

crontab -e 编辑任务,在某些 Linux 发行版中,编辑保存后不会立刻生效,此时可以执行 /etc/init.d/crond restart 确认生效。

crontab -r 删除所有任务,慎用

crontab -l 浏览现有的任务

crontab 文件名,在外部编辑好任务文件后,由 crontab 载入进去,注意,这种载入会覆盖原先的内容的,慎用

如果执行的命令比较简单,可以直接编辑 /etc/crontab 的内容(实践表明,并不妥当,某用户要添加任务时,应该登录到某用户的 shell 里,然后执行 crontab -e 进行添加),加上一两行即可。但如果执行的任务比较复杂,应单独写 shell 脚本,然后在定时任务里设置执行脚本即可,这样做的好处是,以后直接维护脚本即可,不用修改 crontab 的内容。

例子:给 mysql 做自动备份。

1. 创建 shell 脚本文件 /home/iridium/temp/dbbak.sh,内容如下:

# mysql 数据备份,这里需要注意的是 date +%Y... 加号和后面的字串不能有空格。
/usr/bin/mysqldump -u root -phelloworld dbNameHere | gzip -c > /home/iridium/temp/$(date +%Y%m%d%H%M%S)-dbNameHere.sql.gz 

2. 执行 crontab -e,添加如下内容:

# 每5分钟执行一次数据库备份脚本
*/5 * * * *  /home/iridium/temp/dbbak.sh

重要说明,crontab 中的时间,很有趣,是这样的:依次为“分 时 日 月 星期”,具体数值范围规定等,参下段的推荐文章。

这里推荐一篇好文《第十六章、例行性工作排程 (crontab)(鳥哥的 Linux 私房菜)》,写得非常好!

date

下面是一个设置日期和时间的例子:

# date -s 04/23/2014
Wed Apr 23 00:00:00 CST 2014
# date -s 16:04:45
Wed Apr 23 16:04:45 CST 2014

如果要查看当前时间,直接使用 date 指令,不带任何参数即可。

df

df -l 查看分区的详细信息。

df /home/iridium 查看目录 /home/iridium 在哪个分区上,查看其他目录类似。

du

统计目录中所有文件占用的空间:

du -sh uploadfiles

参考:http://www.yayu.org/look.php?id=162

env

查看当前用户的环境变量,内容较多,实际使用可以使用管道符和 more 连接,也可以使用管道符和 grep 过滤一下。

file

查看文件信息,如:

$ file pis.war
pis.war: Zip archive data, at least v2.0 to extract

find

Linux 查找某文件的命令是什么? find / -name "XXX"

这个例子是从 / 查起,可换成需要的目录。

free

查看内存使用情况,如:

$ free -lh
free, 内存使用情况

gzip

压缩,压缩完成之后,会删除 fileName,但可以看到新文件 fileName.gz

gzip fileName

注:这个命令只能针对某个文件,不能针对目录。

解压 gz 文件

gzip -d fileName.gz

注:可以通过 gzip -h 查看该命令的帮助信息。更多关于 Linux 下加解压的操作参《压缩或解压文件或文件夹》

head

查看文本的前几行,如

head hello.sh -n 1

显示 hello.sh 这个文本的头一行。

同系列的命令有查看全部文本内容的 cat 和查看最后几行文本的 tail.

history

history | more 查看最近用到的所有命令

history 5 查看最近的5个命令

!9904 执行编号为9904的命令

!ls 执行最后一个以 ls 打头的命令 ( TODO )

ifconfig

这个命令,和 Windows 中的 ipconfig 基本上等同。

ifconfig 查看本机网络信息

ifconfig eth0 192.168.12.34 修改 eth0 的 IP 地址为192.168.12.34

ls

查看文件列表的命令,应该是单词 list 的缩写。常用参数如下:

  • -a 显示隐藏的文件
  • -l 显示文件的详细信息,如大小,创建时间等,如果是符号连接,还会显示这个连接的源。(详解

如果执行 ls 命令得到的内容中文件名称没有颜色,可以在当前用户的家目录下加一条:alias ls="ls --color=always",参这里

较为复杂的例子:统计目录下文件数量:

ls -R uploadfiles | wc -l
ls -R /hello/uploadfiles | wc -l

mkdir

这个命令没什么好说的,就是 make directory 的意思,只是有个参数要留意下:

  • 创建同级的多个目录,mkdir dir0 dir1 dir2 dir3 可以在当前目录下一并创建 dir0, dir1, dir2, dir3 四个目录。
  • -p 按路径创建目录,比如 mkdir a/b/c/d/e -p,如果 a 到 e 其中任意目录不存在,命令执行时都会被创建,如果原先已经存在,则保持。

modprobe

TODO: modprobe 命令是干嘛的,装虚拟机的时候用过。

more

在 Linux 命令行下, 如果一屏显示的内容的太多, 需要分屏, 可以使用 more 命令, 比如

vi --help | more

表示分屏查看 vi 的 help 内容

passwd

修改密码,一般用户只能修改自己的密码,不带参数时,默认修改当前用户密码。root 用户可用 password {username} 的方式修改其他用户的密码。如:

pkill

踢人。需要 sudo. 先用 who 命令查到 tty 然后再踢人,如:

pkill -kill -t pts/1

ps

查看进程,有两个比较有用的参数

-e all processes
-f full

例:查看 jboss 启的所有进程 ps -ef | grep jboss

rm

remove file, 删除文件

rm -rf aaa 删除 aaa,如果 aaa 是目录,则将 aaa 中的一切目录和文件删除。r 表示递归的意思,f 表示强制的意思。

在 Linux 中,有一个最危险的操作,是 rm /,表示删除一切文件,可用虚拟机做这个实验,我在虚拟的 Ubuntu 上执行了 sudo rm -rf /,出现警告,按警告的提示进一步确认执行操作,结果是破坏性的,文件系统被清空,重启已经没有系统了。

rmdir

删除目录 rmdir hello 删除 hello 目录

如果目录中有其他文件,则目录不能删除

rmdir hello/world -p

以上代码删除二级目录,如果 hello 目录下只有一个可删除的 world 目录,则最后 hello 目录也将被删除。

shutdown

定时关机命令:sudo shutdown -h +120

scp

通过 SSH 连接传送文件。

1. 下载文件。将远程服务器的资料传送到本地

scp -P10022 hello@211.*.*.*:/home/hello/mysql_data_bak/hello_data/201109070000-hello.sql.gz ~/201109070000-hello.sql.gz

2. 下载目录。

scp -r -P22 root@192.168.8.*:/root/shell_scripts ~/helloworld/

3. 上传文件。将本地的资料传送到远程服务器

scp hot*.jsp  hello@211.136.163.178:/home/hello/

4. 上传目录

scp -r -P22 jdom root@192.168.8.217:/root/jdom/

这里需要特别注意的是机器名(或 IP)之后的冒号!

参考:采用scp命令远程传输数据 - (dzassn的专栏 - 博客频道 - CSDN.NET)

ssh

SSH 连接命令,举例如下:

  • ssh iridium@172.168.1.104 -p 22 # 以用户名 iridium 登录 172.168.1.104,端口号 22

参数 -X 表示支持 X11 转发,能运行图形界面程序。

su

切换用户命令,用法:

  • su {username}

如果 username 为空,则切换到超级用户

tail

在终端里查看文件最后的10行,带参数 -f 可以同步查看文件,对看日志文件比较有用,例如:

tail -f {logfile}
同系列的命令有查看全部文本内容的 cat 和查看前几行文本的 head.

touch

创建一个新文件,或者更新访问时间和修改时间。

touch hello #创建一个空文件 hello
touch -m hello #将 hello 的修改时间更新为当前时间。

关于详细的用法,执行 touch --help 即可:

Update the access and modification times of each FILE to the current time.

A FILE argument that does not exist is created empty, unless -c or -h is supplied.

A FILE argument string of - is handled specially and causes touch to change the times of the file associated with standard output.

uptime

'uptime' to get how long the current user uses system, e.g.:

$ uptime
  10:34:56 up 18 days, 40 min,  1 user, load average: 0.20, 0.05, 0.02

wget

下载整个网站:wget

例如:$ wget -r -p -np -k http://www.fed.cuhk.edu.hk/readwrite/typing/content.htm(下载仓颉输入法教程)

参考:http://www.linuxfans.org/bbs/thread-39403-1-1.html 的第4楼

who

查看当前用户,如:

iridium@iridium-laptop:~$ who
iridium  tty7         2010-07-11 06:16 (:0)
iridium  pts/0        2010-07-11 06:17 (:0.0)
iridium  pts/2        2010-07-11 09:53 (:0.0)
iridium  pts/1        2010-07-11 20:44 (aca80165.ipt.aol.com)
lyremi   pts/3        2010-07-11 20:52 (aca80165.ipt.aol.com)

组合使用

ISO 镜像

制作 ISO 文件:cp -r /home/user name.iso,我这里不能用这个命令, 用这个才行:mkisofs -r -o myiso.iso /dev/cdrom

挂载 ISO 文件的命令例子

$ sudo mkdir /media/ISO
$ sudo mount -o loop ~/ubuntu.iso /media/ISO

本机用到的

sudo mount -o loop /media/data/library/language/english/EIPS.ISO /home/iridium/english/eips/

有时还可能用到 -t iso9660 参数和参数值,例如:

mount /mnt/arch-0.5-base.iso /src -o loop -t iso9660

卸载

$ sudo umount /media/ISO

查看本机信息

查看本操作系统的简单信息:

(这个也可以通过[系统]-[系统管理]-[系统监视器]-[系统]查看到)

iridium@iridium-laptop:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 9.04
Release:    9.04
Codename:    jaunty
iridium@iridium-laptop:~$ cat /etc/issue
Ubuntu 9.04 \n \l

这里还有很多常用的命令:http://wiki.ubuntu.org.cn/UbuntuSkills