man
命令没有内部与外部命令的区分
man
查看关键词的man page(manual page)
(手册页)查看ls
的manpage(manual page)
可以输入:man ls
就可以查看ls的manpage
$ man ls
help
只能用于内部命令,不能用于外部命令
查看关键词的快捷帮助
而不是man page
(手册页),可以使用--help
查看ls
的快速帮助,输入ls --help
快速帮助信息就会打印到终端上
ls --help
另外一个帮助命令,可以显示出更完整的最新的信息。 得到的信息比 man
还要多,info
来自自由软件基金会的 GNU
项目,是 GNU
的超文本帮助系统,能够更完整的显示出 GNU
信息。所以得到的信息当然更多
man
和info
就像两个集合,它们有一个交集部分,但与 man
相比,info
工具可显示更完整的GNU
工具信息。若 man
页包含的某个工具的概要信息在info
中也有介绍,那么 man
页中会有请参考 info 页更详细内容
的字样。
查看ls
的info
信息,可以输入:info ls
,可以显示ls
的info
信息。
info ls
ls
查看指定目录下的内容
查看当前目录内容的详细信息
查看当前目录中的所有文件(包括隐藏文件)
具体的ll命令
可以查看此处ll查询结果的详细分析
cat filename
cat
用来查看文本文件中的内容
$ls
main.c Makefile
$cat main.c
the content of main.c
若cat
后不加任何文件名,则cat
进程就会一直运行,不能自行退出,这时按下Ctrl + Z
即可结束该进程。
more filename
:more
与cat
的作用差不多,只是当文件内容多于一屏时,按下空格可以滚到下一屏继续阅读,但是不可以回退
$ more main.c
content of main.c
...
press space to continue
less filename
less
的功能比more
更强大,当文件内容多于一屏时,按j可以向下滚动,按k
可以向上滚动。
$ less main.c
content of main.c
...
press j to down
press k to up
在当前目录下创建一个名为akaedu
的目录
$ mkdir akaedu
在当前目录下创建目录a
, 再在a
目录下创建b
$ mkdir -p a/b
假设当前目录下有一个a
目录,要切换到a
目录下可以输入
$ ls
main.c Makefile akaedu a
$pwd
/home/ymqqqqdx/
$cd a
$pwd
/home/ymqqqqdx/a
假设要切换到用户主目录下的a
目录,可以使用绝对路径
$ pwd
/
$ cd /home/ymqqqqdx/a
$ pwd
/home/ymqqqqdx/a
每一个用户都有一个对应的主目录,其绝对路径为/home/usrname
要切换到主目录时,只需输入cd
,即可回到用户主目录。另外~
代表当前用户的主目录,~/a
即代表主目录下的a目录
$pwd
/home/ymqqqqdx/a/b/c/d
$cd
$pwd
/home/ymqqqqdx/
$cd ~/a
/home/ymqqqqdx/a
..
代表上层目录.
代表当前目录,若要运行当前目录下的a.out
程序,即可输入./a.out
运行程序。
$pwd
/home/ymqqqqdx/a/b/c/d
$cd ..
$pwd
/home/ymqqqqdx/a/b/c
$./a.out
hello world!
$pwd
/home/ymqqqqdx/
$ls
a main.c Makefile
$rmdir a
$ls
main.c Makefile
删除1.c
文件,rm 1.c
$ls
main.c Makefile 1.c
$rm 1.c
$ls
main.c Makefile
删除a
目录
rm -r a
,若目录非空,会提示是否删除,若不需要提示,输入rm -rf a
就可以直接删除a
目录不需要确认。
$ls
main.c Makefile a
$rm -rf a
$ls
main.c Makefile
touch
命令:创建空文件
创建一个空文件,touch foo.c
,这样就在当前目录创建了foo.c
文件。
touch
的另外一个作用是更新当前文件
的修改时间
,若已经存在foo.c
文件,输入touch foo.c
后,用ls -l
可以看到文件修改时间已更新为当前时间
$ls
main.c Makefile
$touch foo.c
main.c Makefile foo.c
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:04 foo.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 main.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 Makefile
$touch main.c
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:04 foo.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:06 main.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 Makefile
cp filename newfilename
,复制filename
为newfilename
$ls
main.c Makefile
$cp main.c new.c
$ls
main.c Makefile new.c
$cp main.c ~/new.c
$ls ~/
new.c ...
cp -r a/ b/
,复制a
目录为b
目录。
$ls
main.c Makefile a
$cp -r a b
$ls
main.c Makefile a b
scp
是 secure copy
的缩写, scp
是linux
系统下基于ssh
登陆进行安全的远程文件拷贝命令。
scp
是加密的,rcp
是不加密的,scp
是 rcp
的加强版。
scp [可选参数] file_source file_target
参数说明:
-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)的选项
# 复制文件
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
# 复制文件夹
scp -r local_folder remote_username@remote_ip:remote_folder
应用实例:
#复制文件
scp /home/space/music/1.mp3 [email protected]:/home/root/test/music
#复制文件夹
scp -r /home/space/music/ www.test.com:/home/root/test/
从远程
复制到本地
,只要将从本地复制到远程的命令的后2个参数调换顺序
即可,如下实例
应用实例:
#复制文件
scp [email protected]:/home/root/test/music /home/space/music/1.mp3
#复制文件夹
scp -r www.test.com:/home/root/test/ /home/space/music/
将a目录用gzip
打包,tar zcvf a.tar.gz a
将a目录用bzip2
打包,tar jcvf a.tar.bz2 a
$ls
main.c Makefile
$tar -zcvf foo.tar.gz main.c
$ls
main.c Makefile foo.tar.gz
$tar -jcvf foo.tar.bz2 main.c
$ls
main.c Makefile foo.tar.gz foo.tar.bz2
解压gzip
包,tar zxvf a.tar.gz
解压bzip2
包,tar jxvf a.tar.bz2
$ls
foo.tar.gz foo.tar.bz2
$tar -zxvf foo.tar.gz
$ls
main.c foo.tar.gz
$rm main.c
$tar -jxvf foo.tar.bz2
$ls
main.c foo.tar.gz foo.tar.bz2
在Linux
系统中使用的Ext
文件系统中,支持文件的权限,用ls -l
查看当前目录的文件权限。
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
由图中我们可以看出这两个文件的权限是不一样的:
最前边的一位,可以看出backup/
的前边有一个d
,这代表它是一个目录
,a.out
和chess.c
为一个-
,这说是它们是普通文件
后边有三位代表文件所有者的权限,分别为可读
,可写
,可执行
,这说明a.out
为一个可执行文件,chess.c
为一个不可执行文件。
随后的三位表示同组用户
所拥有的权限,最后的三位表示其它用户
所拥有的权限。
可以使用chmod who +|-|= 文件名
来改变权限。
who
可以是下述字母中的任一个或者它们的组合:u
表示文件或目录的所有者; g
表示同组用户;o
表示其它用户;
a
表示所有用户mode
的常用权限为以下几个:r
可读 , w
可写, x
可执行
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chmod -x a.out
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
在chmod
后边可以加上数字,000
即代表不可读
,不可写
,不可执行
011
则代表不可读,可写,可执行。用二进制进行转换011为3
,所以用chmod 333 a.out
就可以将a.out
的变为–rx-rx-rx
权限。
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chmod 333 a.out
$ls –l
--wx-wx-wx 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
更改某个文件或目录的所有者,这个命令是很常用的,例如root
用户把自己的一个文件拷贝给用户akaedu
,为了能让用户akaedu
存取这个文件,root
用户应该把这个文件的所有者设为akaedu
,否则,akaedu
无法存取这个文件。
例如把一个文件改为akaedu
用户所有
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chown akaedu chess.c
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 akaedu ymqqqqdx 3681 2011-09-02 17:49 chess.c
find
在目录中搜索文件,使用find
命令
$find . -name 'chess.\*'
./chess.c
在指定文件中搜索特定内容,并将含有这些内容的行输出到标准输出。若不指定文件名
,则从标准输入
读取。
$grep 'printf' ./ -R
./chess.c:30: printf("\n ");
./chess.c:32: printf(" %d", i + 1);
./chess.c:33: printf("\n");
./chess.c:35: printf(" -");
./chess.c:36: printf("\n");
./chess.c:39: printf("%d ", i + 1);
./chess.c:42: printf(" %d", chessboard[i][j]);
./chess.c:44: printf("\n");
./chess.c:115: printf("current: p1: %d, p2: %d.\n", p1, p2);
./chess.c:126: printf("Welcome!\n");
./chess.c:127: printf("Input link this, 3 3\n");
./chess.c:131: printf("Player %d: ", who);
./chess.c:140: printf("Board full!\n");
./chess.c:143: printf("Current step: %d\n", step);
./chess.c:146: printf("out of range or place
occupied!\n"
新版本的Linux
发行版大多支持自动挂载U
盘分区,默认的挂载位置为/media/卷名
,但是如果发生问题不能自动挂载,所以要介绍U
盘的手动挂载。
$ls /dev/sd\*
/dev/sda /dev/sda2 /dev/sda5 /dev/sda7 /dev/sda9 /dev/sda1 /dev/sda3 /dev/sda6 /dev/sda8
插入U盘后
$ls /dev/sd\*
/dev/sda /dev/sda2 /dev/sda5 /dev/sda7 /dev/sda9 /dev/sda1 /dev/sda3 /dev/sda6 /dev/sda8 /dev/sdb /dev/sdb1
我们发现这里多了一个sdb
和一个sdb1
,这就是我们的U盘。
$mount /dev/sdb1 /mnt
$cd /mnt
$ls
file1 file2 .. .
这样就将U
盘挂载到了/mnt目录
下,对/mnt目录
的操作就可以读写U盘上的文件
df
用来检查文件系统的磁盘空间占用情况,可以利用该命令来获取硬盘被占用了多少空间,日前还剩下多少空间等信息。
$df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda8 15480816 3693868 11000568 26% /
none 1024060 332 1023728 1% /dev
none 1028300 1460 1026840 1% /dev/shm
none 1028300 104 1028196 1% /var/run
none 1028300 0 1028300 0% /var/lock
none 1028300 0 1028300 0% /lib/init/rw
/dev/sda9 15472768 11540932 3145860 79% /home
/dev/sda1 52428796 15280160 37148636 30%
/media/7CE619AAE6196624
/dev/sda2 62915580 2578292 60337288 5% /media/New Volume
/dev/sda5 101448700 55005980 46442720 55% /media/Entertainment
/dev/sda6 62918652 519376 62399276 1% /media/New Volume
du
用来统计目录或文件所占用磁盘空间的大小,du
意为disk usage
使用du -s
可显示当前目录所占用的空间总大小。
$du –s
1697668 .
$ps
PID TTY TIME CMD
2575 pts/2 00:00:00 bash
4190 pts/2 00:00:00 ps
ps -a
显示终端上的所有进程,包括其他用户的进程
$ps –a
PID TTY TIME CMD
1753 pts/0 00:00:00 tig
3640 pts/1 00:00:13 vi
4207 pts/2 00:00:00 ps
ps -u
查看进程所有者及其他一些详细信息
$ps –u
USER PID %CPU %MEM VSZ RSS TTY STAT
START TIME COMMAND
ymqqqqdx 1563 0.0 0.1 6488 3664 pts/0 Ss 00:01 0:00 bash
ymqqqqdx 1753 0.0 0.0 4092 1492 pts/0 S+ 00:03 0:00 tig
ymqqqqdx 1801 0.0 0.1 6492 3668 pts/1 Ss 00:04 0:00 bash
ymqqqqdx 2575 0.0 0.1 6492 3656 pts/2 Ss 00:30 0:00 bash
ymqqqqdx 3640 1.0 0.3 13164 6340 pts/1 S+ 01:19 0:14 vi 1.11.md
ymqqqqdx 4226 0.0 0.0 2716 1072 pts/2 R+ 01:42 0:00 ps -u
ps -x
显示没有控制终端的进程
$ps –x
1356 ? Sl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
1374 ? Ssl 0:00 gnome-session
1405 ? Sl 0:30 /usr/bin/ibus-daemon --xim
1409 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-s
1412 ? S 0:00 /usr/bin/dbus-launch --exit-with-session gnome-sessio
1413 ? Ss 0:01 /bin/dbus-daemon --fork --print-pid 5 --print-address
1416 ? S 0:00 /usr/lib/libgconf2-4/gconfd-2
1417 ? S 0:00 /usr/lib/ibus/ibus-gconf
1419 ? S 0:11 python /usr/share/ibus/ui/gtk/main.py
1421 ? S 0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
1423 ? S 0:21 python /usr/share/ibus-table/engine/main.py --ibus
1435 ? Ss 0:02 /usr/lib/gnome-settings-daemon/gnome-settings-daemon
1438 ? S 0:00 /usr/lib/gvfs/gvfsd
1445 ? Sl 0:02 gnome-power-manager
1446 ? SL 0:00 nm-applet --sm-disable
1447 ? S 0:00 /usr/lib/policykit-1-gnome/polkit-gnome-authenticatio
1449 ? S 0:00 bluetooth-applet
1451 ? S 1:16 /usr/bin/compiz
直接输入ifconfig
即可查看网络的IP
,网关和子网掩码
$ifconfig
eth0
Link encap:以太网
硬件地址 00:26:9e:27:21:1e
inet 地址:192.168.0.4
广播:192.168.0.255
掩码:255.255.255.0
inet6 地址: fe80::226:9eff:fe27:211e/64
Scope:Link UP BROADCAST RUNNING MULTICAST
MTU:1500 跃点数:1 接收数据包:5456 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:1380 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000
接收字节:1139542 (1.1 MB) 发送字节:244972 (244.9 KB)
中断:17
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
设置IP地址和子网掩码。
$ifconfig eth0 192.168.0.1 netmask 255.255.255.0
netstat
是一个监控TCP/IP
网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息.Netstat
用于显示与IP、TCP、UDP和ICMP
协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat -a
可以显示所有的socket
netstat -tunlp | grep “5789”
查看5789
端口的的连接。
$netstat -tunlp| grep "5789"
unix 3 [ ] 流 已连接 5789 /var/run/acpid.socket
lsof -i:端口号
用于查看某一端口的占用情况,比如查看8000
端口使用情况,lsof -i:8000
# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lwfs 22065 root 6u IPv4 4395053 0t0 TCP *:irdmi (LISTEN)
在我们的当前目录下有一个可执行文件,它的作用是打印出hello world!
,我们执行一下:
$ls
hello.c hello
$hello
hello: 找不到命令
$./hello
hello world!
想一下,为什么我们执行ls的时候就可以执行,而要执行hello
的时候就必须要加上./
呢?
我们先用which
命令看一下ls
这个文件在哪里存放:
$which ls
/bin/ls
在我们没有告诉系统完整路径时,系统会在一个名为PATH
的的环境变量所存的路径下去找这个文件,我们用env
打印当前的环境变量看一下:
$env
...
DESKTOPSESSION=gnome
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
QTIMMODULE=xim
PWD=/home/ymqqqqdx
XMODIFIERS=@im=ibus
...
我们找到PATH
项可以看到/bin
在这个环境变量中,所以我们输入ls
后,系统会到这个目录下去寻找。
如果我们要把hello
所在的目录也添加到PATH
里面,是不是直接输入hello
就可以直接运行我们这个程序了呢?
下面我们来试一下:
pwd
/home/ymqqqqdx
export PATH=/home/ymqqqqdxhello
hello world!
ls
ls: 找不到命令
这是怎么了?怎么连ls都找不到了呢?
我们上面把PATH
设置为了/home/ymqqqqdx/
,而这个目录下没有ls
,所以系统就报错了。不要急,我们重新启动一下终端就好了。
正确的做法是这样的:
$export PATH=$PATH:/home/ymqqqqdxhello
hello world!
ls
hello.c hello
由上面的例子我们可以看出,我们做的修改在关闭终端后没有保存,怎么才能将我们做的修改保存起来呢?
修改~/.bashrc
:
$gedit ~/.bashrc
此时我们用gedit
打开了这个文件,到这个文件的最下方,添加我们上面输入的export PATH=$PATH:/home/ymqqqqdx
,然后保存退出。
这时我们重启一下终端,终端就会按着这个脚本顺序执行,把我们的路径添加到了环境变量之中。
yum install softwarename 安装
yum repolist 列出设定yum源的信息
yum remove softwarename 卸载
yum list softwarename 查看软件源中是否有此软件
yum list all 列出所有软件名称
yum list installd 列出已经安装的软件名称
yum list available 列出可以用yum安装的软件名称
yum clean all 清空yum缓存
yum search softwarename 根据软件信息搜索软件名字
yum whatprovides filename 在yum源中查找包含filename文件的软件包
yum update 更新软件
yum history 查看系统软件改变历史
yum reinstall softwarename 重新安装
yum info softwarename 查看软件信息
yum groups list 查看软件组信息
yum groups info softwaregroup 查看软件组内包含的软件
yum groups install softwaregroup 安装组件
rpm -ivh # 安装一个包
rpm -Uvh #升级一个包
rpm -e #移走一个包
##安装参数
–force #即使覆盖属于其它包的文件也强迫安装
–nodeps #如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
rpm -q < rpm package name> #查询一个包是否被安装
rpm -qi < rpm package name> #得到被安装的包的信息
rpm -ql < rpm package name> 列出该包中有哪些文件
rpm -qf #列出服务器上的一个文件属于哪一个RPM包
rpm -qil < rpm package name> #可综合好几个参数一起用
rpm -qa #列出所有被安装的rpm package
rpm -qilp < rpm package name> #列出一个未被安装进系统的RPM包文件中包含有哪些文件
rpm -qa | grep 包名
这个命令是为了把包名相关的包都列出来
rpm -e 文件名
这个命令就是你想卸载的软件,后面是包名称,最后的版本号是不用打的
例如:
# rpm -qa | grep mysql
mod_auth_mysql-2.6.1-2.2
php-mysql-5.3.9-3.15
mysql-devel-5.1.77-1.CenOS 5.2
mysql-5.0.77-1.CenOS 5.2
mysqlclient10-5.0.77-1.CentOS 5.2
libdbi-dbd-mysql-0.6.5-10.CentOS 5.2
# rpm -e mysqlclient