默风 发表于 2024-6-8 17:48:51

Linux学习总结

Linux笔记

Linux目录结构

1. /bin目录
/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序( bin是binary - -二进制的简称),多是系统中重要的系统文件。
2. /sbin目录
/ sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。
3. /etc目录
/ etc目录存放着各种系统配置文件。l i n u x正是这些文件才得以正常地运行。
4. /root目录
/root 目录是超级用户的目录。
5. /lib目录
/ lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
6. /lib/modules 目录
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。
7. /dev目录
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。
8. /tmp目录
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var /tmp来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。
9. /boot目录
/boot目录存放引导加载器(bootstrap loader)使用的文件,如l i lo,核心映像也经常放在这里,而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在i d e硬盘的前1 0 2 4柱面内。
10. /mnt目录
/ mnt目录是系统管理员临时安装( mount )文件系统的安装点。程序并不自动支持安装到/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱,而/mnt/exta 可能是使用e x t 2文件系统的软驱,/mnt/cdrom 光驱等等。
11./proc目录
/proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
12./run目录
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
13./srv目录
该目录存放一些服务启动之后需要提取的数据。
14./var目录
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
15./home目录
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
16./media目录
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
17./opt目录
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
18./sys目录
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
19./usr目录
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
Vim


[*]命令行        ->           一般模式        vim xxx
[*]一般模式      ->           编辑模式        i
[*]一般模式      ->           命令模式        :或者 /
[*]编辑模式      ->           一般模式      ESC
[*]命令模式      ->           一般模式      ESC
[*]在命令行下    :wq 保存退出;   :q 退出;      :q! 强制退出,不保存
常用快捷键


[*]拷贝当前行        yy
[*]拷贝当前行向下5行        5yy
[*]删除当前行        dd
[*]删除当前行向下5行        5dd
[*]查找关键字        /关键字             n 找下一个
[*]开启/关闭行号        :set nu/:set nonu
[*]跳转到首行        gg
[*]跳转到尾行        G
[*]撤销         u
[*]跳转到指定行        行号+shift+g
关机/重启


[*]把内存的数据同步到磁盘        sync
[*]立刻关机        shutdown   -h   now
[*]一分钟后关机        shutdown   -h    1
[*]立刻重启        shutdown   -r    now
[*]立刻关机        halt
[*]立刻重启        reboot
用户管理


[*]添加一个用户:        useradd用户名【每个用户有自己的文件夹,默认为/home/用户名】
[*]可以通过   useradd用户名   -d   目录    【不使用默认生成的家目录,自己指定用户的家目录】
[*]更改用户密码:      password   用户名
[*]显示当前用户所在目录:            pwd
[*]删除用户
[*]删除用户,但保留家目录    userdel   用户名
[*]删除用户以及家目录    userdel   -r    用户名

[*]一般情况建议保留家目录
用户登录/注销


[*]切换用户        su - 用户名
[*]注销用户        logout
查询用户信息


[*]查询用户信息:        id   用户名
[*]whoami 只显示用户名,且su后将显示切换后的用户名
[*]who am i 则显示用户名、登陆时间和ip,且su后仍显示首次登陆的用户
用户组


[*]类似于角色,系统可以对同一组(同一权限)的用户统一操作

[*]新增组:    groupadd   组名
[*]删除组:    groupdel   组名
[*]添加用户到指定组:    useradd-g用户组用户名
【不指定组会直接生成 以用户名为组名的组,并将该用户加入到组中】
[*]修改用户组:      usermod-g用户组用户名
[*]/etc/passwd文件 用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
[*]/etc/shadow文件 口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
[*]/etc/group文件 组(group)的配置文件,记录Linux包含的组的信息
每行含义:组名:口令:组标识号组内用户列表
实用指令

运行级别说明:

0:关机
1: 单用户【找回丢失密码】
2: 多用户状态没有网络服务
3: 多用户状态有网络服务
4: 系统未使用保留给用户
5: 图形界面
6: 系统重启
常用运行级别是 3和5 ,也可以指定默认运行级别
切换运行级别

通过指令设置运行级别: init 级别数字
查看当前的运行级别: systemctl get-default
设置默认的运行级别: systemctl set-default multi-user.target
帮助指令

man指令


[*]获取帮助信息:        man [命令或配置文件]   【例如 man ls 查看ls指令的说明】
[*]ls -a 查看所有文件【包括隐藏文件】
[*]ls -l 单列输出查看文件
[*]可以组合 ls -al 单列输出查看所有文件【包括隐藏文件】
[*]指定查看某个目录所有文件:
help指令


[*]获取shell内置命令的信息帮助:help cd
文件目录类

cd指令


[*]显示当前工作目录的绝对路径:        pwd
[*]跳转到指定目录:        cd 目录
[*]回到当前目录的上一级目录:        cd ..
[*]回到自己的家目录:        cd ~ 或者 cd :
mkdir指令


[*]创建目录:        mkdir    要创建的目录
[*]创建多级目录:        mkdir-p要创建的目录
[*]删除目录:        rmdir   要删除的空目录
[*]删除非空目录:        rm -rf   要删除的目录 【强制删除,慎用!】
touch指令


[*]创建空文件:        touch文件名
cp指令


[*]拷贝文件到指定目录:        cp   source   dest
[*]递归拷贝整个文件到指定目录:        cp    -r   source   dest
[*]【强制覆盖,不提示】递归拷贝整个文件到指定目录:        \cp    -r   source   dest
rm指令


[*]删除文件或目录:        rm 要删除的文件
[*]递归删除文件或目录:        rm-r要删除的文件或目录
[*]【强制覆盖,不提示】递归删除整个文件或目录:        rm-rf要删除的文件或目录
mv指令


[*]重命名文件:        mv   旧文件路径   新文件路径   【同一个路径】
[*]移动文件:        mv   旧文件路径   新文件路径
[*]移动并且重命名文件:        mv   旧文件路径   新文件路径【不在同一个路径】
[*]移动整个目录:        mv   旧文件路径/   新文件路径
cat指令


[*]查看文件内容:        cat 要查看的文件
[*]查看文件内容并显示行号:        cat-n    要查看的文件
[*]为了方便浏览,可以带上 管道命令 |more 【意思就是把前一个命令交给 more处理,例如 cat -n/etc/profile | more】
more指令

more指令是基于VI编辑器的文本过滤器,以全屏幕的方式按页展示文本文件内容,有许多快捷键

[*]向下翻一页:        space
[*]向下翻一行:        Enter
[*]离开:        q
[*]向下滚动一屏:        Ctrl + F
[*]返回上一屏:        Ctrl + B
[*]输出当前行的行号:        =
[*]输出文件名和当前行的行号:        :f
less指令


[*]less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。
[*]less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
操作功能说明空白键向下翻动一页;向下翻动一页向上翻动一页;/字串开启向下搜寻『字串』的功能;n向下查找N向上查找?字串开启向上搜寻『字串』的功能;n向上查找N向下查找q离开less这个程序echo指令


[*]输出内容到控制台【例如:echo $HOSTNAME 】:        echo 输出内容
[*]输出字符串【例如:echohello,world 】:       echo字符串
head指令


[*]显示文件的开头部分,默认显示前10行内容:        head         文件
[*]指定显示前15行内容:        head    -n   15    文件
tail指令


[*]显示文件的尾部分,默认显示最后10行内容:        tail      文件
[*]指定显示后15行内容:        tail   -n   15    文件
[*]实时监控文档的所有更新:        tail   -f    文件
覆盖文件内容:   >指令

追加文件内容:   >>指令


[*]ls -l > 文件        【将显示的文件列表 ,覆盖到指定文件】
[*]ls -al >> 文件        【将显示的所有文件列表 ,追加到指定文件】
[*]cat 文件1 > 文件2   【将显示的文件1覆盖文件2内容】
[*]echo "内容">> 文件    【将显示的 "内容" 追加到指定文件】
ln指令

软连接,也称符号链接,类似于快捷方式,主要存放了链接其他文件的路径

[*]给源文件创建一个软链接        ln -s源文件或目录 软链接名
[*]删除软连接        rm 软链接路径
history指令


[*]查看已经执行过的历史命令:        history
[*]查看已经执行过的历史命令 10条:        history   10
[*]执行指定编号的历史命令:        !编号
时间日期类

date指令


[*]显示当前时间:        date
[*]显示当前年份:        date   +%Y
[*]显示当前月份:        date    +%m
[*]显示当前是哪一天:        date    +%d
[*]显示当前年月日时分秒:        date "%Y-%m-%d %H:%M:%S"
[*]设置系统当前时间:        date    -s    字符串时间
cal指令


[*]显示当前日历:        cal
[*]显示指定年的日历:        cal年份
搜索查找类

find指令


[*]从指定目录向下递归的变量各个子目录,讲满足条件的文件或目录显示在终端        【搜索方式有三种: -size        -name        -user】

[*]语法:        find   搜索目录    搜索方式    文件名

[*]按照指定的文件名查找文件:        find   搜索目录   -name文件名
[*]按照指定的用户名查找属于用户名的所有文件:        find   搜索目录    -user用户名
[*]按照指定的文件大【+表示大于,-表示小于,n表示等于,200K,200M,200G】:        find   搜索目录-size   +文件大小
locate指令


[*]locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件
[*]Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
[*]第一次运行必须使用 updatedb指令 创建 locate数据库
which指令

可以查看某个指令在哪个目录下:        which   指令名
grep指令 和 管道符号 |


[*]grep 过滤查找, 管道 | 表示将前一个命令的结果交给后面的命令处理
[*]显示匹配行和行号:         grep   -n   查找内容源文件
[*]忽略字母大小写:             grop   -i      查找内容源文件
压缩和解压类

gzip指令

压缩单个文件【只能将文件压缩为 *.gz文件】:        gzip   文件
gunzip指令

解压缩单个文件:        gunzip   文件.gz
zip指令

压缩整个目录:       zip      -r   生成的压缩包的名字将要压缩的目录
unzip


[*]解压缩目录:        unzip         将要解压缩的内容.zip
[*]解压缩到指定目录:        unzip      -d    解压后的目录      将要解压缩的内容.zip
tar指令


[*]打包指令,最后打包的文件是 .tar.gz 的文件
[*]tar[选项]XXX.tar.gz   打包的内容
[*]选项功能-C产生.tar打包文件-V显示详细信息-f指定压缩后的文件名-Z打包同时压缩-X解包.tar文件
[*]示例:压缩   tar-zcvfXXX.tar.gz   /home/
[*]示例:解压   tar-zxvfXXX.tar.gz
[*]示例:解压   tar-zxvf    XXX.tar.gz-C/opt/tmp/       【-C 固定格式,-C后面指定解压后的位置】
组管理


[*]Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中的每个文件有所有者、所在组、其他组的概念
文件/目录所有者


[*]文件/目录所有者,一般为文件的创建者,也可以修改

[*]查看文件的所有者:        ls -ahl
[*]修改文件的所有者:        chown用户名   文件名
组的创建


[*]创建组:        groupadd组名
[*]创建用户到指定组:        useradd-g用户组名
所在组


[*]当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组

[*]查看文件/目录的所在组:        ls -ahl
[*]修改文件/目录的所在组:        chgrp组名   文件名
其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
改变用户的所在组


[*]添加用户是可以指定该用户添加在哪个组:        useradd-g用户组名
[*]root用户可以改变某个用户的组
[*]改变用户所在组:        usermod-g新组名用户名
[*]改变用户登录的初始目录【用户需要有进入新目录的权限】:        usermod-d目录名用户名
权限

查看权限 :ls -l
-rwxr-xr-x. 1 root root    8440 6月   1 13:55 myhello第0位:-
其余每三个一组

[*]rwx;
[*]r-x;
[*]r-x


[*]0-9位说明

[*]第0位确定文件类型(d,-,I,c,b)
​            -是普通文件
​            I是链接,相当于windows的快捷方式
​            d是目录,相当于windows的文件夹
​            c是字符设备文件,鼠标,键盘
​            b是块设备,比如硬盘
2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 ---User
3.第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group
4.第7-9位确定其他用户拥有该文件的权限---Other

[*]1 :如果是文件,表示硬连接数;如果是目录,表示子目录数
[*]root root :前一个是文件所有者,后一个是文件所在组
[*]8440 :表示文件的大小
[*]6月   1 13:55 :表示最后修改时间
[*]myhello :文件名
rwx权限详解


[*]rwx数字表示 r=4,w=2,x=1
rwx作用到文件


[*]【r】代表可读(read):可以读取,查看
[*]【w】代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
[*]【x】代表可执行(execute):可以被执行
rwx作用到目录


[*]【r】代表可读(read):可以读取,查看目录内容
[*]【w】代表可写(write):可以修改,对目录内创建+删除+重命名目录
[*]【x】代表可执行(execute):可以进入该目录
修改权限-chmod


[*]通过chmod指令,可以修改文件或目录的权限
方式一: + - = 变更权限

u: 所有者
g:   所在组
o:   其他人
a:所有人【u、g、o的总和】

[*]给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限:                                                            chmodu=rwx,g=rx,o=x文件/目录
[*]给文件的其他用户赋予写的权限:   chmodo+w文件/目录
[*]给所有人去掉 执行权限   : chmoda-x文件/目录
方式二: 数字 变更权限


[*]rwx数字表示 r=4,w=2,x=1
u: 所有者
g:   所在组
o:   其他人
a:所有人【u、g、o的总和】

[*]给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限:                                                            chmod751 文件/目录
[*]给文件的其他用户赋予写的权限:   chmodo+w文件/目录
[*]给所有人去掉 执行权限   : chmoda-x文件/目录
修改文件所有者-chown


[*]改变所有者:        chown所有者文件/目录
[*]改变所有者和所在组:        chown新所有者:新组文件/目录
[*]递归改变所有者, -R 如果是目录,对其下所有的子文件或目录递归生效chown -R新所有者文件/目录
[*]递归改变所有者和所在组, -R 如果是目录,对其下所有的子文件或目录递归生效chown -R新所有者:新组文件/目录
修改文件/目录所在组-chgrp


[*]改变所在组:        chgrp新组文件/目录
[*]改变目录下所有的文件的所在组:        chgrp   -R新组文件/目录
crond - 定时循环任务调度

crontab 进行 定时任务的设置
任务调度:指定系统在某个时间执行的特定的命令或程序
任务调度分类:


[*]系统工作:希望重要的工作必须反复执行
[*]个别用户工作:执行某些程序,比如mysql备份
[*]编辑crontab定时任务:        crontab   -e
[*]查询crontab任务:        crontab   -l
[*]删除当前用户所有的crontab任务:        crontab   -r
*/1**** ls -l /etc/ > /tmp/to.txt项目含义范围第一个“*”一小时当中的第几分钟0-59第二个“**”一天当中的第几小时0-23第三个“**”一个月当中的第几天1-31第四个“**”一年当中的第几月1-12第五个“**”一周当中的星期几0-7(0和7都代表星期日)特殊符号:
符号含义示例解释*代表任何时间*每小时的每分钟都执行一次,代表不连续的时间08,12,16***每天的8点0分,12点0分,16点0分都执行一次-代表连续的时间范围05**1-6周一到周六的凌晨5点0分执行命令/代表每隔多久执行一次*/10***每隔10分钟执行一次/n每隔n个单位时间执行一次*/n每隔n分钟、小时等执行一次案例

时间表达式执行时间45 22 * * *每天22点45分0 17 * * 1每周1的17点0分0 5 1,15 * *每月1号和15号的凌晨5点0分40 4 * * 1-5每周一到周五的凌晨4点40分*/10 4 * * *每天凌晨4点开始,每隔10分钟0 0 1,15 * 1每月1号和15号,每周1的0点0分其他指令


[*]终止任务调度:        crontab   -r
[*]列出当前有哪些任务调度:        crontab   -l
[*]重启任务调度:        servicecrondrestart
at定时任务 - 一次性定时计划任务

基本介绍


[*]at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
[*]默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
[*]at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
[*]在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看。
[*]可以通过ps-ef| grep atd查看当前atd是否启动在运行了
[*]向job队列添加一个作业:        at   [选项][时间]
[*]Ctrl + D 结束at命令输入
[*]选项含义-m当指定的任务被完成后,将给用户发送邮件,即使没有标准输出-1atq的别名-datrm的别名-v显示任务将被执行的时间-C打印任务的内容到标准输出-V显示版本信息(注意:这里可能存在重复,应为 -v 或其他选项)-q 使用指定的队列-f 从指定文件读入任务而不是从标准输入读入-t以时间参数的形式提交要运行的任务
[*]指定时间的方法:

[*]接受在当天的hh:mm(小时:分钟)式的时间指定:如果指定的时间已过去,任务将在第二天执行。例如,04:00。
[*]使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
[*]采用12小时计时制:在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如,12pm。
[*]指定命令执行的具体日期:指定格式为monthday(月日)、mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如,04:00 2021-03-15。
[*]使用相对计时法:指定格式为now + count time-units,其中now就是当前时间,time-units是时间单位,可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,例如几天,几小时。例如,now + 5 minutes。
[*]直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

[*]删除指定的任务:        atrm    编号
[*]查看任务列表:        atq
Linux分区

基本介绍


[*]Linux来说无论有几个分区,分给哪一录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
[*]Linux采用了一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘说明


[*]Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
[*]对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd"表明分区所在设备的类型,这里是指IDE硬盘了。"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。【了解即可】
[*]对于SCSI硬盘则标识为"sdx~",SCSI硬盘是用"sd"来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
查看所有设备挂载情况

查看所有设备挂载情况:        lsblk    或者    lsblk-f【信息更全】
添加一块硬盘

分区命令:        fdisk   /dev/sdb
格式化指令:        mkfs-text4   /dev/sdb1
挂载指令【挂载:将一个分区和一个目录联系起来】:        mount设备目录      目录
卸载硬盘:        umount设备目录      或者   umount目录

[*]值得注意的是:用命令行挂载的关系是临时的,当系统重启之后,挂载的关系会自动消失!!!
永久挂载/自动挂载


[*]通过修改/etc/fstab实现挂载
[*]添加完成后 执行mount-a立刻生效
查看磁盘使用情况


[*]查看系统整体磁盘使用情况:        df   -h
[*]查询指定目录的磁盘占用情况【默认当前目录】:        du   -h   目录
[*]-s指定目录占用大小汇总
[*]-h带计量单位
[*]-a含文件
[*]--max-depth=1   子目录深度
[*]-c列出明细的同时,增加汇总值
磁盘情况实用指令


[*]统计文件夹下的文件个数:        ls-l/文件夹|grep"^-"|wc-l
[*]统计文件夹下的目录个数:        ls-l/文件夹|grep"^d"|wc-l
[*]统计文件夹下的文件个数,包括子文件夹里的:        ls-lR/文件夹|grep"^-"|wc-l
[*]统计文件夹下的目录个数,包括子文件夹里的:        ls-lR/文件夹|grep"^d"|wc-l
[*]以树状显示目录结合tree 目录【先 yuminstalltree 安装一下 】
网络配置


[*]windows 下查看网络配置:        ipconfig
[*]Linux下查看网络配置:        ifconfig
[*]测试主机之间网络连通性:        ping    目的主机的ip地址
[*]网络环境配置的具体配置方式:

[*]自动获取:   登录后,通过界面的来设置自动获取ip
特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样
[*]指定ip:    直接修改配置文件来指定ip,并可以连接到外网
​         编辑 vim/etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="23626adf-3676-45b2-938b-e6b9864816d8"
DEVICE="ens33"
ONBOOT="yes"
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
[*]重启网络服务:    servicenetworkrestart
设置主机名


[*]为了方便记忆,设置主机名
[*]查看当前主机名:                hostname
[*]修改主机名在文件:                  /etc/hostname指定
[*]重启生效
如何设置主机名和hosts映射?


[*]windows下   过某个主机名找到对应windows系统:   C:\Windows\System32\drivers\etc\hosts文件指定
[*]Linux系统下    通过某个主机名找到对应Linux系统:        在/etc/hosts    文件中指定
Hosts是什么?

​    Hosts 是一个文本文件,用于记录IP和Hostname【主机名】之间的映射关系
DNS


[*]DNS是 域名系统
[*]是互联网上作为域名和IP地址相互映射的一个分布式数据库
示例:

[*]当用户在浏览器输入了www.baidu.com
[*]浏览器先检查浏览器缓存中有没有该域名解析IP地址,
[*]有就先调用这个IP完成解析;
[*]如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。
[*]这两个缓存,可以理解为本地解析器缓存
[*]一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)。
[*]如在cmd窗口中输入:
[*]ipconfig/displaydns            //DNS域名解析缓存
[*]ipconfig/flushdns                  //手动清理DNS缓存
[*]如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
[*]如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP则到域名服务DNS进行解析域
[*]用户输入   →   浏览器缓存    →   DNS缓存【操作系统中】→    hosts文件→   DNS【公网上】
进程管理


[*]在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
[*]每个进程都可能以两种方式存在的。前台与后台。
[*]所谓前台进程就是用户目前的屏幕上可以进行操作的。
[*]后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
[*]一 般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程


[*]显示系统执行的进程,以及执行状况:        ps
[*]显示当前终端的所有进程信息:        ps-a
[*]以用户的格式显示信息:        ps-u
[*]显示后台进程运行的参数:        ps-x
[*]通常组合使用:             ps-aux| more
ps指令详解

1. ps命令使用示例


[*]命令格式:ps -aux | grep xxx

[*]示例:查看系统中是否存在sshd服务

2. 指令说明(System V展示风格)


[*]USER:用户名称
[*]PID:进程号
[*]%CPU:进程占用CPU的百分比
[*]%MEM:进程占用物理内存的百分比
[*]VSZ:进程占用的虚拟内存大小(单位:KB)
[*]RSS:进程占用的物理内存大小(单位:KB)
[*]TT:终端名称,一般显示为缩写
[*]STAT:进程状态

[*]S:睡眠状态
[*]s:会话的先导进程
[*]N:拥有比普通优先级更低的优先级
[*]R:正在运行
[*]D:短期等待
[*]Z:僵死进程
[*]T:被跟踪或被停止

[*]STARTED:进程的启动时间
[*]TIME:CPU时间,即进程使用CPU的总时间
[*]COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
这个命令和说明对于了解Linux系统中进程的状态和性能非常有帮助,可以帮助用户监控和管理正在运行的进程。
全格式显示当前所有的进程,查看进程的父进程


[*]全格式显示当前所有的进程:        ps-ef 【-e显示所有进程,-f全格式】
[*]可以带上grep 过滤:        ps -ef| grep 进程 【例如 sshd 远程连接进程】
终止进程


[*]通过进程号终止进程:        kill   进程号
[*]通过进程名称终止进程【子进程也会终止】:        killall   进程名称
[*]通过进程号终止进程【强制终止】:        kill-9   进程号
查看进程树


[*]查看进程树:        pstree
[*]显示进程的PID:        pstree   -p
[*]显示进程的所属用户:        pstree   -u
服务管理


[*]服务本质就是进程,但是运行在后台,通常会监听某个端口,等待其他程序的请求,比如mysql等,因此又称为守护进程。
service管理指令


[*]service服务名
[*]CentOS7.0很多服务用 systemctl来管理
[*]service 指令管理的服务 可以在 /etc/init.d/ 查看【ls -l/etc/init.d/】
[*]查看所有的系统服务:            setup
服务的运行级别

Linux系统有7种运行级别(runlevel):
常用的是级别3和5

[*]运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
[*]运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
[*]运行级别2:多用户状态(没有NFS),不支持网络 运行级别
[*]3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别
[*]4:系统未使用,保留 运行级别
[*]5:X11控制台,登陆后进入图形GUI模式 运行级别
[*]6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
Linux开机流程

开机 → BIOS → /boot → systemd → 运行级别 → 运行级对应的服务
设置各个运行级别的自启动/关闭


[*]查看服务chkconfig--list | grepxxx
[*]chkconfig服务名--list
[*]chkconfig--level5服务名on/off
[*]chkconfig重新设置服务后,需要重启后生效
systemctl管理指令


[*]基本语法:        systemctl    服务名
[*]systemctl 指令管理的服务在          /usr/lib/systemd/system 查看


[*]关闭或启动了服务后,立即生效,但是只是临时生效,重启系统后,还是会回去以前的服务的设置
[*]希望设置某个服务的自启动或关闭永久生效,还是要使用systemctlenable服务名;或   systemctldisable服务名 ;
systemctl设置服务的自启动状态


[*]查看服务的自启动状态:        systemctllist-unit-files
[*]针对某项服务查看:        systemctllist-unit-files | grep 服务名
[*]设置服务开机启动:        systemctlenable服务名
[*]关闭服务开机启动:        systemctldisable服务名
[*]查询某个服务是否是自启动:        systemctlis-enabled服务名
打开或关闭指定端口


[*]打开端口:        filewall-cmd --permanent --add-port=端口号/协议
[*]查看 端口/协议:        netstat-anp | more
[*]关闭端口:        filewall-cmd --permanent --remove-port=端口号/协议
[*]重新载入,才能生效:        filewall-cmd --reload
[*]查询端口是否开放:        filewall-cmd --query-port=端口号/协议
动态监控进程


[*]top 也是用来显示正在执行的进程。但top和ps最大的不同在于,top 可以在执行一段时间更新正在运行的进程
[*]指定top命令每隔几秒更新。默认3秒:        top -d 秒数
[*]top命令不显示任何闲置或僵死进程:        top -i
[*]通过指定监控进程ID来针对监控某个进程的状态:        top -p

交互操作

[*]以CPU使用率排序,默认就是此项:        P
[*]以内存的使用率排序:        M
[*]以PID排序:        N
[*]退出top             q
查看网络状况-netstat


[*]按一定顺序排列输出:        netstat-an
[*]显示哪个进程在调用:        netstat-p
软件包管理


[*]rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。
[*]RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
[*]Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。
查询rpm包相关信息


[*]查询已安装的rpm列表:        rpm-qa
[*]指定查询已安装的rpm列表:        rpm-qa | grep 软件包名
[*]查询软件包是否安装:        rpm-q软件包名
[*]查询软件包信息:        rpm-qi软件包名
[*]查询软件包中的文件:        rpm-ql软件包名
[*]查询文件所属的软件包:        rpm-qf文件全路径
卸载rpm包


[*]卸载删除指定rpm包:        rpm-eRPM包的名称
[*]强制卸载删除指定rpm包【不推荐】:        rpm-e--nodeps   RPM包的名称
安装rpm包


[*]安装指令:        rpm   -ivh    RPM包的全路径名称【i=install安装;v=verbose提示;h=hash进度条】
yum


[*]Yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

[*]查询yum服务器是否有需要安装的软件:        yumlist | grep 软件列表
[*]安装指定的yum包        :yuminstall软件包
Shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell执行的方式


[*]创建时,约定俗成 .sh结尾
[*]脚本以 #!/bin/hash开头
[*]脚本需要有可执行权限
[*]如果要运行,需要赋予权限 可以 chmodu+x脚本名
[*]也可不赋予权限 ,但是需要用sh 脚本名 来运行
Shell脚本的多行注释

:内容

Shell变量


[*]Linux中 Shell中的变量分为,系统变量和用户自定义变量
[*]系统变量: $HOME、$PWD、$SHELL、$USER等等,比如echo $HOME
[*]显示当前shell中的所有变量:   set
Shell变量的自定义


[*]定义变量:变量名=值
[*]撤销变量: unset变量
[*]声明静态变量:readonly变量,注意不能unset
Shell变量规则


[*]变量名称可以由字母、数字、下划线组成,但是不能以数字开头
[*]等号两侧不能有空格
[*]变量名称一般习惯为大写,【规范】
[*]将命令的返回值赋给变量,用 反引号``
[*]A=`date`      date命令的返回值赋给变量A
A=$(date)等价于反引号
设置环境变量


[*]将Shell变量输出为环境变量/全局变量:        export变量名=变量值
[*]让修改后的配置信息立即生效::        source配置文件
[*]查询环境变量的值:        export$变量名
位置参数变量


[*]执行Shell脚本时,可以通过位置参数变量来获取到命令行的参数信息
[*]比如在命令行输入:       ./myshell.sh200100
[*]变量符号功能描述$nn为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如$$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体$@这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待$#这个变量代表命令行中所有参数的个数
预定义变量


[*]预定义变量就是Shell设计者事先定义好的变量,可以直接在shell脚本中使用
[*]当前进程的进程号【PID】       $$
[*]后台运行的最后一个进程的进程【PID】         $!
[*]最后一次执行的命令的返回状态。      $?
[*]​    $?       如果这个变量值为0,证明上个命令正确执行;
[*]​    $?       如果这个变量的值为非0,则证明上个命令执行不正确
运算符


[*]$[运算式]或者$((运算式))   或者    exprm+n【expr 间要有空格,结果如果要赋给变量用反引号】
[*]expr \*乘   /除    %取余
条件判断


[*]if [ condition ] 非空为true,可以使用$?验证 (0为true,   >1为false)
[*]字符串比较=
[*]两个整数比较    小于lt       小于等于le      等于eq   大于gt   大于等于ge      不等于ne
[*]按文件权限判断       有读的权限-r         有写的权限-w       有执行的权限-x
[*]按照文件类型判断      文件存在并且是常规文件-f          文件存在-e      文件存在并且是个目录-d
流程控制

单分支

if [ 条件判断式 ]
then
        代码
fi多分支

if [ 条件判断式 ]then        代码elif [ 条件判断式 ]
then
        代码
ficase语句

case $变量名 in
"值1")
        代码
;;
"值2")
        代码
;;
*)
        代码
;;
esac循环控制

for循环

方式1
for 变量 in 值1 值2 值3
do
        代码
done方式2
for ((初始值;循环控制条件;变量变化))
do
        代码
doneWhile循环

while[ 条件判断式 ]
do
        代码
done读取控制台输入-read


[*]指定读取值的提示信息:          read -p "提示信息"变量名
[*]指定读取值时等待的时间 秒,如果没有在知道时间内输入,不在等待:             read   -t   时间   -p "提示信息"变量名
函数

shell编程有系统函数也可以自定义函数。
系统函数

basename


[*]返回完整路径最后 / 的部分,常用与获取文件名:        basename [ pathname ]
[*]带上 suffix后缀,basename 会将前缀和后缀都去掉:         basename [ pathname ] [ suffix ]
[*] 也可以是 string
dirname


[*]返回完整路径最后 / 的前面部分,常用于返回路径部分
[*]用法和basename 相反
自定义函数

定义

functionfunname(){
        代码
        return int
}调用

funname [值]
来源:https://www.cnblogs.com/zydevelop/p/18238568/zy_linux
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Linux学习总结