前言:欢迎进入Linux开发的学习,Linux是一种操作系统,它衍生出了Android等各种类型的操作系统。现在嵌入式,智能家居,服务器的操作系统本质都是Linux操作系统。
指令是什么
指令本质是可执行程序,也就是一个文件(文件=内容+属性)
安装和卸载是把可执行程序拷贝/删除到系统路径下
我们可以直接运行路径,运行这个文件,效果基本一样
# pwd
打印当前所处路径,也就是打印所处文件夹的位置
例如:
/root
# ls
罗列出当前路径下的文件名或文件夹名(可以为空)
# ls xxx
xxx可以是文件夹名也可以是文件夹的路径
罗列出该文件夹中的文件名或文件夹名
当xxx是文件名或文件的路径时
没有任何效果
注意:
xxx是文件夹名或文件名时,必须是当前路径下的
xxx是路径时,不受限制
# ls -l
列出当前路径下文件或文件夹的详细信息。
# ls -l xxx
xxx可以是文件名或文件夹名也可以是文件或文件夹的路径
罗列出该文件夹中文件或文件夹的详细信息或者罗列某个文件的详细信息
注意:
xxx是文件夹名或文件名时,必须是当前路径下的
xxx是路径时,不受限制
# ls -la
列出当前路径下的所有文件或文件夹(包括以 . 开头的隐含文件或文件夹)
且列出各文件或文件夹的详细信息
# ls -la xxx
xxx可以是文件名或文件夹名也可以是文件或文件夹的路径
列出当前文件夹中所有文件或文件夹(包括以 . 开头的隐含文件或文件夹)
且列出各文件或文件夹的详细信息
xxx是文件名或文件路径,只列出这个文件的详细信息
注意:
xxx是文件夹名或文件名时,必须是当前路径下的
xxx是路径时,不受限制
# ls -ld
列出当前路径的详细信息
# ls -ld xxx
可以指定列出路径的详细信息
# mkdir xxx
在当前路径下,创建一个新的文件夹
# mkdir -p xxx/xxx/xxx
在当前路径下连续嵌套创建文件夹
# cd xxx
进入指定 “文件夹”,xxx可以是文件夹名也可以是文件夹的路径
注意 :
文件夹名必须是当前路径下存在的
路径可以是任意一个文件夹的路径
xxx不能是文件名或文件的路径
# cd -
跳转到我们最近一次所处的路径下
# cd ~
进入用户家目录
任何一个用户,首次登录,所处的路径都是自己的家目录
# touch xxx
在当前路径下创建一个新的文件
例如
# touch file.txt
# clear
清屏操作
带点的文件或文件夹
带 . 代表是隐藏的文件或文件夹
. 文件夹代表当前路径,也就是当前这个文件夹
..文件夹代表上一个路径,也就是上一个文件夹
# cd .. 代表进入上一个文件夹,也就是退出当前路径(文件夹)
# cd . 代表进入这个文件夹,也就是重复进入当前路径(文件夹)
# cd ./../.. 代表进入这个路径的上一个路径的上一个路径 (# cd ../..)
# cd ./../xxx 代表进入这个路径的上一个路径中的某一个文件夹xxx (# cd ../xxx)
# cd ./xxx/xxx 代表进入当前路径中的某个文件夹中的某个文件夹(# cd xxx/xxx)
像 ./../xxx这样带点的路径成为相对路径,其他具体的称为绝对路径
/号
/是Linus路径分隔符
当/只有一个时,就是根目录,也叫根路径
两个路径分隔符之间,一定是一个文件夹
路径最末端,一定是一个普通文件或者文件夹
*号
表示一个通配符,匹配任意文件名
# whoami
查看当前账号用户
# which xxx
xxx是指令
要求系统打印出我所指定的指令名称,在系统的所在路径
# adduser xxx
在/home目录中新建一个新的用户
xxx为名称
# userdel -r xxx 删除xxx用户
# alias xxx='xxx'
alias起别名
ls本来等于路径/usr/bin/ls,是没有颜色的
但被alias封装加入了颜色
ls == /usr/bin/ls --color=auto
# stat xxx
xxx是某个文件,可以是文件名或者文件路径,stat查看某个文件的更具体的信息
xxx是文件名时,必须是当前路径下的,是路径时不受限制
一个文件的ACM时间
# tree xxx
xxx是文件夹名或者是文件夹路径,文件夹名必须是当前路径下的,路径则不受限制
# yum -y install xxx
安装xxx指令,有的指令系统没有自带需要安装
-y:代表强制执行
# rmdir xxx
xxx是文件夹名或文件夹的路径,文件夹必须为空
是文件夹名时必须是当前路径下的
删除空文件夹
# rm xxx
rm删除某个文件,也可以删除空文件夹,xxx可以是文件或文件夹名或文件或文件夹路径
文件或文件夹名必须是当前路径下的
# rm -r xxx
rm -r 删除文件夹,无论文件夹有无内容
xxx是文件夹名或文件夹路径
文件夹名必须是当前路径下的
# rm -f /# rm -rf 代表强制删除文件/文件夹
在root账户下会提示是否真的要删除,加-f就不会触发提示
# man xxx
man是Linus中的一个手册,可以查询指令,代码等
man中有9个查询库
1是指令手册,2是系统调用手册,3是C语言代码手册,4~9一般用不到
# man xxx
依次从上到下搜素xxx,搜索到则停止
# man x xxx
可以指定搜索库(x属于1~9)
# cp xxx xxx
拷贝
将xxx文件拷贝到xxx路径下,xxx可以是文件名也可以是路径
xxx是文件名时必须是当前路径下的
xxx路径末尾可以是文件夹也可以是文件,如果是文件,那将以这个新的文件名拷贝到这个路径
# cp -r xxx xxx
将文件夹xxx拷贝到xxx路径下,xxx可以是文件夹名也可以是路径
xxx是文件夹时必须是当前路径下的
xxx路径末尾如果是一个新的文件夹名称,那就以这个新的文件夹名称拷贝到这个路径
# cp -f /# cp -rf 代表强制拷贝文件/文件夹
在root账户下会提示是否真的要拷贝,加-f就不会触发提示
# mv xxx xxx
1. 将xxx文件/文件夹 改名 成 xxx文件/文件夹
xxx/xxx可以是文件名或文件夹名,也可以是路径
xxx/xxx是文件名或文件夹名时必须是当前路径下
2.指定路径下的文件或文件夹剪切移动到指定路径下
xxx可以是文件名或文件夹名,也可以是路径
xxx是文件名或文件夹名时必须是当前路径下
xxx必须是路径
如果在xxx路径末尾增加新的文件名或文件夹名,那么就是迁移+改名
# nano xxx
xxx是文件名或文件路径,nano是文本编辑器,打开并编辑
xxx是文件名时必须在当下路径
# gcc xxx
编译文件用gcc编译器从而生成a.out文件
进而运行
# cat xxx
cat默认指向键盘,从键盘获取信息并打印,当没有xxx时
cat打印文本 xxx是文件名或文件路径
xxx是文件名时必须在当下路径
# cat < xxx
输入重定向,从xxx文件读取并打印
# cat -n xxx
打印的时候将行号会将行号打印出来
# cat -s xxx
打印的时候将行号会将空行压缩成一行空行
# tac xxx
倒着打印文本
# echo “xxx”
# echo “xxx” 把xxx打印到屏幕上
# echo “xxx” > xxx
输出重定向
xxx是文件名或文件路径,xxx是文件名时必须在当下路径
将内容xxx显示到文件xxx中
如果没有xxx这个文件,会建立xxx文件
每次写入,都会重新写入,清空上次写入重新写入
# echo “xxx” >> xxx
追加重定向
xxx是文件名或文件路径,xxx是文件名时必须在当下路径
将内容xxx显示到文件xxx中
如果没有xxx这个文件,会建立xxx文件
每次写入不会清空上次内容,会继续往下写入
# > xxx
指向这个文件
xxx是文件名或文件路径,如果没有,会创建这个文件
如果存在这个文件,则清空文件内容
Linux理念
一切皆文件,Linux可以以统一的方式进行文件/设备访问
(文件夹也是一种文件,文件=内容+属性,文件夹的内容就是各个文件的信息)
# more xxx
more可以打满屏幕,然后停下来,让用户按回车下翻
查看xxx文件内容,可以逐行阅读,按/xx可以具体查看关键字xx所处的部分,按q退出
# less xxx
既可以往上翻也可以往下翻
查看xxx文件内容,可以逐行阅读,按/xx可以具体查看关键字xx所处的部分,按q退出
# head xxx
提前文件的头,打印文件xxx的前十行
# head -x xxx
x代表几行
打印文件xxx的前x行
# tail xxx
提前文件的尾,打印文件xxx的倒数后十行
# tail -x xxx
x代表几行
打印文件xxx的倒数后x行
| 管道
# xxx | xxx
xxx从xxx拿数据
可以重复叠加使用
# wc -l xxx
统计文件xxx的行数
# date
打印时间
date 指定格式显示时间:# date +%Y:%m:%d在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下%H : 小时 (00..23)%M : 分钟 (00..59)%S : 秒 (00..61)%X : 相当于 %H:%M:%S%d : 日 (01..31)%m : 月份 (01..12)%Y : 完整年份 (0000..9999)%F : 相当于 %Y-%m-%d时间戳时间 -> 时间戳:# date +%sUnix 时间戳(英文为 Unix epoch, Unix time, POSIX time 或 Unix timestamp )是从 1970 年 1 月 1 日( UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒转换时间戳
# cal
查看日历
# cal xxx
xxx是年份,将xxx年的日历全部打印出
# cal -3
打印近3个月的日历(上一个月、本月、下一个月)
# find xxx -name xxx
xxx是路径,在xxx路径下查找名为xxx的文件或文件夹
find是真正的在系统的树形结构中进行文件查找的
# grep “xxx” xxx
指定数据xxx,在文件xxx中查找,起到信息筛选过滤的作用
# grep -n “xxx” xxx
加上行数
# grep -v “xxx” xxx
不包括 xxx 的打印出来
# grep -i “xxx” xxx
忽略xxx大小写并打印
这几个可以重复叠加使用
# zip xxx.zip xxx
将文件xxx或空文件夹xxx打包成xxx.zip压缩包
# zip -r xxx.zip xxx
将文件夹xxx打包成xxx.zip压缩包
# zip -r xxx.zip xxx xxx xxx
将多个文件夹或文件xxx xxx xxx(随便多少个)打包成xxx.zip压缩包
# zip xxx.zip xxx xxx xxx
xxx xxx xxx是多个文件或空文件夹
# unzip xxx.zip
解压文件或文件夹压缩包
# unzip xxx.zip -d xxx
将压缩包xxx解压到xxx路径
tar指令(重要):打包/解包
tar [-cxtzjvf] 文件与目录 .... 参数 :-c :建立一个压缩文件的参数指令 (create 的意思 ) ;-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!-C : 解压到指定目录
# tar -czf xxx.tgz xxx
将文件或文件夹xxx打包成xxx.tgz,xxx可以是任意数量个文件或文件夹
# tar -cvzf xxx.tgz xxx
将打包的过程显示出来
# tar -xzf xxx.tgz
解压xxx.tgz 压缩包
# tar -xvzf xxx.tgz
加v则显示过程
# tar -xzf xxx.tgz -C xxx
将压缩包xxx解压到xxx路径
# tar -xvzf xxx.tgz -C xxx
加v则显示过程
文件传输
# sz xxx
将Linux压缩包/文件/夹xxx传输到window
# rz
将window压缩包/文件/夹xxx传输到Linux
# scp xxx xxx@xx.xxx.xxx.xxx:/xxx
将文件传输到另一个Linux
xxx:压缩包/文件/夹
xxx: 以谁的身份
xx.xxx.xxx.xxx:另一台机器的ip
xxx:另一台机器对应的路径
# scp xxx@xx.xxx.xxx.xxx:xxx xxx
将文件从另一个Linux传输到本台Linus
xxx:压缩包/文件/夹
xxx: 以谁的身份
xx.xxx.xxx.xxx:另一台机器的ip
xxx:本台机器保存的路径
# bc
计算器(计算的作用)
# uname
语法 : uname [ 选项 ]功能 : uname 用来获取电脑和操作系统的相关信息。补充说明 : uname 可显示 linux 主机所用的操作系统的版本、硬件的名称等基本信息# uname -a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称# uname -r 内核版本号,内核版本,硬件名,处理器类型,硬件平台类型
重要的几个热键
[Tab]按键---具有『命令补全』和『档案补齐』的功能[Ctrl]-c按键---让当前的程序『停掉』[Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 或 End OfInput)』的意思;另外,他也可以用来取代exit,退出登录[Ctrl]-r按键--在历史命令中进行搜素,输入历史命令部分关键字即可弹出
关机(关服务器)
语法 : shutdown [ 选项 ] ** 常见选项: **-h : 将系统的服务停掉后,立即关机。-r : 在将系统的服务停掉之后就重新启动-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
shell命令以及运行原理
Linux 严格意义上说的是一个操作系统,我们称之为 “ 核心( kernel ) “ ,但我们一般用户,不能直接使用 kernel 。而是通过 kernel 的 “ 外壳 ” 程序,也就是所谓的 shell ,来与 kernel 沟通。如何理解?为什么不能直接使用 kernel ?从技术角度, Shell 的最简单定义:命令行解释器( command Interpreter )主要包含:将使用者的命令翻译给核心( kernel )处理。同时,将核心的处理结果翻译给使用者。对比 windows GUI ,我们操作 windows 不是直接操作 windows 内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D 盘的操作,我们通常是双击 D 盘盘符 . 或者运行起来一个应用程序)。shell 对于 Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给 Linux 内核。反馈结果在通过内核运行出结果,通过shell 解析给用户。
sudo提权
简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。
严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。第三方可以开发并发布自己的安全策略和输入输出日志插件,并让它们无缝的和 sudo 一起工作。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。
Linux权限的概念
权限= 人(角色) + 事物的有关属性Linux 下有两种用户:超级用户( root )、普通用户。超级用户:可以再 linux 系统下做任何事情,不受限制普通用户:在 linux 下做有限的事情。超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$” 。命令 : su [ 用户名 ]功能 :切换用户。例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略),此时系统会提示输入 root 用户的口令退出:Ctrl -d 退出当前用户权限的意义:保证普通用户的文件的一般的安全性
以su - 登录root,代表重新登录root,所在目录默认在家目录 /root
单su,登录root,路径还在原先账号家路径
Linux权限管理
01. 文件访问者的分类(人)文件和文件目录的所有者: u---User (中国平民 法律问题)文件和文件目录的所有者所在的组的用户: g---Group (不多说)其它用户: o---Others (外国人)对用户身份的识别,只识别一次,从User到Others进行识别锁定02. 文件类型和访问权限(事物属性)
文件类型
d:文件夹-:普通文件l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)p:管道文件c:字符设备文件(例如屏幕显示器等串口设备)s:套接口文件例如以下文件b:块设备文件(磁盘)c:字符设备文件(显示器)p:管道文件
l:软链接文件(类似Windows的快捷方式)(在/目录下)
文件的后缀名
Linux不通过后缀区分文件类型,普通文件只有能不能执行的区分
但Linux上面的工具如gcc可能需要后缀的区分
以防万一,我们还是要加上后缀确保正常使用
基本权限
r - Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w- Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
x - execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“-”表示不具有该项权限
权限三三为一组 rwx
x只是可执行的权限,而文件不一定能执行
文件访问权限的相关设置方法
一个文件/文件夹的权限谁能修改?
a.文件/夹的拥有者
b.root
root不受任何权限的约束,而对于普通用户,自身要受到对应权限的约束,即便文件/夹是自己的
chmod
功能: 设置文件或目录的访问权限格式: chmod [ 参数 ] 权限 文件/文件夹用户表示符+/-=权限字符+:向权限范围增加权限代号所表示的权限-:向权限范围取消权限代号所表示的权限=:向权限范围赋予权限代号所表示的权限用户符号:u:拥有者g:拥有者同组者o:其它用户a:所有用户例如# chmod u+w g-rwx o+x file.text# chmod u+w /home/abc.txt# chmod a+rwx /home/abc.txt# chmod a=x /home/abc.txt三位8进制数字
例如
# chmod 664 /home/abc.txt# chmod 640 /home/abc.txtchown
功能 :修改文件或目录的拥有者格式 : chown [ 参数 ] 用户名 文件/文件夹# chown user1 filename
需要在root用户或者普通用户sudo提权后的条件下才能使用(强制把文件/夹给别人)# chown name1:name2 filename这样把拥有者和所属组都改了chgrp
功能 :修改文件或目录的所属组格式 : chgrp [ 参数 ] 用户组名 文件/文件夹# chgrp name1 f2.txt# chgrp name2 /abc/f2.txtumask
功能 :查看或修改文件掩码新建文件默认权限=0666新建目录默认权限=0777但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是 : mask & ~umask
粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除# chmod +t 文件夹
关于权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)只能在外面读目录。
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,看不到里面的目录,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
基础补充复习:
为方便专转本的同学,我在下文总结一下相关专转本需要考察的基础点。专转本考试侧重基础,而就业则是技术。所以将本博客完善以面对专转本的考察。
/usr :是系统存放程序和数据的目录
/usr/sbin:存放root可执行程序目录 /usr/bin:普通用户可执行文件目录
/usr/local:存放用户自编译安装软件
/usr/share:存放系统共用文件的目录 /usr/src:内核源码的目录
/etc:是存放系统配置文件的目录 /etc/passwd:用户信息 /etc/shadow:密码
/var:存放变动内容,缓存文件,日志文件
/dev:设备文件存储目录,存放声卡,磁盘文件
/bin:存放系统常用命令
/tmp:存放临时文件
/lib:存放库文件
/boot:用于存放Linux内核及引导系统程序文件
CentOS Linux 7默认的yum源定义文件存放在/etc/yum.repos.d目录下
用户可以自行定义任意可以使用的yum源,但文件扩展名必须是repo
Ctrl+C:终止当前执行程序;
Ctrl+D:退出当前Shell,注销用户。同理还有 logout,exit。
Ctrl+S:挂起当前Shell;
Ctrl+Q:解冻挂起的Shell
Ctrl+A:将光标迅速移回首行
Ctrl+B:将光标向左移动一个字符
Ctrl+S:锁定终端,任何人无法输入
Ctrl+Alt+F2:从图形界面切换到文本界面 Ctrl+Alt+F1:相反操作
rm -i的后缀表示在删除文件之前提示用户,确认是否需要删除,y确认,其他否定
yum源的clean all命令用于清空所有缓存信息
rpm -i:表示安装指定的软件包,-e:卸载指定的软件包
-q:查询软件包是否已经安装,-v:显示指令执行过程
-qa:命令表示查询系统已经安装的所有软件包
-ql:命令表示查询已安装软件包的文件信息列表
-qi:命令表示查询软件包的详细信息
-qf:命令表示查询系统中某文件的所属软件包
init 0:关机或停机; 同理:shutdown -h
init 1:执行单用户模式,仅用于用户对系统进行维护时
init 5:表示执行Linux系统图形化界面模式
init 6:重新启动 同理:shutdown -r
passwd命令用来管理用户密码,只有root用户才有权设置指定用户密码,普通用户只能设置设置或修改自己的密码
passwd -d命令表示删除用户密码;
passwd -S命令表示查询用户密码状态;
passwd -l命令表示锁定用户密码;
free:查看当前系统内存使用情况
df:查看文件系统的磁盘使用情况
uptime:显示系统已经运行了多长时间
last:查看登录日志信息
reboot或shutdown -r now :重启系统
uname -r:用于显示操作系统的发行版本号
uname -n:用于显示系统主机名
hostnamectl:永久设置主机名
hostname:临时设置主机名
网络
netstat 查看当前服务器打开的与网络相关的程序数量及使用的协议类型
-p:显示该端口进程
-l:显示正在监听的服务或端口
-n:不进行域名解析,只显示数字
-r:显示当前主机的路由表信息
ping:测试网络中两台主机之间的网络是否畅通
traceroute:用来路由跟踪
nslookup:检查指定的DNS服务器工作是否正常
ifconfig:配置和显示网络接口状态