linux常用命令用法汇总

2019-12-18 15:16:30 浏览数 (1)

目录摘要

代码语言:javascript复制
	1 find命令
	2 grep命令
	3 diff命令
	4 mount命令
	5 ps
	6 free命令
	7 ifconfiginterface configs
	8 telnet
	9 scpsecure copy
	10 zipunzip
	11 gzip
	12 ll命令
	13 netstat
	14 kill命令
	15 set命令
	16 su命令
	Reference

1 find命令

1.1 find命令中:find -regex 与find -name的区别

若一个目录中,有如下目录:

代码语言:javascript复制
susu@ubuntu:~/find_test$ ls
aaa aaa 22 1
susu@ubuntu:~/find_test$

可以使用-name进行名字匹配查询:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -name "a*"
./aaa
./aa
susu@ubuntu:~/find_test$

若同样的方式,使用-regex查询,则不能得到想要的结果:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -regex "a*"
susu@ubuntu:~/find_test$

出现以上结果的原因在于 -name只要求匹配当前目录中的文件(夹)名称,而-regex则是把find输出的完整结果作为匹配对象,所以上面的命令中,默认是以a作为开头的字符串匹配,不符合-regex规则,所以没能匹配到想要的结果。

正确用法如下:

代码语言:javascript复制
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"的。

代码语言:javascript复制
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:

代码语言:javascript复制
susu@ubuntu:~/workspace$ ls
RemoteSystemsTempFiles  test_new_web_maven
testJust                test_quickstart_maven
susu@ubuntu:~/workspace$ cd ..
susu@ubuntu:~$

退回到上一层之后,用-regex查找workspace文件夹下的内容,使用如下语句:

代码语言:javascript复制
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命令时,通常会碰到类似以下的问题:

代码语言:javascript复制
susu@ubuntu:/$ find / -name *.txt
...
find: `./.gvfs': Permission denied
find: `./.dbus': Permission denied
find: `./.cache/dconf': Permission denied

因为管理员用户root设置了某些文件夹“禁止”普通用户访问,所以普通用户在使用以上命令时会出现如下错误。

解决方案:先给出链接,一个百度文库http://wenku.baidu.com/link?url=bUtYFffbnNpFxyGREmJPoD8SCmIv0NRWDwMUY5OinT5fLxqB2FJMPwc3gVGoxwYTIwbpp9eUJ16Q1oHyYkf9k8TBGiRsbohxaMK1k1hUyH_,搜索关键字就可以看到解决方法。

/dev/null称为linux黑洞,等价于一个只写文件,所有写入它的内容都会消失,既然会消失,那么该文件也是打不开的,也无法从该文件当中读取任何内容。而解决的途径就是把含有permission denied的报错信息都输入该文件即可。

对于可能存在该报错信息的命令(在根目录"/"下执行find命令,通常都会有此报错),那么可以该find命令后,添加一句话,比如上面的find命令:

代码语言:javascript复制
susu@ubuntu:/$ find / -name *.txt 2>/dev/null 

在后面加上命令"2>/dev/null"就避免了报错问题。

1.3 find命令忽略大小写

只需要在命令选项前加一个i,就可忽略大小写。-name换为-iname-regex换为-iregex

1.4 与文件访问、修改以及对应时间相关的find命令

主要是-mtime-ctime命令选项:

代码语言:javascript复制
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件

从上面的解释看出,文件被改变,分为两类,一类是文件状态的改变,比如权限、归属关系,这个时候的前缀是-c...(eg: -cmin n, -ctime n);一类是文件数据的改变,就是修改的文件内容,前缀是-m...(-mmin n, -mtime n)

后面的n,有两种,一种是 n,一种是-n,其各自含义如下:

-mtime -n 在n天之内改变文件数据的文件 -mtime n 在n天之前改变文件数据的文件

1.5 mindepth和maxdepth的使用

限定搜索指定目录的深度,两者可以结合使用。其实多种命令选项都可结合使用,只要合理就行。比如:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -name "aa"
./aa
./cccccc/dddddd/aa
./cccccc/aa
susu@ubuntu:~/find_test$

检索出了3个符合条件的路径,如果限定搜索目录最大深度不能超过2层,那么可使用如下语句:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -maxdepth 2 -name "aa"
./aa
./cccccc/aa
susu@ubuntu:~/find_test$

从上面的例子可看出,若maxdepth为1,那么就是指只在当前目录下搜索,子目录不再搜索。如果条件限定为搜索目录深度最小是2,最大是3,那么命令可如下:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -mindepth 2 -maxdepth 3 -name "aa"
./cccccc/dddddd/aa
./cccccc/aa
susu@ubuntu:~/find_test$

当然也可以只限定在某个固定搜索目录深度下搜索:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -maxdepth 2 -mindepth 2 -regex ".*aa.*"
./cccccc/aaa
./cccccc/aa
susu@ubuntu:~/find_test$

1.6 find其他命令

<1> 相反匹配

代码语言:javascript复制
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> 在查找到的文件上执行命令

代码语言:javascript复制
susu@ubuntu:~/find_test$ find . -maxdepth 1 -name "aa*" -exec md5sum {} ;
d41d8cd98f00b204e9800998ecf8427e  ./aaa
d41d8cd98f00b204e9800998ecf8427e  ./aa
susu@ubuntu:~/find_test$

计算MD5校验和。

<3> 使用inode编号查找文件

任何一个文件都有一个唯一的inode编号,先查看每个文件的inode编号:

代码语言:javascript复制
susu@ubuntu:~/find_test$ ls -i1 a*
804182 aa
804181 aaa
susu@ubuntu:~/find_test$

然后使用-num命令:

代码语言:javascript复制
susu@ubuntu:~/find_test$ find -inum 804182
./aa
susu@ubuntu:~/find_test$

当然以上举例只是简单情况,对于名字相似(特别是末尾多一个空格,看不出来差别的时候)的可使用inode进行辨别。

<4> 根据文件权限查找文件

代码语言:javascript复制
-perm ***

可用 ls -l查看各个文件的权限:

代码语言:javascript复制
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查找指定文件类型的文件

代码语言:javascript复制
find . -type f 		普通文件
find . -type s 		socket文件
find . -type d		目录文件
find . -type f -name ".*" 	查找所有一匿藏文件
find . -type d -name ".*"	查找所有的隐藏目录

<6> 具体用例

比如,在文件夹find_test下,有如下的文件组成

代码语言:javascript复制
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命令。也可以使用如下命令:

代码语言:javascript复制
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文件中如下内容:

代码语言:javascript复制
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"字符串的行,并显示出来:

代码语言:javascript复制
susu@ubuntu:~/grep_test$ grep "test" a.txt
tihis test1 werwr.
werwer teststtttt
wesdf wtest234.
susu@ubuntu:~/grep_test$

其中,test字符串在ubuntu的命令行下是红色高亮显示的。

代码语言:javascript复制
$ grep ‘test’ d*

显示所有以d开头的文件中含有"test"关键字的行。

如下命令

代码语言:javascript复制
grep "[a-z]{5}" a.txt

表示每个字符串包含至少5个以上连续小写字母的字符串。

除了搜索限定的文本,也可以搜索指定目录下的所有文件,如下:

代码语言:javascript复制
	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层,而且会跳出来"xxx is a directory"。如果想让其搜索所有子目录的文件,可以使用如下语句:

代码语言:javascript复制
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:~$

或者,使用如下语句跳过子目录。

代码语言:javascript复制
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上阅读,语句如下:

代码语言:javascript复制
susu@ubuntu:~$ grep -r "test" grep_test/* | less

note:less是一个工具,用于文件或者其他输入的分页显示,是linux正统查看文本内容的工具。比如可以用以下方式打开文件:

代码语言:javascript复制
susu@ubuntu:~/grep_test$ less a.txt

然后就会转到一个新页面,只显示a.txt中的内容。更多关于less的讲解,参看链接http://www.cnblogs.com/peida/archive/2012/11/05/2754477.html。

3 diff命令

diff命令可以比较文本,也可比较目录。比较文本,就是逐行比较,给出异同点,比较目录时,同名的文件会进行比较,不同名的文件,会列出各自属于哪个目录。

比较文件

代码语言:javascript复制
susu@ubuntu:~/grep_test$ diff a.txt c.txt
3c3
< sdfef
---
> wr
6c6,8
<
---
> add
> wer
> rty
susu@ubuntu:~/grep_test$

比较目录

代码语言:javascript复制
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命令中间可加入各个参数,比如:

代码语言:javascript复制
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盘等。

格式

代码语言:javascript复制
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盘之前,输入以下命令:

代码语言:javascript复制
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盘后,重新敲一遍命令,得到如下信息:

代码语言:javascript复制
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/目录下创建一个挂载点,

代码语言:javascript复制
susu@ubuntu:/mnt$ sudo mkdir usbhd1
susu@ubuntu:/mnt$ ls
usbhd1
susu@ubuntu:/mnt$

然后根据mount的语法,将usb添加到该挂载点:

代码语言:javascript复制
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盘中都是中文名字,所以显示乱码。可用以下命令解决此问题:

代码语言:javascript复制
susu@ubuntu:/$ sudo mount -o iocharset=cp936 ./dev/sdb1 ./mnt/usbhd1/

卸载就相对简单了,只需要把挂载点卸掉即可,命令如下:

代码语言:javascript复制
susu@ubuntu:/$ sudo umount ./mnt/usbhd1

5 ps

ps与top的区别:ps是进程快照,给出了输入ps命令按回车时的进程,而top是实时动态进程。

显示所有进程信息:

代码语言:javascript复制
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
   ......

显示指定用户信息:

代码语言:javascript复制
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结合,查找特定进程:

代码语言:javascript复制
susu@ubuntu:~$ ps -ef|grep ssh
susu      5920  2409  0 17:41 pts/6    00:00:00 grep --color=auto ssh
susu@ubuntu:~$

列出目前正在运行在内存中的所有程序:

代码语言:javascript复制
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]
......

以上内容中各字段含义如下:

代码语言:javascript复制
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,获取网络接口配置信息。

显示网络设备信息:

代码语言:javascript复制
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)

抄一段对以上内容的说明:

代码语言:javascript复制
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 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)

第二行:网卡的IP地址、子网、掩码

第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节

第四、五行:接收、发送数据包情况统计

第七行:接收、发送数据字节数统计信息。

根据以上的解释说明,可用如下方式来打开和关闭网卡。

打开

代码语言:javascript复制
sudo ifconfig eth0 down

关闭

代码语言:javascript复制
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只能在本地拷贝。

格式

代码语言:javascript复制
scp [options] <source_path> <desti_path>

参数说明(网上摘抄)

代码语言:javascript复制
-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

gzipzip的区别:

gzip是一个压缩工具,适用于压缩单个文件,其压缩的文件的后缀为.gz。而zip是一种数据结构,类似于rar,其适用于压缩多个文件。在linux下,下载压缩包的时候,多会看到有tar.gz后缀的文件,这种就是先用tar将多个文件打包成一个文件,然后再使用gzip进行压缩,得到tar.gz格式,更多细节见链接。

具体命令格式:

代码语言:javascript复制
gzip [options] <file or dir>

各参数说明(网上摘抄)

代码语言:javascript复制
-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压缩当前目录下所有文件,但是不包含子目录

代码语言:javascript复制
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 *

代码语言:javascript复制
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$

若解压过程中需要列出详细信息,则为:

代码语言:javascript复制
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)。

若压缩完了,想看每个压缩文件的详细信息,则用如下命令:

代码语言:javascript复制
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选项进行地柜压缩,压缩一个目录下所有的文件(包括子目录):

代码语言:javascript复制
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命令,却很少有人知道llls的区别,这里发个链接,可详细了解,解释的挺清楚。【linux ls和 ll 命令】

13 netstat

作用:显示和各协议(TCP/IP/UDP/ICMP等)相关的统计信息,检验本机各端口的网络连接情况。

命令较多,暂时不打算细看,详细信息,这里给出链接:【netstat命令详解】

14 kill命令

作用:终止正在运行的进程,进程管理常用命令。

进程分为前台进程和后台进程。前台进程,可以使用ctrl c来终止,后台进程,只能使用kill命令终止。首先用ps或者top来获得进程的id,然后再使用kill命令。通常,kill命令通过向进程发送信号的方式来终止进程。默认情况下,使用编号为15的TERM信号,TERM信号能杀死所有不能捕获该信号的进程,对于捕获该信号的进程,使用编号为9的kill信号,强行杀掉该进程。

命令使用方式:

代码语言:javascript复制
kill [-options] <PID>

更多:【kill命令详解】

15 set命令

作用:显示系统中已经存在的shell变量,以及设置shell变量的新变量值。更多说明:【linux set命令】。

16 su命令

作用:切换用户。

看如下错误:

代码语言:javascript复制
susu@ubuntu:/$ su
Password:
su: Authentication failure
susu@ubuntu:/$

提示root用户默认是没有密码的,而上面的密码部分,输入的是账户"susu"对应的密码,并不是"root"的密码。所有才会出错。

解决方式就是先给"root"账号设置密码,在susu账户下就可以设置:

代码语言:javascript复制
susu@ubuntu:/$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
susu@ubuntu:/$

另外,用户切换,如果想回到root用户,那么使用:

代码语言:javascript复制
susu@ubuntu:~$ sudo -i
[sudo] password for susu:
root@ubuntu:~#

注意:这里的passwd,输入的是当前账户(susu)对应的密码。

也可以使用:

代码语言:javascript复制
susu@ubuntu:/root$ su root
Password:
root@ubuntu:~#

注意:这里的passwd,输入的是root账户对应的密码,而不是susu账户对应的密码。

如果由root用户切换到普通用户,那么使用su <普通用户名>即可,而不能使用sudo,在root用户下,没有sudo <用户名> 命令。

代码语言:javascript复制
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:/$

Reference

  1. 可读、可写、可执行权限说明 rwx
  2. 15个极好的基础Linux find命令示例
  3. 15个极好的高级Linux find命令示例
  4. grep命令讲解
  5. mount讲解(挂载移动硬盘和U盘)

0 人点赞