Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。 [1]
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,它还被当作服务器,甚至当作网络防火墙,这是Linux的一大亮点。 [2]
Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。 [3]
Linux的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
linux中的目录呈现树状结构,带有分支,也就是各级子目录,其作用就是存放文件,相当于Windows下我们所熟悉的文件夹,在linux下,安装完成后会创建一系列的目录,用于存放特定的文件。linux中的根目录为“/”,和Windows不同,没有盘符的概念。
索引节点inode
inode中文意思是索引节点,每个存储设备或存储设备的分区(存储设备可以是硬盘、U盘....)被格式化为文件系统后,都应该有两部分:一部分是inode,另一部分是Block。Block是用来存储数据用的。而inode就是用来存储这些数据信息的,这些信息包括文件大小、属主、归属的用户组、读写权限。
inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。
打个比方,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode就相当于这本书前面的目录,一本书有很多内容,如果想查找某部分的内容,可以先查目录,通过目录更快的找到我们想要看的内容。虽然不太恰当,但还是比较形象的。
123
inode值相同的文件是硬链接文件
在linux文件系统中,inode值相同的文件是硬链接文件。这也就是说,不同的文件名,inode的值可能是相同的,一个inode值可以对于多个文件。在Linux中,链接文件是通过ln命令来创建的。
#ln 源文件 目标文件 #注意:目标文件不需要提前创建
inode值相同的文件,可以把他们的关系看作互为硬链接的关系。当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,另外的硬链接并不受影响,既文件数据还在(当文件硬链接个数为0时,数据占用空间才会被释放回收)。
可以这样理解,互为硬链接关系的文件,具有相同的inode值,也就是说,对应的实际数据是同一份;
1234
特别提示:目录不能创建硬链接,只有文件才能创建硬链接。
软链接文件
创建软链接(也称为符号链接)的语法:
ln -s 源文件或目录 目标文件或目录
1
软链接也叫符号链接,它和硬链接有所不同,软链接文件(包含到源文件的路径位置等信息)。当我们删除了源文件后,软链接就不能独立存在了。虽然仍然会保留文件名(失效后查看时会是红色闪烁状),但我们却不能查看软链接的内容了。
当我们修改链接文件的内容时,就意味着我们在修改源文件的内容。此时源文件的属性也会发生改变,但软链接文件的属性并不会发生变化。
与硬链接不同的是,软链接对文件和目录都适用。无论是软链接还是硬链接,都相当于物件或目录,因此都可以用rm命令来删除。
123
linux中比较重要的目录:
/etc:用于保存系统数据文件,启动文件和脚本等
/bin:存放普通用户常用的命令
/sbin:存放系统管理常用命令
/boot:存放系统核心文件
/dev:存放与设备有关的文件
/lib:存放用于编译某些程序时要用的函数库
/usr: 用于存放用户安装的应用程序
/var:用于存放系统数据文件
/root:系统管理员(root用户)的“家”目录
/home:用于存放普通用户的“家”目录的目录
/media:用于系统自动挂载存储设备时(比如光驱、U盘)使用的目录
/mnt: 用于挂载设备时建议使用的目录(目前很多版本的linux都使用自动挂载,所以该目录很少用,被media取代)
123456789101112
路径:
绝对路径:写法一定是从根目录“/”开始。
相对路径:根据当前所处目录来表示目标目录。
“.”目录表示当前目录。
“…” 目录表示当期目录的上一层目录。
https://blog.csdn.net/u010859650/article/details/81675187
基名,路径的最右侧名称,/user/share/doc的基名 doc。
basename命令 取得路径基名。
dirname命令 除基名外的路径。
ls命令
列出指定目录下的文件。
常用参数:
1. ls [-aAdfFhilnrRSt] 目录名称
2. -l :以长格式显示文件的详细属性,包含档案的属性与权限等等数据;
3. -a :显示所有文件,包括隐藏文件。
4. -A :跟-a功能相同,但不显示.和..;
5. -d :仅列出目录本身,而不是列出目录内的文件数据;
6. -f :直接列出结果,而不进行排序 (ls 预设会以文件名排序!);
7. -F :根据档案、目录等信息,给予附加数据结构,
例如: *:代表可执行文件;
/:代表目录;
8. -n :列出 UID 与 GID 而非使用者与群组的名称;
9. -R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
10. -S :按照文件容量大小排序,而不是用文件名称排序;
11. -t :按照时间排序,而不是用文件名。
12. -h: 文件大小会自动进行单位换算;
13. -r:文件名逆序显示;
123456789101112131415
**ll命令 **
显示文件的信息,ll命令,本质就是ls -l
**pwd命令 **
显示当前工作目录
cd命令
进入目录
**mkdir命令 **
创建目录,默认情况下,指定目录的父目录必须存在。
mkdir 常用参数
-m, –mode:指定被创建目录的权限值。
-p, --parents:创建目录的同时也会创建需要的父目录。
-v, --verbose:显示创建目录与父目录的过程。
--help:显示此帮助信息并退出。
--version:输出版本信息并退出
12345
例: 使用p参数,mkdir -pv /tmp/x3/hello
创建权限为777的目录
rmdir命令 删除空目录
这个命令一般不经常使用。
rmdir:仅能删除删除空目录;
rmdir -p m/n/o/p 删除当前目录下的m/n/o/p的一整条路径,但要求路径下没有任何文件。
123
cp命令 复制文件
cp 要复制的文件路径 … 目标
参数:
-a,--archive:此参数的效果和同时指定"-bpR"参数相同。
-r:递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。
-R,--recursive:递归处理,将指定目录下的文件及子目录一并处理。
-f,--force:强行复制文件或目录, 不论目的文件或目录是否已经存在。
-i,--interactive:覆盖文件之前先询问用户。
-u,--update:使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件。
-v,--verbose:显示执行过程。
-l,--link:对源文件建立硬链接,而非复制文件。
-b,--backup:删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录。
-p,--preserve:保留源文件或目录的属性,包括所有者、所属组、权限与时间。
-P,--parents:保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在。
-s,--symbolic-link:对源文件建立符号链接,而非复制文件。
-S <备份字尾字符串>,--suffix=<备份字尾字符串>:用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"
-V <备份方式>,--version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:
1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增。
2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定。
3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份。
-x,--one-file-system:复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件。
--help:显示在线帮助。
--sparse=<使用时机>:设置保存希疏文件的时机。
--version:显示版本。
12345678910111213141516171819202122
cp命令对单个文件的复制:
目标不存在:则复制并重命名指定的名称(指定的名称的父目录必须存在);
目标存在: 如果目标是文件:则覆盖;如果目标是目录:将文件复制到指定的目录中;
cp命令对多个文件的复制:
如果要复制的文件是多个,则目标必须要存在且是目录;默认情况下不cp命令会复制目录。目录下已经有该文件,再复制进来相同文件名的文件。则询问是否要覆盖。
123456
mv命令 移动文件
mv SRC DEST
规则与cp类似,但cp默认只能对文件操作,mv可以对文件目录均能操作。
12
rm命令 删除文件
rm 只能删除文件,不能删除目录。
常用参数:
-i:提醒。
-f:强行删除;管理员不会有确认提示,直接删掉。
-r:递归删除目录及其内部的所有文件;
rm -rf 文件 强行删除文件。 警示:一定要谨慎使用。
rm -rf / 警示:删除根下所有文件。“自杀”非常危险。
警告:尽量不要这样操作。误操作经常发生,非常危险。
12345678
touch命令
touch命令一般被用于创建新的空文件。
但若把touch命令作用于已存在的文件上,则touch命令把文件的访问时间修改为当前时间。
1.打开终端并输入:
sudo gedit ~/.bashrc。
2.输入用户密码。这时输入的密码是不可见的。
前面的步骤会打开.bashrc文件,在其末尾添加:
export PATH=/opt/EmbedSky/4.3.3/bin:$PATH
其中/opt/EmbedSky/4.3.3/bin为你自己需要设置的环境变量路径。
4
使其立即生效,在终端执行:
source ~/.bashrc
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
useradd 选项 用户名
参数说明:
选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
指定新账号的登录名。
1234567891011
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
123
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
12345
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
1234567891011
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
用groupadd命令。其格式如下:
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
12345
使用groupdel命令,其格式如下:
groupdel 用户组
12
使用groupmod命令。其语法如下:
groupmod 选项 用户组
常用的选项有:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
123456
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
$ newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的
原博客https://blog.csdn.net/netwalk/article/details/12951031。
传统的网络服务程序,如:ftp、POP和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
从前,一个名为Tatu Yl?nen的芬兰程序员开发了一种网络协议和服务软件,称为SSH(Secure SHell的缩写)。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,虽然许多人把Secure Shell仅当作Telnet的替代物,但你可以使用它来保护你的网络连接的安全。你可以通过本地或远程系统上的Secure Shell转发其他网络通信,如POP、X、PPP和FTP。你还可以转发其他类型的网络通信,包括CVS和任意其他的TCP通信。另外,你可以使用带 TCP包装的Secure Shell,以加强连接的安全性。除此之外,Secure Shell还有一些其他的方便的功能,可用于诸如Oracle之类的应用,也可以将它用于远程备份和像SecurID卡一样的附加认证。
SSH分为两部分:客户端部分和服务端部分。
服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。
SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。
但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。
sudo apt-get installopenssh-client
sudo apt-get install openssh-server
SSH默认端口号为22,若有修改SSH端口号的需求,则运行以下指令打开SSH配置文件:
1 $ sudo gedit /etc/ssh/sshd_config
1
SSH服务启动后,即可远程登陆,登陆命令格式为:ssh 帐号@IP地址,例如:
1 $ ssh [email protected]
1
其中帐号指的是Ubuntu的登录帐号
若不知道IP地址可以通过以下指令查看:
1 $ ifconfig -a
1
远程登录后若想退出,输入以下指令即可:
1 $ exit
通过ssh远程登陆:
一般Ubuntu都会默认安装openssh-client,但是没有安装openssh-server。
安装ssh服务器
sudo apt install openssh-server
安装ssh客户端
sudo apt install openssh-client
配置ssh客户端,去掉PasswordAuthentication yes前面的#号,保存退出
sudo vi /etc/ssh/ssh_config
配置ssh服务器,sudo vi /etc/ssh/sshd_config把PermitRootLogin prohibit-password改成PermitRootLogin yes,保存退出。
重启ssh服务
sudo /etc/init.d/ssh restart