https://linoxide.com/linux-command/essential-linux-basic-commands/
系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
#top
运行top后,按1可以看见每个CPU上的繁忙情况以及IOWAIT。
可是,我希望看到,到底哪个进程在哪个CPU上执行,到底是哪个进程导致IOWAIT很高。
认真看man top,终于找到方法:
执行top后,按f,按j,然后按空格退出,这样就出现一列#C,可以看见当前进程正在哪个CPU上执行了。
按W(大写的W),将top的配置写入配置文件,下次打开top的时候就能看见同样的配置了。
用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
程序
# rpm -qa # 查看所有安装的软件包
1. find 命令
1.1 `find -regex` 与 `find -name` 的区别
若一个目录中,有如下目录:
susu@ubuntu:~/find_test$ ls
aaa aaa 22 1
susu@ubuntu:~/find_test$
可以使用 -name
进行名字匹配查询:
susu@ubuntu:~/find_test$ find . -name "a*"
./aaa
./aa
susu@ubuntu:~/find_test$
若同样的方式,使用 -regex
查询,则不能得到想要的结果:
susu@ubuntu:~/find_test$ find . -regex "a*"
susu@ubuntu:~/find_test$
出现以上结果的原因在于 -name
只要求匹配当前目录中的文件(夹)名称,而 -regex
则是把 find
输出的完整结果作为匹配对象,所以上面的命令中,默认是以 a 作为开头的字符串匹配,是不符合 -regex
规则,所以没能匹配到想要的结果。
正确用法如下:
susu@ubuntu:~/find_test$ find . -regex ".*a+"
./aaa
./aa
susu@ubuntu:~/find_test$
注意:
根据正则表达式的语法,应该加上
.*
而不是*
,具体正则表达式语法,参见链接http://www.runoob.com/regexp/regexp-syntax.html。命令选项之后的参数,可用双引号包裹起来,也可以不用。
在
-name
语法中,可以使用星号*
,在知道部分文件名的情况下使用。但是正则表达式语法中的其他特殊字符是没有效果的,而且两种方式下的星号含义也不同。比如如下的操作,是找不到文件夹 “cccccc” 的。
susu@ubuntu:~/find_test$ ls
1 aa cccccc mycprogram.c Program.c
2 aaa mybashprogram.sh MyCProgram.c
susu@ubuntu:~/find_test$ find . -name "c*"
./cccccc
susu@ubuntu:~/find_test$ find . -name "c.*"
susu@ubuntu:~/find_test$
eg:
eclipse 工程文件夹下有 4 个 project:
susu@ubuntu:~/workspace$ ls
RemoteSystemsTempFiles test_new_web_maven
testJust test_quickstart_maven
susu@ubuntu:~/workspace$ cd ..
susu@ubuntu:~$
退回到上一层之后,用 -regex
查找 workspace 文件夹下的内容,使用如下语句:
susu@ubuntu:~$ find ./workspace/ -regex ".*test_new.*"
./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven
./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/org.eclipse.jdt.core
./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/org.eclipse.jdt.core/state.dat
./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/.markers
./workspace/test_new_web_maven
./workspace/test_new_web_maven/src
./workspace/test_new_web_maven/src/main
./workspace/test_new_web_maven/src/main/webapp
./workspace/test_new_web_maven/src/main/webapp/index.jsp
./workspace/test_new_web_maven/src/main/webapp/WEB-INF
./workspace/test_new_web_maven/src/main/webapp/WEB-INF/web.xml
./workspace/test_new_web_maven/src/main/resources
./workspace/test_new_web_maven/.classpath
./workspace/test_new_web_maven/.project
./workspace/test_new_web_maven/target
./workspace/test_new_web_maven/target/classes
./workspace/test_new_web_maven/pom.xml
susu@ubuntu:~$
1.2 Linux 命令中的 “permission denied” 问题
普通用户在根目录中使用 find
命令时,通常会碰到类似以下的问题:
susu@ubuntu:/$ find / -name *.txt
...
find: `./.gvfs': Permission denied
find: `./.dbus': Permission denied
find: `./.cache/dconf': Permission denied
因为管理员用户 root
设置了某些文件夹“禁止”普通用户访问,所以普通用户在使用以上命令时会出现如下错误。
解决方案:先给出链接,一个百度文库,搜索关键字就可以看到解决方法。
/dev/null
称为 Linux
黑洞,等价于一个只写文件,所有写入它的内容都会消失,既然会消失,那么该文件也是打不开的,也无法从该文件当中读取任何内容。而解决的途径就是把含有 permission denied
的报错信息都输入该文件即可。
对于可能存在该报错信息的命令(在根目录 /
下执行 find
命令,通常都会有此报错),那么可以该 find
命令后,添加一句话,比如上面的 find
命令:
susu@ubuntu:/$ find / -name *.txt 2>/dev/null
在后面加上命令 2>/dev/null
就避免了报错问题。
1.3 find 命令忽略大小写
只需要在命令选项前加一个 i,就可忽略大小写。-name
换为 -iname
,-regex
换为-iregex
。
1.4 和文件访问、修改以及对应时间相关的 find 命令
主要是 -mtime
和 -ctime
命令选项:
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
从上面的解释看出,文件被改变,分为两类,一类是文件状态的改变,比如权限、归属关系,这个时候的前缀是 -c...
(比如:-cmin n
,-ctime n
);一类是文件数据的改变,就是修改的文件内容,前缀是 -m...
(-mmin n
,-mtime n
)。
后面的 n,有两种,一种是 +n,一种是 -n,其各自含义如下:
-mtime -n
在 n 天之内改变文件数据的文件;-mtime +n
在 n 天之前改变文件数据的文件。
1.5 `-mindepth` 和 `-maxdepth` 的使用
限定搜索指定目录的深度,两者可以结合使用。其实多种命令选项都可结合使用,只要合理就行。比如:
susu@ubuntu:~/find_test$ find . -name "aa"
./aa
./cccccc/dddddd/aa
./cccccc/aa
susu@ubuntu:~/find_test$
检索出了 3 个符合条件的路径,如果限定搜索目录最大深度不能超过 2 层,那么可使用如下语句:
susu@ubuntu:~/find_test$ find . -maxdepth 2 -name "aa"
./aa
./cccccc/aa
susu@ubuntu:~/find_test$
从上面的例子可看出,对于 maxdepth
,若为 1,那么就是指只在当前目录下搜索,子目录不再搜索。如果条件限定为搜索目录深度最小是 2,最大是 3,那么命令可如下:
susu@ubuntu:~/find_test$ find . -mindepth 2 -maxdepth 3 -name "aa"
./cccccc/dddddd/aa
./cccccc/aa
susu@ubuntu:~/find_test$
当然也可以只限定在某个固定搜索目录深度下搜索:
susu@ubuntu:~/find_test$ find . -maxdepth 2 -mindepth 2 -regex ".*aa.*"
./cccccc/aaa
./cccccc/aa
susu@ubuntu:~/find_test$
1.6 `find` 其他命令
<1> 相反匹配:
susu@ubuntu:~/find_test$ ls
1 2 aa aaa cccccc mybashprogram.sh mycprogram.c MyCProgram.c Program.c
susu@ubuntu:~/find_test$
susu@ubuntu:~/find_test$ find . -mindepth 1 -maxdepth 1 -not -name "aa*"
./MyCProgram.c
./2
./1
./mybashprogram.sh
./Program.c
./cccccc
./mycprogram.c
susu@ubuntu:~/find_test$
<2> 在查找到的文件上执行命令:
susu@ubuntu:~/find_test$ find . -maxdepth 1 -name "aa*" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e ./aaa
d41d8cd98f00b204e9800998ecf8427e ./aa
susu@ubuntu:~/find_test$
计算 MD5 校验和。
<3> 使用 inode 编号查找文件
任何一个文件都有一个唯一的 inode 编号,先查看每个文件的 inode 编号:
susu@ubuntu:~/find_test$ ls -i1 a*
804182 aa
804181 aaa
susu@ubuntu:~/find_test$
然后使用 -num
命令:
susu@ubuntu:~/find_test$ find -inum 804182
./aa
susu@ubuntu:~/find_test$
当然以上举例只是简单情况,对于名字相似(特别是末尾多一个空格,看不出来差别的时候)的可使用 inode 进行辨别。
<4> 根据文件权限查找文件:
-perm ***
可用 ls -l
查看各个文件的权限:
susu@ubuntu:~/find_test$ ls -l
total 4
-rw-rw-r-- 1 susu susu 0 Jun 15 09:33 1
-rw-rw-r-- 1 susu susu 0 Jun 15 09:34 2
-rw-rw-r-- 1 susu susu 0 Jun 15 09:33 aa
-rw-rw-r-- 1 susu susu 0 Jun 15 09:33 aaa
drwxrwxr-x 3 susu susu 4096 Jun 15 13:48 cccccc
-rw-rw-r-- 1 susu susu 0 Jun 15 09:28 mybashprogram.sh
-rw-rw-r-- 1 susu susu 0 Jun 15 09:28 mycprogram.c
-rw-rw-r-- 1 susu susu 0 Jun 15 09:28 MyCProgram.c
-rw-rw-r-- 1 susu susu 0 Jun 15 09:28 Program.c
susu@ubuntu:~/find_test$
<5> 使用 -type
查找指定文件类型的文件:
find . -type f 普通文件
find . -type s socket文件
find . -type d 目录文件
find . -type f -name ".*" 查找所有一匿藏文件
find . -type d -name ".*" 查找所有的隐藏目录
下面看下具体用例。
比如,在文件夹 find_test 下,有如下的文件组成:
susu@ubuntu:~/find_test$ ls -R
.:
a aa aaa bbbbbb bewe.sh werrw.c
./bbbbbb:
bae.sh ccccc readme.txt wer.txt
./bbbbbb/ccccc:
wer.c
susu@ubuntu:~/find_test$
如果要清空该文件夹下的所有内容,可以回退到上一层,然后使用 rm -rf find_test
命令。也可以使用如下命令:
susu@ubuntu:~/find_test$ find . -regex ".*" -exec rm -rf {} \;
rm: cannot remove directory: ‘.’
find: `./bbbbbb': No such file or directory
susu@ubuntu:~/find_test$ ls
susu@ubuntu:~/find_test$
文件夹下的所有文件都已删除,包括各层子目录的文件夹。
2. `grep` 命令
主要作用:Linux 系统中一个文本搜索工具,能使用正则表达式搜索文本,并把搜索结果打印出来。
比如,a.txt 文件中如下内容:
susu@ubuntu:~/grep_test$ cat a.txt
tihis test1 werwr.
df
sdfef
wf
g
werwer teststtttt
wesdf wtest234.
susu@ubuntu:~/grep_test$
现在,要在 a.txt 中找所有包含“test”字符串的行,并显示出来:
susu@ubuntu:~/grep_test$ grep "test" a.txt
tihis test1 werwr.
werwer teststtttt
wesdf wtest234.
susu@ubuntu:~/grep_test$
其中,“test”字符串在 ubuntu 的命令行下是红色高亮显示的。
$ grep ‘test’ d*
显示所有以 d 开头的文件中含有“test”关键字的行。
如下命令:
grep "[a-z]\{5\}" a.txt
表示每个字符串包含至少 5 个以上连续小写字母的字符串。
除了搜索限定的文本,也可以搜索指定目录下的所有文件,如下:
susu@ubuntu:~$ grep "test" grep_test/*
grep_test/a.txt:tihis test1 werwr.
grep_test/a.txt:werwer teststtttt
grep_test/a.txt:wesdf wtest234.
grep_test/b.txt:testt tewtwwer testetwr
susu@ubuntu:~$
注意:默认情况下,grep 只在跟定的目录下进行搜索,不会进入子目录,所以搜索深度只有 1 层,而且会跳出来“*** is a directory”。如果想让其搜索所有子目录的文件,可以使用如下语句:
susu@ubuntu:~$ grep -r "test" grep_test/*
grep_test/a.txt:tihis test1 werwr.
grep_test/a.txt:werwer teststtttt
grep_test/a.txt:wesdf wtest234.
grep_test/b.txt:testt tewtwwer testetwr
grep_test/ddddd/c.txt~:werwert testt
grep_test/ddddd/c.txt~:test
grep_test/ddddd/c.txt~:testsetwtw
grep_test/ddddd/c.txt~:sdffsddfsfftetsettest sdf
grep_test/ddddd/c.txt:werwert testt
grep_test/ddddd/c.txt:test
grep_test/ddddd/c.txt:testsetwtw
grep_test/ddddd/c.txt:sdffsddfsfftetsettest sdf
susu@ubuntu:~$
或者,使用如下语句跳过子目录:
susu@ubuntu:~$ grep -d skip "test" grep_test/*
grep_test/a.txt:tihis test1 werwr.
grep_test/a.txt:werwer teststtttt
grep_test/a.txt:wesdf wtest234.
grep_test/b.txt:testt tewtwwer testetwr
susu@ubuntu:~$
如果现实内容过多,可以通过管道转到 less 上阅读,语句如下:
susu@ubuntu:~$ grep -r "test" grep_test/* | less
note:less 是一个工具,用于文件或者其他输入的分页显示,是 Linux 系统查看文本内容的工具。比如可以用以下方式打开文件:
susu@ubuntu:~/grep_test$ less a.txt
然后就会转到一个新页面,只显示 a.txt 中的内容。更多关于 less 的讲解,参看链接:http://www.cnblogs.com/peida/archive/2012/11/05/2754477.html。
3. diff 命令
diff 命令可以比较文本,也可比较目录。比较文本,就是逐行比较,给出异同点,比较目录时,同名的文件会进行比较,不同名的文件,会列出各自属于哪个目录。
比较文件:
susu@ubuntu:~/grep_test$ diff a.txt c.txt
3c3
< sdfef
---
> wr
6c6,8
<
---
> add
> wer
> rty
susu@ubuntu:~/grep_test$
比较目录:
susu@ubuntu:~$ diff grep_test/ workspace/
diff grep_test/a.txt workspace/a.txt
1,10d0
< tihis test1 werwr.
< df
< sdfef
< wf
< g
<
< werwer teststtttt
<
< wesdf wtest234.
<
Only in grep_test/: b.txt
Only in grep_test/: c.txt
Only in grep_test/: c.txt~
Only in grep_test/: ddddd
Only in workspace/: .metadata
Only in workspace/: .recommenders
Only in workspace/: RemoteSystemsTempFiles
Only in workspace/: testJust
Only in workspace/: test_new_web_maven
Only in workspace/: test_quickstart_maven
susu@ubuntu:~$
对于两个文件的比较,会有两个箭头表示:“<”和“>”符号。符号“<”表示第一个参数代表的文件,符号“>”表示第二个参数代表的文件。上面的代码中,首先给出提示:diff grep_test/a.txt workspace/a.txt
,然后接下来是要比较的内容。
第一行,给出了“1,10d0”,结合下面的左侧指向箭头“<”,说明在第 0 行(最开始),第一个文本比第二个文本多了 1 ~ 10 行。
diff 命令中间可加入各个参数,比如:
susu@ubuntu:~/grep_test$ diff --brief a.txt b.txt
Files a.txt and b.txt differ
susu@ubuntu:~/grep_test$ diff -q a.txt b.txt
Files a.txt and b.txt differ
susu@ubuntu:~/grep_test$
-q
或者 --brief
简化了比较的信息,只告诉两个文本是否相同,不显示详细的不同之处。更多 diff 的命令参数可参考:http://www.cnblogs.com/peida/archive/2012/12/12/2814048.html。
4. mount 命令
在 Linux 系统中,mount
命令用于挂在光盘镜像文件、移动硬盘、U 盘等。
格式:
mount [-t vfstype] [-o options] device dir
[-t vfstype]
指定所挂载的文件系统的类型,通常 mount 可自动识别,不用人为指定。常用类型如下:
光盘或光盘镜像:iso9660
DOS fat16 文件系统:msdos
Windows 9x fat32 文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows 文件网络共享:smbfs
UNIX(LINUX)
[-o options]
说明挂载方式,其和上面的命令,两者可互换。常用参数如下:
oop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
device
表示要挂载的设备;dir
设备在系统上的挂载点(mount point)。
实践操作如下。
在插入 U 盘之前,输入以下命令:
susu@ubuntu:~$ sudo fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c5c38
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 60817407 30407680 83 Linux
/dev/sda2 60819454 62912511 1046529 5 Extended
/dev/sda5 60819456 62912511 1046528 82 Linux swap / Solaris
susu@ubuntu:~$
这地方的命令一定要加 sudo,否则什么也不会显示。
可以看到,Linux 文件系统下,有一块硬盘 sda ,硬盘中有 2 个分区 sda1 和 sda2 。另外一个 sda5 是逻辑分区。
插入 U 盘后,重新敲一遍命令,得到如下信息:
susu@ubuntu:/$ sudo fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c5c38
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 60817407 30407680 83 Linux
/dev/sda2 60819454 62912511 1046529 5 Extended
/dev/sda5 60819456 62912511 1046528 82 Linux swap / Solaris
Disk /dev/sdb: 4057 MB, 4057989120 bytes
91 heads, 45 sectors/track, 1935 cylinders, total 7925760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 * 63 7925759 3962848+ c W95 FAT32 (LBA)
susu@ubuntu:/$
会发现,下面多出来很多信息,这个信息都是描述刚刚插入的 U 盘的。系统多了一个硬盘 sdb 和一个磁盘分区 sdb1 。我们要挂载的就是磁盘分区 sdb1 。
先在 /mnt/
目录下创建一个挂载点:
susu@ubuntu:/mnt$ sudo mkdir usbhd1
susu@ubuntu:/mnt$ ls
usbhd1
susu@ubuntu:/mnt$
然后根据 mount
命令的语法,将 USB 添加到该挂载点:
susu@ubuntu:/$ mount -o loop dev/sdb1 mnt/usbhd1/
mount: only root can do that
susu@ubuntu:/$ sudo mount -o loop dev/sdb1 mnt/usbhd1/
susu@ubuntu:/$ cd mnt/usbhd1/
susu@ubuntu:/mnt/usbhd1$ ls
???? EVM?????.txt
???? ?? Microsoft Word ??.doc
????? ???????????????????.pdf
????05.06.07.09????-4.pdf Reimbursement Form for interview trip.xls
??1_??.png System Volume Information
???????????????(2010?).pdf Vocabulary.doc
2012??????????(?????)-12.pdf VS2012_ULT_chs.iso
????????.docx ????????????????.xls
susu@ubuntu:/mnt/usbhd1$
mount 挂载成功!
上述代码中,刚开始没有加 sudo,提示只有 root 可以。最后 ls ,发现是乱码,是因为 U 盘中都是中文名字,所以显示乱码。可用以下命令解决此问题:
susu@ubuntu:/$ sudo mount -o iocharset=cp936 ./dev/sdb1 ./mnt/usbhd1/
卸载就相对简单了,只需要把挂载点卸掉即可,命令如下:
susu@ubuntu:/$ sudo umount ./mnt/usbhd1
5. ps 命令
ps 与 top 的区别:ps 是进程快照,给出了输入 ps 命令按回车时的进程,而 top 是实时动态进程。
显示所有进程信息:
susu@ubuntu:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:16 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 watchdog/0
......
显示指定用户信息:
susu@ubuntu:~$ ps -u susu
PID TTY TIME CMD
1757 ? 00:00:00 gnome-keyring-d
1759 ? 00:00:00 init
1828 ? 00:00:04 dbus-daemon
1839 ? 00:00:00 upstart-event-b
1848 ? 00:00:00 window-stack-br
1850 ? 00:00:55 ibus-daemon
1864 ? 00:00:00 gvfsd
1874 ? 00:00:00 ibus-dconf
1875 ? 00:00:00 gvfsd-fuse
1876 ? 00:00:14 ibus-ui-gtk3
......
与 grep 结合,查找特定进程:
susu@ubuntu:~$ ps -ef|grep ssh
susu 5920 2409 0 17:41 pts/6 00:00:00 grep --color=auto ssh
susu@ubuntu:~$
列出目前正在运行在内存中的所有程序:
susu@ubuntu:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 4452 2076 ? Ss 09:00 0:03 /sbin/init
root 2 0.0 0.0 0 0 ? S 09:00 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:00 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 09:00 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 09:00 0:16 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 09:00 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 09:00 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S 09:00 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 09:00 0:00 [watchdog/1]
root 12 0.0 0.0 0 0 ? S 09:00 0:00 [migration/1]
root 13 0.0 0.0 0 0 ? S 09:00 0:00 [ksoftirqd/1]
root 14 0.0 0.0 0 0 ? S 09:00 0:03 [kworker/1:0]
root 15 0.0 0.0 0 0 ? S< 09:00 0:00 [kworker/1:0H]
root 16 0.0 0.0 0 0 ? S 09:00 0:00 [watchdog/2]
root 17 0.0 0.0 0 0 ? S 09:00 0:00 [migration/2]
......
以上内容中各字段含义如下:
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
6. free 命令
显示系统中使用和空存情闲的内况:包括物理区内存,交互区内存(swap)和内核缓冲区内存(buffer),无共享内存。
7 ifconfig(interface configs)
类似于 Windows 下的 ipconfig 指令,获取网络接口配置信息。
显示网络设备信息:
susu@ubuntu:/$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:36:a8:68
inet addr:192.168.168.128 Bcast:192.168.168.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe36:a868/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:53539 errors:3 dropped:1 overruns:0 frame:0
TX packets:48878 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:29473130 (29.4 MB) TX bytes:8479638 (8.4 MB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12501 errors:0 dropped:0 overruns:0 frame:0
TX packets:12501 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1211710 (1.2 MB) TX bytes:1211710 (1.2 MB)
抄一段对以上内容的说明:
eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC 地址)是 00:50:56:BF:26:20
inet addr 用来表示网卡的 IP 地址,此网卡的 IP 地址是 192.168.120.204,广播地址, Bcast:192.168.120.255,掩码地址 Mask:255.255.255.0
lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTP 服务器指定到回坏地址,在浏览器输入
127.0.0.1
就能看到你所架 Web 网站了。但只是您能看得到,局域网的其它主机或用户无从知道。第一行:连接类型:Ethernet(以太网)HWaddr(硬件 MAC 地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500 字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息。
根据以上的解释说明,可用如下方式来打开和关闭网卡。
打开:
sudo ifconfig eth0 down
关闭:
sudo ifconfig eth0 up
其他功能包括:为网卡配置和删除 IPv6 地址、配置 IP 地址、启用 / 关闭 ARP 协议、设置网卡做大传输单元(ifconfig eth0 mtu 1500)等。
8. telnet 命令
主要用于远程登录。
telnet 程序是基于 Telnet 协议的远程登录客户端程序。Telnet 协议是 Internet 远程服务的标准协议也主要方式。现在很多 Linux 服务器因为安全问题不再支持 Telnet 协议,改用 SSH,部分还在支持。
telnet 不仅能够登录远程,然后进行远程操作,还能查看远程服务器状态,某端口是否可访问。
这部分内容,暂时不作深入了解,有需要的小伙伴可自行搜索了解。
9. scp(secure copy) 命令
用于远程文件(夹)拷贝的命令,基于 ssh。而类似功能的命令 cp 只能在本地拷贝。
格式:
scp [options] <source_path> <desti_path>
参数说明(网上摘抄):
-1 强制scp命令使用协议 ssh1;
-2 强制scp命令使用协议 ssh2;
-4 强制scp命令只使用 IPv4 寻址;
-6 强制scp命令只使用 IPv6 寻址;
-B 使用批处理模式(传输过程中不询问传输口令或短语);
-C 允许压缩。(将 -C 标志传递给 ssh ,从而打开压缩功能);
-p 保留原文件的修改时间,访问时间和访问权限;
-q 不显示传输进度条;
-r 递归复制整个目录;
-v 详细方式显示输出。scp 和 ssh(1) 会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题;
-c cipher 以 cipher 将数据传输进行加密,这个选项将直接传递给 ssh;
-F ssh_config 指定一个替代的 ssh 配置文件,此参数直接传递给 ssh;
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给 ssh;
-l limit 限定用户所能使用的带宽,以 `Kbit/s` 为单位;
-o ssh_option 如果习惯于使用 `ssh_config(5)` 中的参数传递方式;
-P port 注意是大写的P,port 是指定数据传输用到的端口号;
-S program 指定加密传输时所使用的程序,此程序必须能够理解 ssh(1) 的选项。
10. zip 和 unzip 命令
压缩、解压命令。过于简单,具体使用不再描述。
11. gzip 命令
gzip 与 zip 的区别:
gzip 是一个压缩工具,适用于压缩单个文件,其压缩的文件的后缀为
.gz
。而 zip 是一种数据结构,类似于 rar,其适用于压缩多个文件。在 Linux 下,下载压缩包的时候,多会看到有tar.gz
后缀的文件,这种就是先用tar
命令将多个文件打包成一个文件,然后再使用gzip
命令进行压缩,得到 tar.gz 格式,更多细节见:链接。
具体命令格式:
gzip [options] <file or dir>
各参数说明:
-a 或 --ascii 使用 ASCII 文字模式。
-c 或 --stdout 或 --to-stdout 把压缩后的文件输出到标准输出设备,不去更动原始文件。
-d 或 --decompress 或 ----uncompress 解开压缩文件。
-f 或 --force 强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-h 或 --help 在线帮助。
-l 或 --list 列出压缩文件的相关信息。
-L 或 --license 显示版本与版权信息。
-n 或 --no-name 压缩文件时,不保存原来的文件名称及时间戳记。
-N 或 --name 压缩文件时,保存原来的文件名称及时间戳记。
-q 或 --quiet 不显示警告信息。
-r 或 --recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-S < 压缩字尾字符串 > 或 ----suffix < 压缩字尾字符串 > 更改压缩字尾字符串。
-t 或 --test 测试压缩文件是否正确无误。
-v 或 --verbose 显示指令执行过程。
-V 或 --version 显示版本信息。
-num 用指定的数字num调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或 --best 表示最慢压缩方法(高压缩比)。系统缺省值为 6。
举几个简单例子:
gzip *
是压缩当前目录下所有文件,但是不包含子目录:
susu@ubuntu:~/grep_test$ ls
a.txt b.txt c.txt subDir
susu@ubuntu:~/grep_test$ gzip *
gzip: subDir is a directory -- ignored
susu@ubuntu:~/grep_test$ ls
a.txt.gz b.txt.gz c.txt.gz subDir
susu@ubuntu:~/grep_test$
其逆过程(解压)为 gzip -d *
susu@ubuntu:~/grep_test$ ls
a.txt.gz b.txt.gz c.txt.gz subDir
susu@ubuntu:~/grep_test$ gzip -d *
gzip: subDir is a directory -- ignored
susu@ubuntu:~/grep_test$ ls
a.txt b.txt c.txt subDir
susu@ubuntu:~/grep_test$
若解压过程中需要列出详细信息,则为:
susu@ubuntu:~/grep_test$ ls
a.txt.gz b.txt.gz c.txt.gz subDir
susu@ubuntu:~/grep_test$ gzip -dv *
a.txt.gz: 18.6% -- replaced with a.txt
b.txt.gz: 19.7% -- replaced with b.txt
c.txt.gz: 16.7% -- replaced with c.txt
gzip: subDir is a directory -- ignored
susu@ubuntu:~/grep_test$
其实就是多个参数选项的结合(-d and -v -> -dv)。
若压缩完了,想看每个压缩文件的详细信息,则用如下命令:
susu@ubuntu:~/grep_test$ ls
a.txt.gz b.txt.gz c.txt.gz subDir
susu@ubuntu:~/grep_test$ gzip -l *
compressed uncompressed ratio uncompressed_name
81 70 18.6% a.txt
77 66 19.7% b.txt
89 78 16.7% c.txt
gzip: subDir is a directory -- ignored
247 214 -4.2% (totals)
susu@ubuntu:~/grep_test$
因为有一个目录,总是跳出来一个 ignored 的信息,很讨厌啊有木有,可使用 -r
选项进行地柜压缩,压缩一个目录下所有的文件(包括子目录):
susu@ubuntu:~/grep_test$ ls
a.txt b.txt c.txt subDir
susu@ubuntu:~/grep_test$ gzip -r *
susu@ubuntu:~/grep_test$ ls
a.txt.gz b.txt.gz c.txt.gz subDir
susu@ubuntu:~/grep_test$ cd subDir/
susu@ubuntu:~/grep_test/subDir$ ls
d.txt.gz e.txt.gz
susu@ubuntu:~/grep_test/subDir$
有了递归的压缩,当然也有递归的解压,只需要把-d换成-dr即可。
12. ll 命令
每天都在使用 ls
命令,但是今天才知道 ll
和 ls
的区别,这里发个链接,可详细了解,解释的挺清楚。【linux ls和 ll 命令】:http://blog.youkuaiyun.com/cgzhello1/article/details/7839534/
13. netstat 命令
作用:
显示和各协议(TCP / IP / UDP / ICMP 等)相关的统计信息,检验本机各端口的网络连接情况。
命令较多,暂时不打算细看,详细信息,这里给出链接,netstat命令详解:http://www.cnblogs.com/peida/archive/2013/03/08/2949194.html。
14. kill 命令
作用:
终止正在运行的进程,进程管理常用命令。
进程分为前台进程和后台进程。前台进程,可以使用 ctrl+c
来终止,后台进程,只能使用 kill
命令终止。
首先用 ps 或者 top 来获得进程的 id,然后再使用 kill 命令。通常,kill 命令通过向进程发送信号的方式来终止进程。默认情况下,使用编号为 15 的 TERM 信号,TERM 信号能杀死所有不能捕获该信号的进程,对于捕获该信号的进程,使用编号为 9 的 kill 信号,强行杀掉该进程。
命令使用方式:
kill [-options] <PID>
更多:kill命令详解:http://www.cnblogs.com/peida/archive/2012/12/20/2825837.html。
15. set 命令
作用:
显示系统中已经存在的 shell 变量,以及设置 shell 变量的新变量值。
更多说明:linux set命令:http://man.linuxde.net/set。
16. su 命令
作用:
切换用户。
上来就碰到一个错误:
susu@ubuntu:/$ su
Password:
su: Authentication failure
susu@ubuntu:/$
原因:是 root 用户默认是没有密码的,而上面的密码部分,我输入的是账户 susu 对应的密码,并不是 root 的密码。所有才会出错。
解决方式就是先给 root 设置密码,在 susu 账户下就可以设置:
susu@ubuntu:/$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
susu@ubuntu:/$
另外,用户切换,如果想回到 root 用户,那么使用:
susu@ubuntu:~$ sudo -i
[sudo] password for susu:
root@ubuntu:~#
注意:这里的 passwd,输入的是当前账户(susu)对应的密码。
也可以使用:
susu@ubuntu:/root$ su root
Password:
root@ubuntu:~#
注意:这里的 passwd,输入的是 root 账户对应的密码,而不是 susu 账户对应的密码。
如果由 root 用户切换到普通用户,那么使用 su < 普通用户名 > 即可,而不能使用 sudo,在 root 用户下,没有 sudo < 用户名 > 命令。
susu@ubuntu:/$ sudo -i
root@ubuntu:~# su susu
susu@ubuntu:/root$ cd ..
susu@ubuntu:/$ ls
bin dev initrd.img media proc sbin tmp vmlinuz
boot etc lib mnt root srv usr
cdrom home lost+found opt run sys var
susu@ubuntu:/$