【总结】知识点巩固------Linux命令总结

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$

注意:

  1. 根据正则表达式的语法,应该加上 .* 而不是 *,具体正则表达式语法,参见链接http://www.runoob.com/regexp/regexp-syntax.html。

  2. 命令选项之后的参数,可用双引号包裹起来,也可以不用。

  3. 在 -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.csdn.net/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:/$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值