学习Shell编程,首先要对Shell命令有足够了解。所以,从本讲开始,分类对常用的Shell命令及其常用参数进行讲解。因为本讲义并不是专门针对Shell编程或Linux系统管理,所以只讲解一些常用的知识。有兴趣的童鞋可以课后进行讨论。
1.uname
之所以将这个命令作为第一个介绍,是因为Linux系统的差异性,有些问题首先要明确操作系统谈论起来才有意义。
如果是简单的uname命令,将显示最基本的信息,只是告诉你“老子是Linux”,加上“-a"参数后,该说的就都说了。这里只需要记住-a 就行了,其他的现用现查就好。
[densintian@rachel ~]$ uname Linux [densintian@rachel ~]$ uname -a Linux rachel 3.16.6-200.fc20.x86_64 #1 SMP Wed Oct 15 13:06:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [densintian@rachel ~]$
2. uptime
系统运行时间
[densintian@rachel ~]$ uptime 23:11:18 up 1:59, 2 users, load average: 0.06, 0.03, 0.05 [densintian@rachel ~]$
3. su
进入根用户权限(最高权限),在此权限下,一切操作都要谨慎小心。
[densintian@rachel ~]$ uptime 23:11:18 up 1:59, 2 users, load average: 0.06, 0.03, 0.05 [densintian@rachel ~]$
4. exit
Shell的退出指令。当进入su下,exit将退出根用户模式。如果在一般用户下,将直接退出Shell界面,如果是远程终端访问,将直接关闭Session[root@rachel ~]# exit 登出 [densintian@rachel ~]$
5. pwd
当前的工作目录。虽然在fedora下,提示符中有当前的目录信息,但是别的Linux可不一定有。而且fedora下,也都是最后一个层级的目录信息。比如在$HOME下有一个文件夹叫bin,而根目录下,也有一个文件夹叫bin,这时候提示符是相同的。所以需要pwd命令来确定当前的工作目录到底是谁。下面就是这种情况的判断,请注意目录的跳转和提示符的变化
[densintian@rachel bin]$ pwd /bin [densintian@rachel bin]$ cd ~/bin [densintian@rachel bin]$ pwd /home/densintian/bin [densintian@rachel bin]$
6. man
这个命令的名字就是单词manual的缩写。功能就是打印命令的手册。包括常用参数等信息。因为手册的长度都比较长,在输出的过程中,回车是向下延伸一行,空格是翻页。q是随时退出。我个人的用法是经常用输出转向把手册弄到文件里面去看。[densintian@rachel ~]$ man man [densintian@rachel ~]$ man man > 1.txt [densintian@rachel ~]$ cat 1.txt
7. date
这就是一个顾名思义的命令。输出现在的系统时间。可以简单的设置一些格式。[densintian@rachel ~]$ date 2014年 11月 01日 星期六 21:46:47 CST [densintian@rachel ~]$ date +%Y/%m/%d.%H:%M:%S 2014/11/01.21:46:26 [densintian@rachel ~]$ date +%Y%m%d%H%M%S #这个参数经常用户在Shell程序中拼接日志文件的文件名 20141101214641 [densintian@rachel ~]$
8. ps
查询运行的进程。主要有三个参数ps -a 当前终端所有进程ps -e 除核心进程外的所有进程ps -f 产生一个完整的列表,作为非系统管理员的话,前两个参数用处不是很大,而-f 是经常被用到的。因为它能够看出进程间的关系。[densintian@rachel ~]$ ps PID TTY TIME CMD 1740 pts/0 00:00:00 bash 2008 pts/0 00:00:00 vim 2009 pts/0 00:00:00 ps [densintian@rachel ~]$ ps -f UID PID PPID C STIME TTY TIME CMD densint+ 1740 1718 0 21:43 pts/0 00:00:00 -bash densint+ 2008 1740 0 22:02 pts/0 00:00:00 vim densint+ 2010 1740 0 22:02 pts/0 00:00:00 ps -f [densintian@rachel ~]$
可以看到ps 和 ps -f 现实的进程是一样的,但是-f会现实进程的父进程。-bash 是我们登录Shell界面的进程,而其他的进程,都是这个进程的子进程。
9. env
Linux系统有很多环境变量,这些变量可以在Shell中直接调用。当然,不用的用户登录,env变量会不用。这个东西可以在用户的.bashrc文件中设定。env命令可以查看全部的环境变量
[densintian@rachel ~]$ env REMOTEHOST=localhost XDG_SESSION_ID=1 HOSTNAME=rachel SHELL=/bin/bash TERM=xterm HISTSIZE=1000 QTDIR=/usr/lib64/qt-3.3 TIME_STYLE=+%Y/%m/%d.%H:%M:%S QTINC=/usr/lib64/qt-3.3/include QT_GRAPHICSSYSTEM_CHECKED=1 USER=densintian ......# 省略了一些过长的变量 SHLVL=1 HOME=/home/densintian LOGNAME=densintian QTLIB=/usr/lib64/qt-3.3/lib LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/1000 DISPLAY=192.168.0.105:0.0 _=/bin/env [densintian@rachel ~]$
10. df
检查磁盘空间的占用情况。简单知道就好,初学的情况下,作为一个超省资源的操作系统,基本不太考虑占用情况。
[densintian@rachel ~]$ df 文件系统 1K-blocks 已用 可用 已用% 挂载点 /dev/mapper/fedora_rachel-root 51475068 5724844 43112400 12% / devtmpfs 4050704 0 4050704 0% /dev tmpfs 4061004 80 4060924 1% /dev/shm tmpfs 4061004 980 4060024 1% /run tmpfs 4061004 0 4061004 0% /sys/fs/cgroup tmpfs 4061004 20 4060984 1% /tmp /dev/sda2 487652 132696 325260 29% /boot /dev/sda1 204580 9748 194832 5% /boot/efi /dev/mapper/fedora_rachel-home 1141335660 2603556 1080732540 1% /home [densintian@rachel ~]$
11. init 0/6 & reboot
init 是Linux必不可少的一个引导进程。进程号永远为1。这里我们只讲解他的两个参数,0 和 60 -- 操作系统停机1 -- 操作系统重启
Linux还有一个重启命令reboot那么reboot和init 6 有什么区别呢?
'init 6' 调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统优雅关机;
'reboot'并不执行这些过程,reboot更是一个 kernel级别的命令,不对应用使用shutdown脚本。 .
我们应该在通常情况下使用 init 6.
在出问题的状况下或强制重启 时使用reboot.
12. which
which可以输出命令所在的位置[densintian@rachel ~]$ which cd /bin/cd [densintian@rachel ~]$ which ls alias ls='ls --color=auto' #这一行表示的是,这个命令会自动应用“--color=auto”这个参数。 /bin/ls #这是命令的实际位置 [densintian@rachel ~]$
[densintian@rachel ~]$ which ls alias ls='ls --color=auto' /bin/ls [densintian@rachel ~]$ which ll alias ll='ls -l --color=auto' # 通过which 命令,使用者能够发现,一些命令实际上是由另外的命令添加特别的参数实现的。 /bin/ls [densintian@rachel ~]$
13. who
who 是查看谁正在登录这台电脑。管理登录对于服务器或者在公网上的服务器来说尤其重要。
[densintian@rachel ~]$ who densintian :0 2014-11-01 22:47 (:0) #这表示的是直接在服务器上登录 densintian pts/0 2014-11-01 21:43 (localhost) #pts表示通过终端登录 [densintian@rachel ~]$