内容参考:
1.man page;
2.鸟哥的Linux私房菜-基础学习篇。
1. 用户与用户组
在Linux里面,每个文件都有相当多的属性,其中最重要的可能就是文件的拥有者。任何一个文件都具有User,Group和Others三种身份的个别权限。
默认情况下,所有系统上的账号与一般身份使用者,还有root的相关信息,都是记录在/etc/passwd这个文件内的,至于个人密码则是记录在/etc/shadow这个文件下。此外,Linux所有的组名都记录在/etc/group里,这三个文件是Linux系统内账号、密码和群组信息的集中地
1) 文件拥有者
2) 群组
每个账号可以有多个群组的支持。
3) 其他人
群组之外的人。
2. 权限
利用命令ls -l查看某个文件,文件前面一栏中第一栏-rwxrw-r--
代表文件的类型与权限,第一个字符代表这个文件是目录、文件或链接文件等。
接下来的字符中,三个为一组,且均为‘rwx’这三个参数的组合,其中 r 代表可读(read), w 代表可写(write), x代表可执行(execute).这三个权限的位置不会改变,如果没有权限,就会出现减号‘-’。
这三组中第一组为“文件拥有者的权限”;第二组为“同群组的权限”;第三组为”非其他本群组的权限“。root则位于这三者之上。
权限对文件的重要性:
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。因此权限对于文件来说,意义是这样的:
r(read) : 可读取这一文件的实际内容,如读取文本文件的文字内容等
w(write) : 可以编辑、新增或是修改该文件的内容(但不含删除该文件)
x(execute) : 该文件具有可以被系统执行的权限
在Windows下一个文件是否具有执行能力是有“扩展名”来判断的,例如.exe,.bat,.com等等,但是在Linux下,文件是否能被执行,是由是否具有“x“这个权限来决定的,而和文件名没有绝对的关系。
对于文件的rwx来说,主要都是针对”文件内容“而言,与文件名没有关系,因为文件记录的是实际的数据。
权限对目录的重要性:
目录主要的内容在记录文件名列表,文件名与目录有强烈的关系,对于目录来说”rwx“的意义是:
r(read contentrs in directory) :
表示具有读取目录结构列表的权限,当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。可以使用ls命令将该目录的内容列表显示出来。
w(modify contents of directory) :
表示你具有改动该目录的权限,即:
1) 建立新的文件与目录
2) 删除已经存在的文件与目录(不论文件的权限为何)
3) 将已经存在的文件或目录更名
4) 移动该目录内的文件与目录的位置
x(access directory) :
代表用户能否进入目录成为工作目录。所谓工作目录(work directory)就是你目前所在的目录。变换目录的指令是cd。
3. 文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是EXT2,而文件系统是创建在硬盘上面的。传统的磁盘与文件系统的应用中,一个分隔槽就是只能被格式化成为一个文件系统,所以之前说一个filesystem就是一个partition。但是由于新技术的利用,例如LVM和磁盘列阵(software raid),这些技术可以将一个分隔槽格式化为多个文件系统(例如LVM),也就能都将多个分隔槽合成一个文件系统(LVM,RAID)。目前在格式化时已经不再说针对partition格式化了,通常我们称呼一个可被挂载的数据为一个文件系统而不是一个分隔槽。
文件系统的运行与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容之外,通常会含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到data block区块中。另外还会有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量和剩余量等。
每个inode与block都有编号,这三个数据的意义简略说明:
superblock : 记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量、以及文件系统的格式和相关信息等
inode : 记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
block : 实际记录文件的内容,若文件太大,会占用多个block
由于每个inode和block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码,操作系统能够依据号码来排列磁盘的阅读顺序,一次性将这些block的内容读出来。这种数据的存取方法称为索引式文件系统(indexed allocation)。另外,像闪存盘使用的文件系统一般为FAT格式,没有inode存在,每个block号码都记录在前一个block当中。
目录:
当在Linux下的ext2文件系统创建一个目录时,ext2会分配一个inode与至少一块block给该目录。其中,inode记录该目录的相关权限与属性,并记录分配到的那块block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。
文件:
当在Linux下的ext2创建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。
目录树读取:
目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的inode号码(通常一个filesystem的最顶层inode号码会由2号开始),此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层的往下读到正确的档名。
4. 挂载
文件系统要能够链接到目录才能被我们使用,将文件系统与目录树结合的动作我们成为“挂载”。挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是任何文件系统都能够使用,必须要“挂载”到目录树的某个目录后才能够使用该文件系统。
5. 启动
当按下电源按键后,计算机硬件会主动读取BIOS来加载硬件资讯以及进行硬件系统的自我测试,之后系统会主动的去读取第一个可启动的装置(由BIOS配置的),此时就可以读入启动管理程序了。
启动管理程序可以指定哪个核心文件来启动,并实际加载核心到内存当中解压缩与运行,此时核心就能够开始在内存内活动,并侦测所有硬件资讯与加载适当的驱动程序来使整部主机开始运行,等到核心侦测硬件与加载驱动程序完毕后,一个操作系统就开始在PC上跑了。
主机程序运行后,此时Linux才会呼叫外部程序开始准备软件运行的环境,并且实际的加载所有系统运行所需要的软件程序。最后系统开始等待你的登陆与操作。简单来说,系统启动的经过可以汇成底下的流程的:
1) 加载BIOS的硬件资讯与进行自我测试,并依据配置取得第一个可启动装置;
2) 读取并运行第一个启动装置内的MBR的boot Loader(亦即是grub,spfdisk等程序);
3) 依据boot loader的配置加载Kernel,Kernel会开始侦测硬件与加载驱动程序;
4) 在硬件驱动成功后,Kernel会主动呼叫init程序,而init会取得run-level资讯;
5) init 运行/etc/rc.d/rc.sysinit文件来准备软件运行的作业环境(如网络、时区等);
6) init 运行run-level的各个服务之启动(script方式);
7) init 运行/etc/rc.d/rc/local文件;
8 )init运行终端机模拟程序mingetty来启动login程序,最后等待使用者登陆。
Boot loader 的功能:
Loader的最主要的功能是要认识操作系统的文件格式并据以加载核心到主内存中去运行。由于不同操作系统的文件格式不一致,因此每种操作系统都有自己的boot loader。
每个文件系统(filesystem 或 partition)都会保留一块启动磁盘(boot sector)提供操作系统安装boot loader,而通常操作系统默认都会安装一份loader到它根目录所在的文件系统的boot sector上。
每个操作系统默认是会安装一套boot loader到它自己的文件系统中,而Linux系统在安装时,你可以选择将boot loader安装到MBR中,也可以选择不安装。如果选择安装到MBR的话,那理论上你在MBR和boot sector都会保留一份boot loader程序的。至于Windows安装时,它默认会主动的将MBR与boot sector都装上一份boot loader,所以,你会发现安装多重系统时,你的MBR常常会被不同的操作系统的boot loader所覆盖了。
各个操作系统都可以安装一份boot loader到它们的boot sector中,这样操作系统可以透过自己的boot loader来加载核心。系统的MBR只有一个,要怎么运行boot sector里面的loader呢?这时就要用到boot loader 的功能。boot loader的主要功能如下:
1) 提供菜单:使用者可以选择启动不同的启动项目,这也是多重启动的重要功能;
2) 加载核心文件:直接指向可启动的程序区段来开始操作系统;
3) 转交其他loader:将启动管理功能转交给其他loader负责。
由于具有菜单功能,因此我们可以选择不同的核心来启动。由于具有控制权转交功能,我们可以加载其他boot sector内的loader。不过Windows的loader默认不具有控制权转交功能,因此不能使用Windows的loader来加载Linux的loader。这也是为什么先装Windows再装Linux的缘故。
而最终boot loader的功能就是加载kernel文件。
开始下达指令
command [-options] parameter1 parameter2... 指令 选项 参数(1) 参数(2)
注意:
1) 一行指令中第一个输入的部分绝对是“指令”或“可执行文件;
2) 指令太长的时候,可以用反斜线()来转义[ENTER]符,使指令连续到下一行;
3)在Linux系统中,英文大小写字母是不一样的。
1. alias 定义或显示别名
alias lm='ls -al'
:执行lm
命令即执行ls -al
。 若要要命令别名拿掉,即:unalias lm
。
2. history 查询曾经下达的指令
history n
:列出最近的n条命令。
3. echo 取用变量
echo $variable(${variable})
4. env 列出目前shell环境下所有环境变量与内容
5. locale 显示有关当前语言环境的信息
1. help
指令 --help
2. man
man 要了解的内容
3. info
用法同man。info是将文件数据拆成一个一个的段落,每个段落都有自己的页面,每个独立的页面也被称为一个节点(node)。
date 显示系统日期和时间;cal 显示日历。
1. su 身份切换指令
su [-lm][-c 指令] [username]
- : 单纯使用 - 如“su - ”代表使用log-shell的变量文件读取方式来登陆系统;若使用者名称没有加上去,则代表切换为root身份
-l : 与 - 类似,但后面需要加欲切换的使用者账号!也是log-shell的方式
-m : -m与-p是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”
-c : 仅进行一次指令,所以-c后面可以加上指令
2. sudo 使用其他身份执行指令(通常是root)
sudo [-b] [-u 新使用者账号] 要执行的命令
-b : 将后续的指令放到背景中让系统自行执行,而不与目前的shell产生影响
-u : 后面可以接欲切换的使用者,若无此项则代表切换身份为root
补充:
可以用visudo来修改/etc/sudoers使单一使用者可进行root所有指令.
3. passwd 更改用户账户的密码
普通用户通常只能更改自己账户的密码,而超级用户可以更改任何用户的密码。passwd也更改账户或相关的密码有效期。
1. chown 修改文件拥有者
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录 (可以顺便直接修改用户组的名称)
-R : 进行递归修改,亦即连同子目录下的所有文件、目录都修改
2. chgrp 修改文件所属用户组
chgrp [-R] 用户组名称 文件或目录
-R : 进行递归修改,亦即连同子目录下的所有文件、目录都修改
3. chmod 修改文件的权限
数字类型修改文件权限:
各权限的数字对照表:
r:4 ;w:2 ;x:1
rxw=4+2+1=7
chmod [-R] xyz 文件或目录
xyz : 为rwx属性数值的相加
-R : 进行递归修改,亦即连同子目录下的所有文件、目录都修改
符号类型修改文件权限:
chmod [ugoa][+-=][rwx] 文件或目录
ugoa分别代表user,group,others和all(全部身份);
+:加入; -:移除; =:设置
1. pwd 显示目前所在目录,cd 切换目录,ls 文件与目录的查看
pwd
pwd [-P]
-P : 显示出真正的路径,而非使用链接(link)路径
cd
cd ~heidi : 代表回到使用者的家目录,即/home/heidi
cd : 没有加任何路径,也是代表回到自己家目录
cd .. : 表示去到目前的上层目录
cd - : 表示回到刚刚那个目录,就是上一个目录
cd /var/spool/mail : 这个是绝对路径的写法,指定要去的完整路径名称
cd ../postfix : 这个是相对路径的写法,由/var/spool/mail到/var/spool/postfix就这样写
ls
ls [-aAhilrRS...] 文件名或目录名称
-a : 不隐藏任何以.开始的项目
-A : 列出除.和..之外的任何项目
-h : 将文件容量以人类较易读的方式(例如GB、KB等)列出来
-i : 列出inode号码
-l : 使用较长格式列出信息,包含文件的属性与权限等数据
-r : 将排序结果反向输出
-R : 连同子目录内容一起列出来,等于该目录下所有内容都会显示出来
-S : 以文件容量大小排序
补充:ll='ls -al',ll是命令别名,这个很常用
2. mkdir 创建目录,rmdir 删除“空”的目录
mkdir
mkdir [-mp] 目录名称
-m : 设置文件的权限。直接设置,不使用默认权限(umask)
-p : 帮助你直接将所需要的目录(包含上层目录)递归创建
rmdir
rmdir [-p] 目录名称
-p : 连同上层“空”的目录也一起删除
注意:目录需要一层一层地删除,并且被删除的目录里面必定不能存在其他的目录或文件!
3. cp 复制,rm 删除,mv 移动或重命名 三者均可对文件和目录进行操作
cp
cp [-adfilprsu] 源文件 目标文件
-a : 相当于-dr --preserve=all的意思
-d : 若文件为链接文件的属性,则复制链接文件而非文件本身
-f : 即force,若目标文件已经存在且无法开启,则删除后再尝试一次
-i : 若目标文件已存在,在覆盖时先询问操作的进行
-l : 进行硬链接的链接文件建立,而非复制文件本身
-p : 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
-r : 递归复制,常用于目录的复制操作
-s : 复制为符号链接文件,即“快捷方式”文件
-u : 目标文件比源文件旧才更新目标文件,或者目标文件不存在的情况下才复制
--preserve=all : 除了-p的权限相关参数外,还加入SELinux的属性,links,xattr等也复制
注意:如果源文件有两个以上,则最后一个目标文件一定要是“目录”才行
rm
rm [-fIr] 文件或目录
-f : 即force,忽略不存在的文件,不会出现警告信息
-I : 交互模式,在删除前会询问使用者是否操作
-r : 递归删除,最常用于目录的删除,这是非常危险的选项!!删除之后没有基本方式可以复原!!小心使用!!
mv
mv [-fiu] source destination
mv [options] source1 source2 source3 ... directory
-f : force强制的意思,如果目标文件已经存在,不会询问直接覆盖
-i : 若目标文件(destination)已经存在时,就会询问是否覆盖
-u : 若目标文件已经存在,且source比较新,才会更新(update)
注意:如果有多个源文件或目录,则最后一个目标文件一定是“目录”
4. cat 查看文件内容,more, less 翻页查看,head, tail 数据截取
cat
cat [-AbEnTv]
-A : 相当于-vET的整合选项,可列出一些特殊字符而不是空白而已
-b : 列出行号,仅针对非空白行做行号显示,空白行不标行号
-E : 将结尾的换行符$显示出来
-n : 打印出行号,连同空白行也会有行号,与-b选项不同
-T : 将[Tab]键以^I显示出来
-v : 列出一些看不出来的字符
more, less
more 文件
空格键(space) : 代表向下翻一页
Enter : 代表向下翻一行
/字符串 : 代表在这个显示的内容当中,向下查找字符串这个关键词
:f : 立刻显示文件名即目前显示的行数
q : 代表立刻离开more,不再显示该文件内容
b或Ctrl+b : 代表往回翻页,只对文件有用,对管道无用
less 文件
空格键(space) : 代表向下翻一页
[pageup]/[pagedown] : 向上/向下翻动一页
/字符串 : 代表在这个显示的内容当中,向下查找字符串这个关键词
?字符串 : 代表在这个显示的内容当中,向上查找字符串这个关键词
n : 重复前一个查找(和/或?有关)
N : 反向重复前一个查找(和/或?有关)
g : 前进到这个数据的第一行
G : 前进到这个数据的最后一行
q :离开less这个程序
head, tail
head(取出前面几行)
head [-n number] 文件
-n : 后面接数字,代表显示几行的意思
注意:1) 默认情况下只显示10行;
2) 如果后面接负数,例如-20,代表列出前面所有行数,但不包括后面20行
tail(取出后面几行)
head [-n number] 文件
-n : 后面接数字,代表显示几行的意思
-f : 表示持续刷新显示后面所接的文件中的内容。实时查看文件,Ctrl+c退出
5. which(查找“执行文件”),locate , find 脚本文件的查找
which
which [-a] command
-a : 将所有由PATH目录中可以找到的命令均列出,而不只第一个被找到的命令
注意:这个命令是根据PATH这个环境变量所规范的路径,去查找执行文件的文件名,which后面接的是完整文件名
locate
locate [-iclSr] keyword
-i : 忽略大小写的差异
-c : 不输出文件名,仅计算找到的文件数量
-l : 仅输出几行的意思,后面接数字
-S : 输出locate所使用的数据库文件的相关信息
-r : 后面可接正则表达式的显示方式
说明:locate直接在后面输入文件部分名称即可,在完整文件名(包含路径名称)中只要包含查找的名称都会显示出来
find
find [PATH] [option] [action]
选项与参数:
1) 与时间有关的选项:共有-atime,-ctime与-mtime,以-mtime说明
-mtime n : n为数字,意义为在n天之前的“一天之内”被更动过内容的文件
-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件文件名
-newer file : file为一个存在的文件,列出bifile还要新的文件文件名
2) 与使用者或群组名称有关
-uid n : n为数字,是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面与账号名称对应的数字
-gid n : n为数字,是群组名称的ID,亦即GID,这个GID是记录在/etc/group
-user name : name是使用者账号名称
-group name : name是是群组名称
-nouser : 寻找文件的拥有者不存在于/etc/passwd里面的人
-nogroup : 寻找文件的拥有群组不存在于/etc/group里面的人
3) 与文件权限及名称有关
-name filename : 搜寻文件名称为filename的文件
-size [+-]SIZE : 搜寻比SIZE还要大(+)或小(-)的文件
-type TYPE : 搜寻文件类型为TYPE的,类型主要有:一般正规文件(f),装置文件(b,c),目录(d),
连结档(l),socket(s)
-perm mode : 搜寻文件权限刚好等于mode的文件,属性值类似chmod
-perm -mode : 搜寻文件权限要必须包含mode的文件
-perm +mode : 搜寻文件权限包含任一mode的文件
4) 额外
-exec command : command为其他指令,-exec后面可接额外的指令来处理搜寻到的结果,指令不支持命令别名
例如: -exec ls -l {} \; 其中{}表示find找到的内容,"\;"表示额外命令的结束
6. touch 修改文件时间或创建新文件
touch [-acdmt] 文件
-perm +mode :
-a : 只更改访问时间
-c : 只更改文件的时间,不创建任何文件
-d : 使用指定字符串表示时间而非当前时间,也可以使用 --date=字符串
-m : 只更改修改时间
-t : 后面接时间而不用当前时间,格式为[YYYYMMDDhhmm]
举例:-d “2 days ago”可以将文件atime和mtime调到两天之前,ctime不变
7. wget, curl 文件下载
URL : Uniform Resource Locator的缩写,即统一资源定位符,是互联网上标准资源的地址,即网址。互联网上每一个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
Cookie:有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(经常经过加密)。Cookie实际上是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来,当浏览器再次请求该网站时,把请求的网址连同该Cookie一同交给服务器。服务器检查Cookie以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
wget
wget:Linux/Unix命令行文件下载器,它是下载网站上文件的免费的非交互下载工具,它支持HTTP、HTTPS和FTP协议,也支持通过HTTP代理检索。wget是非交互的,这就是说它可以在用户没有登陆到系统时在后台工作。
wget [] [URL]
常用选项与参数:
wget URL : 下载单个文件
wget -c URL : 续传分段下载文件.下载一个大文件,中途中断了,让下载从端点续传
wget -b URL : 后台下载文件。下载进程被捕获到当前目录的'wget-log'文件中
wget -P 目录 URL : 下载文件到该目录下
wget -i [存有要下载的所有URL的文本文件] : 先创建一个文本文件,将所有的URL添加到该文件中,-i后接该文件名
wget --limit-tate=amount URL : 限制下载速率。amount为下载速率,默认bytes/s,可以加单位 k(kilobytes)或m(megabytes)
wget --tries=number : 增加重试次数,默认情况下wget命令会重试20次直到下载成功
wget -o filename URL: 重定向wget命令的文件到另一个文件
补充示例:下载整个网站用于本地查看
wget --mirror -p -convert-links website-url
--mirror : 开启适用于镜像的选项
-p : 下载所有能正确显示指定HTML网页的全部必要文件
-convert-links : 下载完成后,转档文件中的链接以用于本地查
curl
curl:curl is a tool to transfer data from or to a server.
curr [] [URL]
curl URL : 获取页面内容。不加任何选项使用,默认会发送GET请求来获取链接内容到标准输出
curl -I URL : 只显示HTTP头而不显示文件内容
curl -i URL : 同时显示http头和文件内容
curl -D URL :保存http的response里的header信息
curl -o 文件名 URL : 结果会保存到命令行中提供的文件名 也可以使用>符号将输出重定向到本地文件中
curl URL > 文件名
curl -O URL : URL中的文件名会被用作保存输出的文件名,必须确保链接末尾包含文件名
-o 和 -O 选项还可以用来同时指定多个链接 :
-o 文件名1 URL1 -o 文件名2 URL2 ...
-O URL1 -O URL2 ...
curl -L URL : 跟随链接重定向
curl -A "string" URL : 自定义用户代理,例如下面的命令伪装成安卓火狐浏览器对网页进行请求:
curl -A "Mozilla/5.0(Android;Mobile;rv:35.0) Gecko/35.0 Firefox/35.0" URL
curl -w %{http_code} linux.cn/ :测试网页返回值
curl -c 文件名 URL : 保存http的response里的Cookie信息
curl -c 文件名 URL : 使用Cookie
8. tar 打包命令
tar [-j|-z] [cv] [-f 创建的档名] filename 打包与压缩
tar [-j|-z] [tv] [-f 创建的档名] 察看档名
tar [-j|-z] [xv] [-f 创建的档名] [-C 目录] 解压缩
-c : 创建打包文件,可搭配-v来察看过程中被打包的档名(filename)
-t : 察看打包文件的内容含有哪些档名,重点在于察看“档名'
-x : 解打包或解压缩的功能,可以搭配-C(大写)在特定目录解开
注意:-c,-t,-x不能同时出现在一串命令列中
-j : 透过 bzip2 的支持进行压缩/解压缩,此时档名最好为 *.tar.bz2
-z : 透过 gzip 的支持进行压缩/解压缩,此时档名最好为 *.tar.gz
-v : 在压缩/解压缩的过程中将正在处理的档名显示出来
-f filename : -f 后面要立刻接要被处理的档名,建议-f 单独写一个选项
-C 目录 : 这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
其他:
-P : 保留备份备份数据的原本权限与属性,常用于备份(-c)重要的配置档
-p : 保留绝对路径,亦即允许备份数据中含有根目录存在之意
--excl ude=FILE : 在压缩的过程中,不要将FILE打包
其实最简单的使用tar只要记忆下面的方式即可:
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压的目录
其中filename.tar.bz2 是我们自己取的档名,tar 并不会主动的产生创建档名,所以扩展名就很重要,另外
”-f filename“ 是紧连在一起的,最好将-f放在后面或单独列出来
1. bc 计算器
1) 做一些简单的加减乘除,+,-,*,/,^(指数),%(余数);
2) bc仅默认输出整数,如果要输出小数点下位数,必须要运行scale=number
,这个number就是小数点位数;
3) 离开bc需要输入qiut
。
2. nano 文书编辑器
nano 编辑器被设计用来模仿华盛顿大学 Pico 文本编辑器,且具有类似的功能性与易用性。
它包括四个主要部分:
顶行显示程序版本、当前被编辑的文件名以及该文件是否已被修改。 接着是主要编辑区,显示正在编辑的文件的状态行位于倒数第三行,用来显示重要的信息。底部的两行显示了编辑器中最常用的快捷键。
3. awk 数据处理
awk是一个数据处理工具,相较于sed常常作用于一整行的处理,awk则比较倾向于一行当中分成数个“栏位”。因此,awk相当的适合处理小型的数据数据处理。
awk '条件类型1{动作1} 条件类型2{动作2} ... ' filename
1) awk 后面接两个单引号并加上大括号{}来配置想要对数据进行的处理动作。awk 后面可以接后续接的文件,也可以读取来自前个命令的 standard output。awk 主要处理“每一栏位的数据”,默认的栏位分隔符为“空白键”或tab键;
2) awk 常搭配printf使用。所有的awk 动作,即在{}里的动作,如果需要多个命令辅助时,可以利用分号“;”间隔,或者直接以Enter按键来隔开每个命令;
3) 命令中可以进行逻辑运算也支持if条件。
4. vi&vim 编辑器
vi是老式的字处理器,vim可以看作是vi的进阶版,vim可以用颜色或底线等方式来显示一些特殊的信息,可以根据档案扩展名或者开头信息判断该档案的内容而自动呼叫该程序的语法判断式等等,还加入了其他很多功能,可以说是一个程序开发工具。
vi 共分为三种模式,分别是一般模式、编辑模式与指令命令模式
vi中的常用按键 :
第一部分:一般模式可用的按键
1) 移动光标的方法
n+[space] : n代表数字,按下数字之后再按空格键,光标会右移这一行的n个字符
0或[Home] : 0是数字0,移动到这一行的最前面字符处
$ 或 [end] : 移动到这一行的最后面字符处
G : 移动到这个档案的最后一行
nG : n为数字。移动到这个档案的第n行
gg : 移动到这个档案的第一行,相当于1G
n+Enter键 : n为数字,光标向下移动n行
2) 搜寻与取代
/word : 向光标之下寻找一个名称为word的字符串
?word : 向光标之上寻找一个名称为word的字符串
:n1,n2s/word1/word2/g(c) : n1和n2为数字。在第n1行与第n2行之间寻找word1这个字符串,并将该字符串取代
为word2。最后的c是可选选项,加上会在取代前显示提示字符给用户确认是否需要
取代。从第一行到最后一行可以这样表示:1,$s
3) 删除、复制与粘贴
x, X : 在一行字当中,x 为向后删除一个字符 ([del]),X 为向前删除一个字符([backspace])
dd : 删除光标所在的一整列
ndd : n为数字,删除光标所在的向下n列
yy : 复制光标所在的那一行
nyy : n为数字。复制光标所在的向下n列
p,P : p 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行
u : 复原前一个动作
Ctrl+r: 重做上一个动作
. : 就是一个小数点,作用是重复前一个动作
第二部分:一般模式切换到编辑模式的按键
进入插入或取代的编辑模式
i, I : 进入插入模式。i为从目前光标所在处插入,I为在目前所在行的第一个非空格出开始插入
a, A : 进入插入模式。a为从目前光标所在的下一个字符处开始插入,A为从光标所在行的最后一个字符处开始插入
o, O: 进入插入模式。是英文字母o的大小写。o为在目前光标所在的下一行处插入新的一行,O为在目前光标所在
ip 处的上一行插入新的一行
r,R : 进入取代模式。r只会取代光标所在的那一个字符一次,R会一直取代光标所在的文字,直到按下Esc
[Esc] 退出编辑模式,回到一般模式中
第三部分:一般模式切换到指令模式的按键
指令列的储存、离开等指令
:w : 将编辑的数据写入硬盘档案中
:q : 离开vi
:q! : 若曾经修改过档案又不想储存,使用!为强制离开不储存档案
:wq : 储存后离开,若为:wq!则为强制储存后离开
:!command : 暂时离开vi到指令列模式下执行command的显示结果
vim环境的变更
:set nu : 显示行号
set noun : 取消显示行号
管线命令使用的界定符号:|,管线命令仅能处理经由前面一个命令传来的正确信息,也就是standard output的信。每个管线后面接的第一个数据一定是一个命令,而且这个命令一定能够接受standard input的数据才行。
这些管道命令并不会改变所处理的原文件信息!!!
关于减号 - 的用途:
管线命令在bash的连续的处理程序中是相当重要的。在管线命令当中,常常会使用到前一个命令的stdout作为这次的stdin,某些命令需要用到文件名(例如tar)来进行处理时,该stdin与stdout可以用减号“-”来替代。例如:
tar -cvf - /home | tar -xvf -
上面的例子的意思是:将/home 里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf -。后面的这个“-”是取用前一个命令的stdout,因此,我们就不需要使用file了
1. cut, grep 选取命令
将一段数据经过分析后,选取出我们想要的。或是经由分析关键词,取得我们想要的那一行。要注意的是,选取信息通常是针对“一行一行”来分析的,并不是整篇信息分析的。
cut
cut 可以将某一段信息“切”出来,处理的信息是以“行”为单位。将一行信息当中取出某部分我们想要的。
cut -d '分隔字符' -f fields
cut -c 字符区间
-d : 后面接分隔字符,与-f一起使用
-f : 依据-d的分隔字符将一段信息分割为数段,用-f取出第几段的意思,后面可接多段,','号隔开
-c : 以字符的单位取出固定字符区间
grep
grep 可以解析一行文字,取得关键字,若该行有存在关键词,就会整行列出来。
grep [-acinv] [--color=auto] '搜寻字符串' filename
-a : 将binary文件以text文件的方式搜寻数据
-c : 计算找到'搜寻字符串'的次数
-i : 忽略大小写的不同,所以大小写视为相同
-n : 顺便输出行号
-v : 反向选择,亦即显示出没有'搜寻字符串'内容的那一行
--color=auto : 可以将找到关键词的部分加上颜色的显示
2. sort, uniq, wc 排序命令
sort
sort 可以依据不同的数字型态进行排序,例如数字和文字的排序就不一样。
排序的字符与语系的编码的有关,需要排序时建议使用LANG=C来让语系统一,数据排序比较好一些
stdin : standard input
sort [-fbMnrutk] [file or stdin]
-f : 忽略大小写的差异,例如A和a视为编码相同
-b : 忽略最前面的空格符部分
-M : 以月份的名字来排序,例如 JAN,DEC等等的排序方法
-n : 使用“纯数字”进行排序,默认是以文字型态来排序
-r : 反向排序
-u : 就是uniq,相同的数据中,仅出现一行代表
-t : 分隔符,默认是用[Tab]键来分隔
-K : 以那个区间(field)来进行排序的意思
uniq
排序完成后,想要将重复的数据仅列出一个显示。由于这个命令是在将重复的东西减少,要”配合排序过的文件“来处理!!!
uniq [-ic]
-i : 忽略大小写字符的不同
-c : 进行计数
wc
wc 可以计算输出的信息的整体数据,是很有用的计算文件内容的一个工具组。
wc [-lwm]
-l : 仅列出行
-w : 仅列出多少字(英文单字)
-m : 多少字符
不加参数输出三个数字分别代表:行、字数、字符数
3. tr, col, join, paste 字符转换命令
tr
tr 可以用来删除一段信息中的文字,或者是进行文字信息的替换!
tr [-ds] SETI...
-d : 删除信息当中的SET这个字符串
-s : 取代掉重复的字符
常用举例:
1) tr '[a-z]' '[A-Z]'
将输出信息中的小写变成大写
2) tr -d '\r'
去除DOS文件留下来的^M这个断行的符号,^M可以用\r来代替之
col
col [-xb]
-x : 将tab键转换成对等的空格键
-b : 过滤掉所有的控制字符,包括RLF(Reverse Line Feed)和HRLF(Halt RLF)
RLF,HRLF : 逆向换行符,半逆向换行符。逆向换行符会使光标回到上一行的开头,半逆向换行符会使得光标回到上一行,但是不会到达开头。
join
join 处理两个文件之间的数据,而且,主要是在处理两个文件当中,有“相同数据”的那一行,才将他加在一起。
在使用join 之前,你所需要的文件应该要事先经过排序(sort)处理,否则有些比对的项目会被略过!!
join [-ti12] file1 file2
-t : join 默认已空格符分隔数据,并且比对“第一个字段”的数据,如果两个文件相同,则将两笔数据联成一行,且 第一个字段放在第一个
-i : 忽略大小写的差异
-1 : 这个是数字1,代表第一个文件要用那个字段来分析
-2 : 代表第二个文件要用那个字段来分析
实例:
join -t ':' -1 4 file1 -2 3 file2
file1的第4个字段和file2的第3个字段来进行比对
paste
相对于join 必须要比对两个文件的数据相关性,paste 就直接将两行贴在一起,且中间以[tab]键隔开。
paste [-d] file1 file2
-d : 后面可以接分隔字符。默认是以[tab]来分隔的
- : 如果file部分写成"-",表示来自 standard input 的数据的意思
expand
自动将[tab]按键转成空格键。扩展:unexpand,将空白转成[tab]
expand [-t] file
-t : 后面可以接数字,一般来说,一个tab按键可以用8个空格键取代。我们也可以自定义一个tab按键代表几个字符
4. split 分割命令
将一个大文件依据文件大小或行数来分割。
split [-bl] file PREFIX
-b : 后面可以接欲分割成的文件大小,可加单位,例如b,k,m等
-l : 以行数来进行分隔
PREFIX : 代表前导符的意思,可作为分隔文件的前导文字
将分隔后的文件合成一个文件 PREFIX* >> file
5. xargs 参数代换
就字面意义上来看,x是加减乘除的乘号,args是arguments(参数)的意思,所以说,这个命令就是在产生某个命令的参数的意思。xargs可以读入stdin的数据,并且以空格符或断行字符作为分辨,将stdin的数据分隔成arguments。因为是以空格符作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空格符的时候,xargs可能就会误判了。
很多命令其实并不支持管线命令,可以通过xargs来提供该命令引用standard input之用!!!
例如:find /sbin |ls -l 结果只有列出root所在目录下的文件,可以使用 find /sbin | xargs ls -l
xargs [-Oepn] command
-O : 如果输入的stdin含有特殊字符,例如`,\,空格键等等字符,这个-O参数可以将他还原成一般字符。这个参数可 以用于特殊状态
-e : EOF(end of file)的意思,后面可以接一个字符串,当xargs分析到这个这个字符串时,就会停止继续工作
-e'STRING'
-p : 在运行每个命令的arguments时,都会询问使用者的意思
-n : 后面接次数,每次command命令运行时,要使用几个参数的意思。
当xargs后面没有接任何命令时,默认是以echo来进行输出
1. ps, top (动态) 观察程序运行状态
ps
ps:将某个时间点的程序运行情况撷取下来 (输出有个别字符显示不出来,可将语系暂时换为ASCII)
常用命令:
ps -l:仅观察自己的bash相关程序 (ps -lA 用相同的项目选项观察所有程序)
ps aux:观察所有程序
ps axjf:列出类似程序树的程序显示
选项与参数:
-A : 所有的 process 均显示出来,与 -e 具有同样的效用
-a : 不与 terminal 有关的所有 process
-u : 有效使用者 (effective user) 相关的 process
x : 通常与 a 这个参数一起使用,可列出较完整资讯。
输出格式规划:
l : 较长、较详细的将该 PID 的的资讯列出
j : 工作的格式 (jobs format)
-f : 做一个更为完整的输出
常用命令界面详细说明:
1) ps -l:仅观察自己的bash相关程序
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
F : 代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
若为 4 表示此程序的权限为 root
若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)
S : 代表这个程序的状态 (STAT),主要的状态有:
R : Running,该程序正在运行中
S : Sleep,该程序目前正在睡眠状态(idle),但可以被唤醒(signal)
D : 不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
T : 停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态
Z : Zombie,僵尸状态,程序已经终止但却无法被移除至内存外
UID/PID/PPID : 代表此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码
C : 代表 CPU 使用率,单位为百分比
PRI/NI : Priority/Nice,代表此程序被 CPU 所运行的优先顺序,数值越小代表该程序越快被 CPU 运行
ADDR/SZ/WCHAN : 都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示'-' / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序 是否运行中,若为 - 表示正在运行中
TTY : 登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n)
TIME : 使用掉的 CPU 时间,是此程序实际花费 CPU 运行的时间,而不是系统时间
CMD : 就是 command 的缩写,造成此程序的触发程序之命令为何
2) ps aux:观察所有程序
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER : 该 process 属于的使用者账号
PID : 该 process 的程序识别码
%CPU : 该 process 使用掉的 CPU 资源百分比
%MEM : 该 process 所占用的实体内存百分比
VSZ : 该 process 使用掉的虚拟内存量 (Kbytes)
RSS : 该 process 占用的固定的内存量 (Kbytes)
TTY : 该 process 是在那个终端机上面运行,若与终端机无关则显示'?',另外,tty1-ttyn 是本机上面的登陆 者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT : 该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
START : 该 process 被触发启动的时间
TIME : 该 process 实际使用 CPU 运行的时间
COMMAND:该程序的实际命令
补充:一般来说,该命令会依照PID的顺序来排序显示
top
top:动态观察程序变化
top [-d 数字]
top [-bnp]
-d : 后面接秒数,就是整个程序画面更新的秒数。默认是 5 秒;
-b : 以批处理方式运行 top ,还有更多的参数可以使用,通常会搭配数据流重导向来将批量的结果输出成为文件
举例:top -b -n 2 > /tmp/top.txt (注意当前语系,可能输出乱码)
-n : 与 -b 搭配,意义是,需要进行几次 top 的输出结果
-p : 指定某些个 PID 来进行观察监测而已
在 top 运行过程当中可以使用的按键命令:
? : 显示在 top 当中可以输入的按键命令
P : 以 CPU 的使用资源排序显示
M : 以 Memory 的使用资源排序显示
N : 以 PID 来排序
T : 由该 Process 使用的 CPU 时间累积 (TIME+) 排序
k : 给予某个 PID 一个讯号 (signal)
r : 给予某个 PID 重新制订一个 nice 值。
q : 离开 top
命令界面说明:
top - 19:46:15 up 1:31, 1 user, load average: 0.34, 0.40, 0.52
Tasks: 266 total, 2 running, 211 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.6 us, 0.4 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7907860 total, 3698804 free, 1680204 used, 2528852 buff/cache
KiB Swap: 8000508 total, 8000508 free, 0 used. 5654468 avail Mem
<=如果加入 k 或 r 时,就会有相关的字样出现在这里
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依序是:
第一行(top..) : 目前的时间;启动到目前所经过的时间up..;已经登陆系统的使用者人数;系统在1,5,15分钟的 平均工作负荷,系统平均要负责运行几个程序的意思,越小代表越闲置,高于1需要注意系统程序 是否太过繁复
第二行(Tasks..): 显示的是目前程序的总量与个别程序的状态
第三行(Cpus..) : 显示的是 CPU 的整体负载
us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor
第四行与第五行 : 表示目前的实体内存与虚拟内存 (Mem/Swap) 的使用情况
下半部分的画面,则是每个 process 使用的资源情况:
PID : 每个 process 的 ID
USER : 该 process 所属的使用者
PR : Priority 的简写,程序的优先运行顺序,越小越早被运行
NI : Nice 的简写,与 Priority 有关,也是越小越早被运行
%CPU : CPU 的使用率
%MEM : 内存的使用率
TIME+: CPU 使用时间的累加
补充:top 默认使用 CPU 使用率 (%CPU) 作为排序的重点
2. kill, killall 程序管理(send a signal to a process)
程序相互管理是通过给程序一个讯号(signal)
kill
kill -signal PID
常用的signal: (其他signal可以查询 man 7 signal)
1 : SIGHUP,启动被终止的程序,可让该 PID 重新读取自己的配置档,类似重新启动
2 : SIGINT,相当于用键盘输入 Ctrl+c 来中断一个程序
9 : SIGKILL,强制中断一个程序的的进行。若该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生
例如 vim 会有 .filename.swp 保留下来
15: SIGTERM,以正常的结束程序来终止该程序,后续动作也会将它完成
如果该程序已经发生问题,即无法使用正常的方法终止,则该signal无效
17: SIGSTOP,相当于键盘输入 Ctrl+z 来暂停一个程序的进行
经常使用 ps 或 pstree 找到某个程序的PID后再使用kill传送讯号
killall
killall [-iIe] -signal [command name]
-i : interactive,互动式的,若需要删除时,会出现提示字节给使用者
-e : exact,表示后面接的'command name'要一致,但整个完整的命令不能超过15个字节
-I : 命令名称(可能含参数)忽略大小写
注意:killall会处理该命令名称的全部程序
1. netstat 追踪网络或插槽档
网络监听:是一种监视网络状态、数据流程以及网络上信息传输的管理工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。
套接字(socket):TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字
netstat 这个命令常用在网络监控方面。其输出分为两大部分,分别是网络与系统自己的程序相关性部分。
netstat [-atunlp]
-a : 将目前系统上所有的连线、监听、socket数据都列出来
-t : 列出 tcp 网络封包的数据
-u : 列出 udp 网络封包的数据
-n : 不以程序的服务名称,以埠号(port number)来显示
-l : 列出目前正在网络监听(listen)的服务
-p : 列出该网络服务的程序PID
netstat后面不接参数,表示列出目前系统已创建的网络连线与 unix socket 状态
Active Internet connections (w/o servers) (激活Internet连接,是与网络较相关的部分)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 linux:41836 203.23.128.100:https ESTABLISHED
...
Active UNIX domain sockets (w/o servers) (活跃的UNIX域套接字,本机的程序自己的相关性(非网络))
Proto RefCnt Flags Type State I-Node Path
列表说明:
网际网络连线部分:
Proto:网络的封包协议,主要分为TCP与UDP封包
Recv-Q:非由使用者程序连结到此socket的复制总bytes数
Send-Q:非由远程主机传送过来的acknowledged总bytes数
Locale Address:本地端的IP:port情况
Foreign Address:远程主机的IP:port情况
State:连线状态,主要有创建(ESTABLISHED)及监听(LISTEN)
除了网络上的连线外,Linux系统上面的程序是可以接受不同程序发送来的资讯,那就是Linux上头的插槽档(socket file)
Proto:一般就是 unix 啦;
RefCnt:连接到此 socket 的程序数量;
Flags:连线的旗标;
Type:socket 存取的类型。主要有确认连线的 STREAM 与不需确认的 DGRAM 两种;
State:若为 CONNECTED 表示多个程序之间已经连线创建。
Path:连接到此 socket 的相关程序的路径!或者是相关数据输出的路径。
常用举例:
1) 找出目前系统上已在监听的网络连线及其PID
netstat -tlnp
2. dmesg 分析核心产生的信息
dmesg | more : 输出所有的核心启动时的资讯,因为信息太多可以加入管线命令”| more“来使画面暂停
dmesg | grep -i hd : 搜寻启动的时候,硬盘的相关资讯
dmesg | grep -i eth : 查阅网络卡相关资讯
3. ifconfig, ip 显示或设置网络设备
ifconfig
1) ifconfig 不加参数,表示显示网络设备信息
2) ifconfig [网络设备] [down up]
down : 关闭指定指定网卡,例如eth0
up : 启动指定网卡
3) ifconfig [网络设备] [add del] [地址]
add : 设置网络设备IPv6地址
del : 删除网络设备IPv6地址
网络设备和地址之间不加参数 : 给该网络设备配置IP地址
4) ifconfig hw [网络设备] [硬件地址] : 设置网络设备的类型与硬件地址
ip
常用命令:
ip link show : 显示链路
ip addr show : 显示地址(或ifconfig)
ip route show : 显示路由(route -n)
ip neigh show : 显示arp表
ip rule show : 显示缺省规则
ip route del default dev eth0 : 删除接口路由
ip route show table local : 查看本地静态路由
ip route show table main : 查看直连路由
ip addr add/del [地址] dev eth0 : 增加/删除地址
4. systemd, systemctl 系统管理
systemd
传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init 启动系统)来处理,而基于init的启动系统被认为有效率不足的问题。
systemd 是Linux系统的另一种启动方式,宣称弥补了以传统Linux SYSVC init为基础的系统的缺点。systemd 是用来启动守护进程,已成为大多数发行版的标准配置。它的设计目的是为系统的启动和管理提供一套完整的解决方案,字母d是(daemon)的缩写。
systemd 是Linux操作系统的系统和服务管理器。当在引导时作为第一个进程运行时(作为PID 1)取代init启动和维护用户空间服务,其他进程都是它的子进程。
systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
systemctl
systemctl 是 systemd 的主命令,用于管理系统。
显示系统状态:
$ systemctl status
立即激活单元:
# systemctl start [单元]
立即停止单元:
# systemctl stop [单元]
重启单元:
# systemctl restart [单元]
开机自动激活单元:
# systemctl enable [单元]
取消开机自动激活单元:
# systemctl disable [单元]
命令单元重新读取配置:
# systemctl reload [单元]
输出单元运行状态:
$ systemctl status [单元]
检查单元是否配置为自动启动:
$ systemctl is-enabled [单元]
显示单元的手册页:
# systemctl help [单元]
重新载入 systemd,扫描新的或有变动的单元:
# systemctl daemon-reload
输出激活的单元:
$ systemctl list-units
查看已激活的服务:
$ systemctl list-units -t service
输出运行失败的单元:
$ systemctl --failed
禁用一个单元:
# systemctl mask [单元]
取消禁用一个单元:
# systemctl unmask [单元]
查看所有已安装服务:
$ systemctl list-unit-files
检查某个服务的所有配置细节
# systemctl show [服务]
获取某个服务的依赖性列表
# systemctl list-dependencies [服务]
查看环境变量
$ systemctl show-environment
重启系统
# systemctl reboot
关闭系统
# systemctl poweroff
进入待机状态
# systemctl suspend
进入休眠状态
# systemctl hibernate
进入混合休眠模式
# systemctl hybrid-sleep
进入救援状态
# systemctl rescue
1. ssh 远程登陆
ssh(SSH client) 是一个用于登陆远程计算机并在远程计算机上执行命令的程序。它旨在通过不安全的网络在两个untrusted主机之间提供安全的加密通信。X11连接,任意TCP端口和UNIX域套接字也可以通过安全通道转发。
常用示例:
1) 登陆其他系统
ssh usr(用户名)@hostname(目标主机(局域网内或者远程)的IP地址)
2) 使用其他端口(默认连接到目标主机的22端口上)
ssh -p 端口号 usr@hostname
3) 远程执行命令
ssh usr@postname 命令
4) X11图形界面
ssh -X usr@hostname
如果在运行图形界面同时想做别的事情,只需要在图形界面命令末尾加一个&符号
5) 转义字符
用ssh连接到任意一台主机然后输入~?就可以看到支持的转义字符和功能说明列表
6) 配置ssh
如果想要改变ssh的配置,文本编辑器打开/etc/ssh/sshd_config进行编辑
7) 构建ssh密钥对
ssh-keygen -t dsa
此命令会要求输入密码,然后生成密钥并会显示一张该密钥对应的随机图
PS:三个用终端查看IP地址的命令:
ip addr show; ifconfig -a; hostname -I
2. scp 安全远程文件拷贝
scp 是 secure copy 的缩写,是Linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp 在网络上的主机之间复制文件,它使用 ssh 进行数据传输,并使用相同的身份验证提供相同的安全性。如果需要,scp 会要求输入密码或密码短语进行认证。本地文件可以使用绝对路径或相对路径,注意避免出现“:”作为主机说明符的名称。
scp [-cprv] 原路径 目标路径
-C : 允许压缩
-p : 保留原文件的修改时间,访问时间和访问权限
-r : 递归复制整个目录
-v : 详细方式显示输出。scp和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
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
2) 从远程复制到本地
只要将从本地复制到远程的命令后两个参数调换顺序即可
scp [email protected]:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/