Linux基本知识与基础文件操作命令
一、简易历史
linux最初由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds, 1969年~ )于1991年第一次向外公布,其logo是一只被成为Tux的企鹅(不是qq那只)
操作系统,英语Operating System简称为OS。说道操作系统就需要先讲一讲Unix,UNIX操作系统,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。而linux就是一款类Unix系统。
通常人们对linux都有一个错误的认识,就是这个名词"linux操作系统",其实linux不是操作系统,linux是一个内核,linux系统构成包括:、Linux 内核、GNU 项目及其他项目的软件。当然,但人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds, 1969年~ )
二、基本概念
2.1 思想
Linux是一种开源,类Uinx的操作系统
对于Linux,有两个基本思想:1.一切皆文件 2.每个文件都有确定用途
相对于第一点来说,系统中所有,都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
2.2特点
由于Linux是完全开源的操作系统内核,所以Linux支持个人去定义几乎所有的软件和操作,由此也引申出很多Linux版本分支。Linux支持多用户,且每个用户都有自己的权限。保证用户之间不互相影响,由于权限制度非常严格,也在一定程度上保证了系统的安全性。Linux可以在多平台架构上运行,并且还是一种嵌入式操作系统,可以运行在机顶盒,游戏主机,物联网控制版等平台。因为是完全开源,你甚至可以完全修改大部分内容,而达到新的效果。andioid 就是基于Linux所创造的操作系统,目前已经大面积应用于手机电视等部分智能平台。
Linux基本分支图
三、文件结构与类型
3.1文件结构
liinux文件结构为树状结构,与windows略有不同。windows以盘符来区分每块硬盘或分区,每个硬盘和分区都有独立的盘符和根目录。而Linux对于分区和硬盘Linux采用挂载到目录的方式来读写,所以无论有几个分区,或者有几块硬盘,linux都只有一个根根目录,不受分区和硬盘的影响。即使是U盘读取,同样也是先挂载到目录下。
Linux基本文件树状图
/:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
/bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。
/usr
这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具
/usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面(例如Nginx只能编译安装,所以通常都放在/usr/local)。
/usr/share :系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
/sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。
/etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。
/tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
/lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。
/var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/ www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地。
/home:如果建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。
/dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
/boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
/media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。
(以下几个上图中没有,但是在系统中通常都会有,各个发行版可能有一定差异)
/lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
/mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。
/opt:这里主要存放那些可选的程序。
/proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。
/root:Linux超级权限用户root的家目录。
/selinux :对SElinux的一些配置文件目录,SElinux可以让linux更加安全。
/srv 服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www中
3.2文件类型
普通文件(regular file):就是一般存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为:
1、纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设 置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。
2、二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。
3、数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。
目录文件(directory):就是目录,第一个属性为 [d],例如 [drwxrwxrwx]。
连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。
设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:
块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。
套接字(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。
管道(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。
四、基本命令
4.1命令基本概念
Linux是类Unix的操作系统,所以最早期的Linux人机交互是采用命令的方式,并没有现在百花齐放的各种UI界面。其实,本质上来看,目前Linux最优的交互模式依然是命令交互,而不是图形化界面。命令的输入需要一个终端,在现今,大部分发行版都有图形化界面,在图形化基本界面(桌面)上,可以通过三种方式打开终端进行命令方式与电脑交互。通常都是使用Ctrl+Alt+t快捷键呼出终端窗口,从而进行交互。另一种则是Alt+F2,通常适用于只需要运行一条命令或运行软件使用。第三种比较特殊,对于Linux的运行方式而言,我们所使用的图形化界面本质上来说其实就是在一个终端上运行GUI,这个终端运行了GNOME、KDE或其他GUI才形成了桌面环境。而在桌面环境下运行的其他程序或应用,都是这个终端运行的一个进程。这里的这个终端和我们在桌面环境快捷键呼出的终端略不同,在系统中称作tty。等于开机后你所看的的界面,实际上是一个tty在运行,通常为tty1,你登陆之后可以进行不同操作(如果在桌面环境直接呼出终端是不需要再次登陆的,已经是登陆的状态)。所以第三种方法就是切换到其他tty,然后登陆,之后就可以正常交互,只是完全没有图形化界面只能使用命令交互。
接下来就可以使用命令与电脑交流了,命令这个次看起来有时候让人望而却步,但实际上这并没有那么复杂。就像我们先前说的,这是一种交互模式。那么其实他和图形化界面的本质就是在桌面环境下你或许可以动动鼠标,动动键盘,来完成你要做的事情。而命令交互实际上就是把你鼠标的操作,全部转到键盘上来。听起来很麻烦,但实际效率很高。因为如果你在桌面环境下,通常需要不断在键盘和鼠标之间切换的话,这实际上很烦。但是通过命令你的手就可以一直只在键盘上,不用再去到处挪动,那样会很累。
4.2基本的文件操作
在桌面环境下,我们对于文件的操作大部分都是可以通过鼠标来完成,那么如何将这些鼠标的操作用命令的方式来完成。这其实很简单,首先先来看一下需要用到的命令。
ls | 显示制定目录下的子目录和文件 |
ll | 与ls相同,会显示更多信息文件类型和隐藏文件 |
pwd | 查看当前所在目录 |
cat | 查看文件内容 |
cd | 更改当前工作目录或更该到制定路径(进入到某个目录) |
mkdir | 创建目录 |
mv | 移动文件或修改文件名 |
rm | 删除一个文件或目录 |
ls
语法:
ls [-alrtAFR] [name...]
参数:
- -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
- -d 只列出目录(不递归列出目录内的文件)。
- -l 以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。
- -r 倒序显示文件和目录。
- -t 将按照修改时间排序,最新的文件在最前面。
- -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
- -R 递归显示目录中的所有文件和子目录。
简单实例:
显示当前目录下所有文件
ls
显示当前目录下所有文件,包含隐藏文件(在linux中开头为“.“的文件是默认隐藏文件)
ls -a
显示/bin目录下所有文件
ls /bin
以上实例简单表示出了ls的使用,其他参数可以自行通过虚拟机来尝试。值得一提的是Linux的大部分命令的参数都是可以组合使用的,也可以结合通配符使用。还有一些可以多个命令组合使用
ll
ll和ls几乎是相同的,他所显示的内同和ls -l 是一样的。
pwd
显示当前所在路径
语法:
pwd [--help][--version]
参数详解:
--help 显示帮助
--version 显示版本信息
实例:
cat
查看文件内容
语法:
cat [option] [fileName]
参数说明:
-n
:显示行号,会在输出的每一行前加上行号。-b
:显示行号,但只对非空行进行编号。-s
:压缩连续的空行,只显示一个空行。-E
:在每一行的末尾显示$
符号。-T
:将 Tab 字符显示为^I
。-v
:显示一些非打印字符。
简单实例:
cd
改变当前目录 切换到制定路径
语法:
cd [dirName]
切换到绝对路径
cd /path/to/directory
切换到相对路径
cd relative/path/to/directory
进入到 /usr/local 目录
cd /usr/local
此处有三个点需要提一下,他们是 “.”和“..” 。先前我们提到过,在Linux中一切皆文件,所以这三个点,也可以看作是一个文件,并且他们是文件夹。其中“.”表示的是当前目录,“..”表示的是上一级目录。在之前ls的使用当用我们用ls -a 来显示所有文件夹,包括隐藏文件,其实“.”和“..”这两个文件夹同样有显示
可以看到在ls -a 所显示的所有文件中,在最前面是可以看到这两个文件夹的
(我的终端将文件和文件夹用蓝色和黑色区分开,蓝色的为文件夹,而黑色的为文件。不同发行版和不同终端配置文件在于这方面的显示会略有不同,通常情况下,有颜色的为文件夹,而黑色字体的为文件)
所以,假设我们所在位置比较长,假设为 /usr/local/nginx/conf。 需要返回上一级目录的时候,我们就不需要再去cd /usr/local/nginx 而是,可以直接 cd ..
返回上一级目录
cd ..
在这个例子中,其实也可以看出来,所在目录是会在登陆用户后面显示的,但这是在桌面环境下的。如果在tty环境下,或者生产环境下的服务器可能不会显示(不同发行版可能不同)。与“..”相同的还有“~",“~”所指向的目录是用户所在home目录。一般用户的目录为 /home/username 而root用户为 /root
mkdir
创建目录
语法:
mkdir [-p] dirName
- -p 确保目录名称存在,不存在的就建一个。
创建一个目录(文件夹)
mv
移动文件或目录,修改文件名
语法:
mv [options] source dest mv [options] source... directory
参数说明:
- -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
- -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
- -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
- -n: 不要覆盖任何已存在的文件或目录。
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
基本实例:
修改文件名称
mv source_file dest_file
移动文件
mv source_file dest_directory