目录摘要
代码语言: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
进行名字匹配查询:
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
规则,所以没能匹配到想要的结果。
正确用法如下:
代码语言:javascript复制susu@ubuntu:~/find_test$ find . -regex ".*a "
./aaa
./aa
susu@ubuntu:~/find_test$
注意:
代码语言:javascript复制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:
代码语言:javascript复制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命令时,通常会碰到类似以下的问题:
代码语言: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
命令选项:
-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,那么命令可如下:
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
命令:
susu@ubuntu:~/find_test$ find -inum 804182
./aa
susu@ubuntu:~/find_test$
当然以上举例只是简单情况,对于名字相似(特别是末尾多一个空格,看不出来差别的时候)的可使用inode进行辨别。
<4> 根据文件权限查找文件
代码语言:javascript复制-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查找指定文件类型的文件
代码语言: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
命令。也可以使用如下命令:
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"。如果想让其搜索所有子目录的文件,可以使用如下语句:
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正统查看文本内容的工具。比如可以用以下方式打开文件:
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
命令中间可加入各个参数,比如:
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/
目录下创建一个挂载点,
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盘中都是中文名字,所以显示乱码。可用以下命令解决此问题:
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
结合,查找特定进程:
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
gzip
与zip
的区别:
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
命令,却很少有人知道ll
和ls
的区别,这里发个链接,可详细了解,解释的挺清楚。【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
- 可读、可写、可执行权限说明 rwx
- 15个极好的基础Linux find命令示例
- 15个极好的高级Linux find命令示例
- grep命令讲解
- mount讲解(挂载移动硬盘和U盘)