Linux

来源:互联网 发布:下载picsart软件 编辑:程序博客网 时间:2024/06/05 19:29

Linux应用基础

 

一、Linux的历史和文化

二、Linux系统结构及文件类型

三、Linux系统基础命令和常用工具

 

 

一、Linux的历史和文化

1.1  linux系统的诞生

Linux系统在1992年由芬兰大学生Linus Torvalds首先发布,后经过全世界的电脑爱好者不断补充和壮大,形成一个具有完整功能的操作系统内核。严格的说linux并不是一个完整的操作系统,只能说是一个操作系统内核(core), 即完成操作系统的5大功能:处理机管理、存储管理、设备管理、文件管理 和 进程管理。
作为一个完整的操作系统,除了系统内核外,还需要底层应用程序库、系统管理工具和系统操作命令等等。在linux内核诞生时,正好GNU有这么一套系统,GNU是由Richard Stallman创立的一个自由软件组织,目的是创立一个和传统UNIX系统兼容的系统,GNU的操作系统内核叫Hurd,但是Hurd并没有吸引开发者的注意,迟迟没有发展起来,而GNU的外围系统却发展迅速,此时linux内核和GNU的外围系统正好凑到一块儿,组成了GNU/Linux, 我们平时说的Linux系统就是指GNU/linux,即GNU的外围系统加linux内核的组合。

 

1.2  linux系统发行版

GNU/linux (以下简称linux)是一套自由软件系统,因此任何人都可以自己发行编译属于自己的版本,因此linux出现了很多发行版,不同的linux发行版在系统管理工具、系统配置文件的存放路径上有所不同,但基础命令、操作方式、管理思想等等都是相同的。 目前全世界大概有300多个linux发行版,但常见的比较著名的linux发行版是redhat系、和debian系linux发行版。Redhat系的linux发行版以美国红帽子公司的linux发行版为基础衍伸开来,系统软件包管理工具、系统配置工具以及配置文件的存放路径和组织方式均和redhat系统相同,redhat系的linux发行版以RPM包为软件包管理工具,yum为软件升级、在线安装工具,debian系的linux则以deb包围软件包管理工具,apt-get为软件升级、在线安装工具。

 

常见的redhat系linux有 Redhat、fedora、CentOS、SuSE等

常见的debian系linux有 Debian、Ubuntu、Knoppix 等

 

还有一些比较古老的linux发行版,其软件管理方式和系统布局自成一体,即不基于redhat也不基于debian,比如slackware linux 。

 

1.3  UNIX和linux的关系

最初的UNIX是由

美国电话及电报公司(AT&T)

通用电器公司(GE)

麻省理工学院(MIT)

贝尔实验室(BellLabs)

合作开发的一个多任务多用户的操作系统,最初叫MULTICS,后来贝尔实验室的人退出项目后,在该项目的基础上,编写了最初的UNIX系统,后来UNIX系统几经分化和发展,演变成多个系统,因此UNIX系统不是一个特定的系统,而是对符合UNIX系统标准的并由open group授权的系统的统称。目前常见的UNIX系统有IBM公司的AIX、惠普公司的HP-UX和Sun公司的Solaris。 GNU/Linux最初的设计思路参考和模仿了UNIX系统,因此linux的基础系统命令、管理方法、管理思想和系统分区布局等等都和UNIX非常类似,因此linux被称为UNIX类系统(UNIX Like System)。 常见的UNIX类系统还有freebsd,目前在服务器领域也有广泛应用。

 

二、linux系统结构

2.1 系统分区和文件系统

Windows的文件系统是以C:盘 D:盘这种方式访问的,而linux是在根分区(root分区)的基础上,再在根分区的目录中挂载(mount)其他分区的方式访问的

Windows的分区方式:

Windows系统每个分区都有独立的入口,以字母标示

 

 

Linux的分区和文件系统组织方式:

Linux的分区由目录表示,由根分区中的某几个目录作为目录,把一个分区和根分区上的一个目录联系起来,把该目录作为该分区的入口的过程叫做挂载分区(mount)。系统分区是在系统启动的时候自动挂载的,比如/tmp /usr/var等等,用户可以自定义分区,通过mount命令手动挂载,也可以让自定义分区自动挂载。 分区的数量并不是一定的,比如有人不想分那么多分区,那么可以直接只用一个跟分区,那么所有的文件其实全部装在根分区上,根分区上的入口目录,就是真正的目录,而不是通往另一个分区的入口了。

 

2.2 系统布局

bin            存放系统基础命令

boot           存放系统内核和系统引导相关的文件

dev            存放系统设备文件

etc             存放系统配置文件

home           存放系统普通用户的文件

lib             存放系统基本库文件

lib64           存放系统基本库文件(64位)

lost+found      文件系统错误时,存放系统修复后重新获取的碎片文件

media          光盘、软盘等等的挂载目录

misc           杂项存放目录

mnt            临时挂载目录

opt            optional 备用目录,可以挂载分区,也可以把大型软件安装在这个目录

proc           存放进程相关信息

root            超级用户(root)的home目录

sbin            存放超级用户super user专用的基础命令

selinux          selinux相关的目录

srv             该目录存放一些服务启动之后需要提取的数据

sys             系统硬件相关的信息

tmp            临时文件存放目录

usr             系统中各种软件、程序等等的存放目录

var             日志文件存放目录

 

/usr目录下的子目录

bin            更多的普通用户可用的系统命令和软件

etc            用户自定义安装的软件的配置文件存放目录

games         小游戏

include        C/C++头文件

kerberos       kerberos认证系统相关的文件

lib            更多的系统系统软件动态库

lib64          更多的系统系统软件动态库(64位)

libexec        可供其他可执行程序调用的程序

local          用户自定义安装或编译安装软件的默认目录

sbin           存放超级用户super user专用的基础命令

share          存放图片、命令使用手册、说明文档等等

src            系统软件源代码目录

tmp           临时文件存放目录

 

2.3 linux系统中的7种文件

所有的UNIX类系统中都有7中文件类型

a)      普通文件

b)     目录

c)      符号链接

d)     字符设备文件

e)      块设备文件

f)      管道文件

g)     Socket文件

 

Linux中同一个普通文件可以有多个文件名(硬连接)

 

 

如图所示,在linux文件系统中,每个文件对应一个唯一的一个inode,inode中存放有关文件拥有者、文件权限、修改和访问日期以及一个指向文件实体的指针。在同一个文件系统中,可以有多个文件名指向一个Inode,所以在linux系统中,同一个文件可以有多个文件名。当需要删除文件时,必须将所有的文件名删除,才能彻底删除文件。

 

为一个文件创建不同的文件名,可以用ln 命令(link):

原文件名filename1

ln filename1 filename2

ln filename1 filename3

ln filename1 filename4

这样文件便有了filename1filename2 filename3 filename4  这四个文件名

 

请注意,不能对目录创建硬链接,即目录只能有一个目录名,另外硬链接只能创建在同一个文件系统上(可以简单理解为同一个分区上),不能夸文件系统创建硬链接。

 

TIP:文件系统和分区不是同一个概念,一个文件系统可以跨多个分区,文件系统所占用的空间也可以小于一个分区。

 

如果要夸文件系统创建连接,只能创建软连接,软连接又叫符号连接,符号连接和windows系统中的快捷方式类似。

符号连接:

 

创建符号连接也用ln命令,所不同的是加上-s参数

可以为一个文件创建一个活多个符号连接:

ln –s filename1 filename2

ln –s filename1 filename3

 

也可以为符号连接创建符号连接,即多级指向,即为快捷方式创建快捷方式:

ln –s filename1 filename2

ln –s filename2 filename3

 

 

硬链接 VS 符号连接

 

硬链接不能夸文件系统,符号连接可以

对目录不能做硬连接,符号连接可以

 

三、Linux系统基础命令和常用工具

 

3.1 linux SHELL介绍

什么是SHELL程序?

Shell是操作系统和系统内核之间的桥梁,系统命令和工具通过SHELL调用并传递给内核运行。Linux系统层次结构以及SHELL和外围命令的关系图:

 

常见的SHELL有sh , bash, csh, ksh等等

Linux中的默认shell是bash

Bash是一个功能强大的命令解析以及执行SHELL,支持TAB键命令补全。

 

3.2 最常用的linux命令和命令参数:

ls    (list)

ls

显示当前目录下的文件以及子目录名称

ls -l

以详细列表方式显示当前目录下的子目录名称

ls /app

显示/app目录下的文件以及子目录名称

ls –l /app

以详细列表的方式显示/app目录下的文件以及其子目录名称

ls –a

显示隐藏文件,linux中以点“.”开头的文件为隐藏文件,默认不显示,要显示点开头的文件,需要ls命令的-a 参数

ls –R

递归显示当前目录以及子目录的所有文件

ls -1

以一行一个文件名的形式显示文件和目录简单列表

ls –hl

以可读方式显示文件大小

 

命令参数可以组合使用,比如:

ls –la

ls –Rla

以上只是ls的最常用参数,更多获取更多参数信息和帮助信息,可以在命令行下输入

man ls

即表示查看ls命令的手册,man是manual手册的简称。

ls –l参数显示文件详细列表时,可以看到一系列信息,如ls –la /tmp看到如下文件列表:

可以看到除了两个特殊的文件testdev和testdev2外,这些文件信息分为8列,含义依次为文件权限,文件节点数,文件拥有者,文件拥有组,文件大小,文件创建日期,文件创建时间,文件名

重点讲权限的组成形式:

权限列共有10个字符组成,第一个字符代表文件类型,后面九个字符以3个字符为一组,代表文件所拥有的权限。

第一个字符:-,d,p,c,b,s,l分别代表普通文件、目录、管道文件、字符设备文件、块设备文件,UNIX套接字文件和符号连接文件,这7种不同的文件类型。

 

后九个字符的第一组3个字符表示文件拥有者(owner)对这个文件具有的权限,

r  ——如果这一位有设置,则表示文件的拥有者对这个文件有读取权限

w ——如果这一位有设置,则表示文件的拥有者对这个文件有写入权限

x ——如果这一位有设置,则表示文件的拥有者对这个文件有可执行权限

 

第二组3个字符表示文件的拥有组对这个文件具有的权限

r  ——如果这一位有设置,则表示文件的拥有组对这个文件有读取权限

w ——如果这一位有设置,则表示文件的拥有组对这个文件有写入权限

x ——如果这一位有设置,则表示文件的拥有组对这个文件有可执行权限

 

第三组3个字符其他人对这个文件具有的权限

r  ——如果这一位有设置,则表示文件的其他人对这个文件有读取权限

w ——如果这一位有设置,则表示文件的其他人对这个文件有写入权限

x ——如果这一位有设置,则表示文件的其他人对这个文件有可执行权限

 

ls -1第二列的数字,如果是目录,则表示这个目录所包含的子目录数量

如果是目录以外的其他类型文件,则表示这个文件的文件名数量(硬链接数量)

 

第三第四列分别表示文件的拥有者(owner)和拥有组(group)

 

第五列表示文件大小,默认以字节表示,可以用ls –lh 显示可读化的文件大小,h参数的含义是humanreadable (人类可读的、人类易读的)

 

后面是时间和日期,时间和日期,这两个字段会随着LANG LC_ALL等本土化相关变量的不同而显示不同的内容,如果安装了中文环境也会显示中文,如果是纯英语环境,日期还会以三个字母简写的形式表示月份

 

最后一列是文件名

 

如果是设备文件,则第五第六字段表示该设备的类型,前一个数字表示大类,后一个表示小类。

 

cd (change directory)

cd

回到自己的home目录

cd /var

把当前工作目录,切换到/var目录

 

cat  (concatenatefiles and print on the standard output )

cat filename

将文件的内容输出到屏幕上

cat filename1 filename2 > filename3

将文件1和文件2合并成文件3

cat >testfile <<EOF

this is a test file

EOF

创建一个名叫testfile的简单文件,内容是this is a test file

 

chmod (change mode of the file)

chmod u+x filename

给filename加上文件拥有者可执行的权限

chmod g+w filename

给filename 加上文件拥有组可写的权限

chmod o+w filename

给其他人加上可对这个文件写的权限

 

如果要去除权限,把加号(+)换成减号(-)

chmod u-x filename

chmod g-w filename

chmod o-w filename

 

u\g\o分别表示user\group\others, 可以组合使用

chmod og+w filename

chmod uo-wx filename

 

可以用a表示全部(all)

chmod a-x filename

 

可以用数字表示设置权限位:

chmod 755 filename

chmod 644 filename

chmod 777 filename

 

chown (change ownner)

chown mysql filename

把filename的拥有者设置成mysql

chown mysql:mysql filename

把filename的拥有者和拥有组设置成用户mysql和用户组mysql

chown –R mysql:mysql dirname

把目录dirname下的所有文件和子目录的文件拥有者和拥有组设置成mysql和mysql.

除了rwx权限外,还有一些特殊权限比如(t)粘滞位,和(s)允许程序内部运行setuid调用,从而让程序在运行过程中改变执行权限。

 

cp   (copy)

cp filename1 filename2

把文件filename1 拷贝一份filename2 ,请注意文件拷贝和对文件做硬链接的区别,硬链接只拷贝指向文件inode的节点指针,他们指向同一个文件实体,而cp则会复制文件实体。

cp –R dirname1 dirname2

如果要拷贝目录则需要参数R

cp –Rp dirname1 dirname2

把dirname1下的所有文件和子目录拷贝到dirname2下,并且保留权限(permision)

 

date (date)

显示和修改日期

date

显示日期

date "+%Y%m%d %H:%M:%S"

以特定格式显示日期 (20120518 12:27:26)

date 05181227

设置日期为5月18日,12点27分

 

df  (disk free usage)

df

显示当前磁盘分区和空间使用情况

df –h

以易读方式显示当前磁盘分区和空间使用情况

 

echo (echo print something on screen)

echo “hello,world”

将hello,world打印到当前屏幕

echo “hello,world” > filename

将hello,world打印到文件filename,即创建一个文件叫filename,内容含hello,world

 

env (environment)

env

显示当前环境变量

 

ln (link)

ln filename1 filename2

为filename1创建硬链接filename2

ln –s filename1 filename2

为filename1创建符号连接filename2

 

mkdir (make directory)

mkdir dir1

在当前目录创建一个目录叫dir1

mkdir dir1 dir2 dir3

创建三个目录dir1,dir2,dir3

mkdir –p dir1/dir2/dir3

在当前目录下创建目录dir1,然后再dir1下创建dir2,再在dir2下创建dir3

 

mv    (move)

mv filename1 filename2

将文件名filename1改成filename2

mv filename1 /var/tmp/

将文件filename1 移动到/var/tmp下,移过去后,文件名还是filename1

mv filename1 /var/tmp/filename2

将文件filename1 移动到/var/tmp下,移过去后,文件名改成filename2

mv –i filename1 filename2

要求确认(interactive),如果目标文件名冲突,则会提示,要求确认是否覆盖

mv –f filename1 filename2

强制(force)执行操作,就算有冲突,也直接覆盖

 

pwd  (print working directory)

pwd

显示当前工作目录(currentworking directory)

 

rm   (remove)

rm filename

删除文件

rm –i filename

删除前要求确认

rm –f filename

删除前强制执行,不需要确认

rm –r dirname

递归删除目录dirname下所有文件和子目录

rm –rf dirname

强制删除所有文件和子目录

 

rmdir (removedirectory)

rmdir dirname

删除一个空目录,rmdir删除的目录必须是空目录,不含子目录和文件,功能相当于rm –rfdirname

 

touch (touch)

touch filename

如果filename存在,则把filename的访问时间时间、修改时间 修改为当前时间,如果filename不存在,则创建一个空文件

touch -t 04151123 filename

将filename的修改时间、访问时间修改为 4月15日11点23分

 

du  (disk usage)

du –sh

计算当前目录下所有文件和子目录所占用的空间

du –sk /tmp

计算/tmp目录占用的空间,并以KB的形势显示占用空间大小

 

head (head)

显示一个文本文件的开头几行(默认显示5行)

head file1

显示file1的开头5行

head -30 file1

显示file1的开头30行

 

tail  (tail)

tail file1

显示file1的最后5行

tail -100 file1

显示file1的最后100行

tail –f file1

动态的显示file1的最后几行,即如果file1是被另一个程序在不断写入数据的,则tail –f file1可以动态的把最后几行显示出来,写入几行,显示几行。

tail –f file1可以由一个专用的命令tailf file1代替,tailf 是对tail –f 的优化,可以提高速度,减少系统资源占用。

 

nohup (no hang up)

nohup program&

当退出当期命令行时,保持program命令继续执行,而不会因为退出了当前名利行而退出命令。

 

TIP:如果在当前命令行下执行命令时,所有命令都是当前SHELL的子程序,当当前SHELL退出时,子程序会退出,这时可以用nohup运行命令,防止子程序退出执行。 有些程序内部具有后台执行的功能,即便当前shell退出,程序也不会退出。

nohup的替代工具是screen , 比nohup好用,需要保持屏幕输出,并实时查看的情况,可以用screen命令。

 

stat (state)

stat filename

显示filename的状态

 

tr (translator)

echo "abc123" |tr -s 'a-z' 'A-Z'

把字符串abc123中的小写字母全部替换成大写字母

 

uniq

uniq filename

如果filename中有重复的行,则过滤掉重复的行,只显示内容不重复的行

 

wc  (word count)

wc filename

统计filename的字节数、行数和段落数

wc –l filename

统计filename的行数

 

who (who am I )

who

显示当前是以什么用户的身份登录的

 

which (which someprogram located in ?)

which ls

查找ls命令在拿个目录中,which 只根据当前PATH变量查找可执行文件,和find命令有本质不同。

 

find (find)

find /var –name filename

在/var路径下查找一个文件名叫filename的文件

find /var –name “file*”

在/var路径下查找一个文件名含file的文件

 

grep (find stringsin text file)

grep test filename

在filename中查找含test字符串的行

grep –c test filename

在filename中统计含有test字符串的行数

grep –n test filename

在filename中查找含test字符串的行并显示行数

 

ssh (secure shell)

ssh 10.0.0.1

以当前用户名登录到服务器10.0.0.1

ssh user1@10.0.0.1

以远程服务器上user1的身份登录服务器

 

scp (secure copy)

scp filename 10.0.0.1:/tmp/

将filename拷贝到10.0.0.1的/tmp目录下

scp –rp dirname 10.0.0.1:/tmp/

将目录dirname拷贝到10.0.0.1的/tmp目录下

 

netstat (network status)

netstat –na

查看当前所有网络连接

netstat –nat

查看当前的所有TCP连接

netstat –ntl

查看当前打开监听正在接受外接连接的网络接口

netstat –ntlp

查看当前打开监听正在接受外接连接的网络接口并显示哪个程序打开了该端口

 

netstat –r

查看当前系统静态路由

 

route (show routestatus)

route

查看当前路由表 ,相当于netstat –r

route –n

不解析域名,直接显示IP,相当于netstat –nr

route add –net 10.18.0.0/24gw 10.0.0.1

添加一条到网络10.18.0.0/24的静态路由,所有目标地址为10.18.0.0/24的数据包都通过10.0.0.1转发

 

 

ifconfig (interfaceconfig,)

ifconfig

显示当前活动网卡的IP等信息

ifconfig –a

显示所有网卡的IP等信息

ifconfig eth0

显示网卡eth0的IP信息

ifconfig eth0 192.168.0.10 netmask255.255.255.0 up

设置网卡eth0的IP地址为192.168.0.10,掩码为255.255.255.0,这种设置只在当前生效,系统重启后会失效,如果要永久设置IP地址,需要写入配置文件。

 

free (free memory)

free

查看当前内存使用情况

free –m

以MB的单位显示当前内存使用情况

 

pkill (program kill)

pkill program

给program进程发送一个TERM信号让program退出运行

pkill -9 program

杀死program进程,强制其停止运行

 

kill (kill running program by pid)

kill 20198

发动一个TERM信号给进程号为20198的进程

kill -9 20198

发送一个KILL信号给进程号为20198的进程,强心使其退出

 

top (top CPU usage)

top

查看当前占用CPU和内存最多的进程

 

uptime (system uptime)

uptime

查看系统开机时间 who –b可以查系统从何时开始开机

 

vmstat ( virtual machine status)

vmstat 1

每间隔1秒打印一次当前系统资源状态

 

reboot (reboot system)

reboot

立即重启系统

 

shutdown (shutdown system or reboot system)

shutdown –h now

立即关闭系统

shutdown –r now

立即重启系统

 

yum  (yellow dog update method)

yum search packagename

查找包含packagename的软件包

yum install packagename

安装软件包packagename

 

rpm (redhat program manager)

rpm –ivh xxxx.rpm

安装一个rpm软件包

rpm –e xxxx

删除一个软件包

rpm –Uvh xxxx.rpm

对软件包xxxx进行升级

 

3.3 vi \vim\sed\awk简介

 

 

原创粉丝点击