命令基础、软件安装与卸载)
一、shell简介shell命令解释器根据输入的命令执行相应命令。查看当前系统有哪些shellcat/etc/shells /bin/sh 已经被/bin/bash取代 /bin/bash Linux默认的shell /bin/ksh Kornshell有ATT Bell lab 发展出来的兼容于bash /bin/tcsh 整合 C Shell提供更多的功能 /bin/csh 被/bin/tcsh所取代 /bin/zsh 基于ksh发展出来的功能更强大的shell查看当前系统正在使用的shellecho$SHELLecho回显显示字符串$取值把命令解释器取出SHELL指命令解释器env把当前系统所有的环境变量都显示出来top文字版的任务管理器kill杀死进程ps查看系统级下的进程状态jobs查看当前用户下的进程状态alias给命令起别名umask[-p]-S[mode]umask指定用户创建文件时的掩码其中的mode和chmod的命令中的格式一样。如果不用mode参数则显示当前的umask设置。如果使用-S则以符号形式显示设置。主键盘快捷键功能快捷键助记上Ctrl-pprevious下Ctrl-nnext左Ctrl-bbackward右Ctrl-fforwardDelCtrl-ddelete光标后面的HomeCtrl-athe first letterEndCtrl-eendBackspaceBackspacedelete光标前面的热键呼出终端Ctrl-p二、类Unix系统目录结构1./ 根目录bin 系统可执行程序如命令 boot 内核和启动程序所有和启动相关文件都存在这里 grub 引导器相关文件 dev 存放设备文件 home 用户的主目录。下面是自己定义的用户名的文件夹 etc 系统软件的启动和配置文件系统在启动过程中需要读取的文件都在这个目录。如LIL0参数、用户账号和密码 lib 系统程序库文件这个目录里存放着系统最基本的动态链接共享库类似于Windows下的system32目录几乎所有的应用程序都需要用到这些共享库 media 挂载媒体设备、如光驱、U盘等 mnt 目录是让用户临时挂载别的文件系统如挂载Windows下的某个分区ubuntu默认还是挂载在/media目录 opt 可选的应用软件包很少使用 proc 这个目录是系统内存的映射我们可以直接访问这个目录来获取系统信息。也就是说这个目录的内容不在硬盘而是在内存里 sbin 管理员系统程序 selinux srv sys udev用到的设备目录树/sys反映你机器当前所接的设备 tmp 临时文件夹 root 管理员宿主目录家目录 usr 用户资源管理目录 bin 应用程序 game 游戏程序 include lib 应用程序的库文件 lib64 local 包含用户程序等 sbin 管理员应用程序2.Linux系统文件类型普通文件- 目录文件d 字符设备文件c 块设备文件b 软连接l 管道文件p 套接字s 未知文件。三、基础命令行a.目录、文件命令1、lsls[参数][目录]-a#显示所有档案及目录ls内定将档案名或目录名称为“.”的视为影藏不会列出-A#显示除影藏文件“.”和“…”以外的所有文件列表-l#与“-C”选项功能相反所有输出信息用单列格式输出不输出为多列-h#以人类的方式查看-F#在每个输出项后追加文件的类型标识符具体含义“”表示具有可执行权限的普通文件“/”表示目录“”表示符号链接“|”表示命令管道FIFO“”表示sockets套接字。当文件为普通文件时不输出任何标识符类型标识符-b#将文件中的不可输出的字符以反斜线“”加字符编码的方式输出-c#与“-lt”选项连用时按照文件状态时间排序输出目录内容排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时则排序的一句是文件的状态改变时间-d#仅显示目录名而不显示目录下的内容列表。显示符号链接文件本身而不显示其所指向的目录列表-f#此参数的效果和同时指定“aU”参数相同并关闭“lst”参数的效果-i#显示文件索引节点号inode。一个索引节点代表一个文件–file-type#与“-F”选项的功能相同但是不显示“”-k#以KB千字节为单位显示文件大小-l#以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等-m#用“,”号区隔每个文件和目录的名称-n#以用户识别码和群组识别码替代其名称-r#以文件名反序排列并输出目录内容列表-s#显示文件和目录的大小以区块为单位-t#用文件和目录的更改时间排序-L#如果遇到性质为符号链接的文件或目录直接列出该链接所指向的原始文件或目录-R#递归处理将指定目录下的所有文件及子目录一并处理–full-time#列出完整的日期与时间–color[WHEN]#使用不同的颜色高亮显示不同类型的。2、Whichwhichls查看制定命令所在路径如何省略用户头vi .bashrc添加PS1$3、pwdpwd查看当前所在目录4、mkdirmkdir[OPTION]DIRECTORY 创建目录DIRECTORY可以一次创建多个。如果OPTION是-p表示可以连同父目录一起创建。5、rmdirrmdir[OPTION]DIRECTORY 删除空目录可以一次删除多个。OPTION如果是-p表示可以连同空的父目录一起删除。 空目录只包含.和..的目录为空目录。6、touchtouch[OPTION]FILE 将每个文件的访问及修改时间都更新为目前的时间 如果文件不存在则创建一个字节数为0的文件7、rmrmfile删除文件或目录-r递归删除-f强制删除8、mvmvfile1 file2 文件重命名 移动文件9、cp拷贝文件cpfile1 file2cpfile1 dir/cpfile1../ 拷贝目录cpdir1 dir2#如果dir1不是空的会显示“略过目录”cp-rdir1 dir2cp-rdir1 ~/cp-adir1 dir2cp-adir1 ~/-r#递归-a#all全部-r和-a的区别-a的拷贝过去的最后修改时间不会改变b.文件读取命令行1.catcatfile查看文件内容输出到终端 如果cat后没跟文件名则读取终端的标准输入遇到\n后输出标准输出终端下输入Ctrl-d表示结束tacfile将文件内容倒序输出到终端2、more、lessmore[OPTION]FILEless[OPTION]FILE 查看文本文件内容屏幕显示完一屏就等待用户按下任意键再滚动到下一屏如果中途不想继续看下去可以按Ctrl-c或Ctrl-q终止显示3、head、tailhead[OPTION]FILE 显示指定文件的前几行。如果没有指定文件将从标准输入键盘上读取如果没有指定要显示的行数则默认显示前10行指定行数head-5filetail[OPTION]FILE 显示指定文件的后几行。tail-5file4、treetree 按结构树的形状显示目录和文件5、du、dfdu-h查看每个文件的大小df-h查看磁盘的占用大小6、ln链接有两种一种被称为硬链接另一种被称为软连接符号链接。硬链接链接文件和被链接文件必须位于同一个文件系统中并且不能建立指向目录的硬链接。特征修改任意的链接或被链接文件所有文件内容都会修改。lnhello word_hstatfile.h 硬链接原理使用Inode/唯一编号 删除硬链接的时候操作的是硬链接基数-1软连接ln-shello word_s四、文件属性和用户用户组1、whoamiwhoami查看当前登录用户2、chmod1文字设定法chmod [who] [|-|] [mode] 文件名 操作对象who可是下述字母中的任一个或它们的组合 u表示“用户user”即文件或目录的所有者 g表示“同组group用户”即与文件属主有相同组ID的所有用户 o表示“其他others用户” a表示“所有all用户”它表示系统默认值 操作符号 添加某个权限 -取消某个权限 赋予某个权限 mode表示权限可用下述字母的任意组合 r可读 w可写 x可执行2数字设定法chmod [mode] 文件名 数字表示的属性 0表示没有权限 1表示可执行权限 2表示可写权限 4表示可读权限3、chown、chgrpchown[OPTION]...[OWNER:GROUP]FILE...chown[OPTION]...-referenceRFILE FILE...-R递归式地改变指定目录及其下的所有子目录和文件的拥有者。-v显示chown命令所做的工作。4、adduser/passwd/deluser在/etc目录下的passwd文件中有用户和用户组信息sudoadduser username 添加用户sudodeluser username 删除用户sudochownusername filenamesudochown新用户名 待修改文件sudoaddgroup g88 添加用户组sudodelgroup g88 删除用户组sudochgrpg88 a.csudochgrp新用户组名 待修改文件示例把一个文件改为nobody用户和nogroup用户组所有sudochownnobody:nogroup fiel1五、查找与检索1、find找文件find./-typel通过文件类型搜索文件find./-name*.jpg通过文件名字搜索文件find./-maxdepth2-name*.jpg-maxdepth2指find的目录层级find./-size20M-size-50M通过文件大小查找文件大于20M小于50M-atime# access 最近访问时间-mtime# modify 最近更改时间-ctime# change 最近改动时间按天find./-ctime1find/usr/-name*tmp*-execls-l{}\;如果执行rm-r不询问find./-name*tmp-okrm{}\;如果执行rm-r询问 -xargs将find搜索的结果集执行某一指定命令。当结果集数量过大时可以分片映射提高效率find/usr/-name*tmp*|xargsls-ld-xargs和-exec的区别 1-xargs 与|同时使用 2-xargs 当结果集数量过大时可以分片映射提高效率 3-xargs 以“空格”作为分割依据find./-maxdepth1-typef-print0|xargs-print0ls-l#以“null”作为拆分依据2、stat查看Inode节点stat文件名3、grep根据文件内容检索grep-rcopy./-ncopy文件内容 -n会显示出行号4、psps命令用于监控后台进程的工作情况因为后台进程是不合屏幕键盘等输出设备进行通信所以需要检测其情况ps[选项]# 显示当前跟用户交互的进程-e# 显示所有进程-f# 全格式-h# 不显示标题-l# 长格式-w# 宽输出-r# 只显示正在运行的进程-a# 即all查看当前系统所有用户的所有进程-u# 查看进程所有者及其他一些详细信息-x# 显示没有控制终端的进程psaux|grepcupsd# 检索进程结果集5、locate查找符合条件的文件六、软件包安装1、apt-getsudoapt-getupdate 更新本地软件列表sudoapt-getinstall软件名 安装软件sudoapt-getremove 软件名 卸载软件aptitude与apt-get类似sudoaptitudeshow tree 查看tree是否已经安装这是apt-get没有的2、deb包安装sudodpkg-ixxx.deb 安装deb软件包命令sudodpkg-rxxx.deb 删除软件包命令sudodpkg-r--purgexxx.deb 连同配置文件一起删除命令sudodpkg-infoxxx.deb 查看软件包信息命令sudodpkg-Lxxx.deb 查看文件拷贝详情命令sudodpkg-l查看系统中已安装软件包信息命令sudodpkg-reconfigure xxx 重新配置软件包命令3、源码包安装解压缩源码包cd dir./configure检测文件是否缺失创建Makefile检测编译环境make编译源码生成库和可执行程序sudo make install把库和可执行程序安装到系统路径下sudo make distclean删除和卸载软件七、压缩包管理1、tartar [主选项辅选项] 文件或目录打包tar可以为文件和目录创建档案。利用tar命令用户可以为某一特定文件创建档案也可以在档案中改变文件或者向档案中加入新的文件。使用该命令时主选项是必须要有的辅选项是辅助使用的可以选用。tar-zcvf要生成的压缩包名带.tar.gz后缀 压缩文件主选项c# 创建新的档案文件。如果用户想备份一个目录或一些文件就要选择这个选项create常用r# 把要存档的文件追加到档案文件的末尾t# 列出档案文件的内容查看已经备份了哪些文件u# 更新文件。用新增的文件取代原备份文件如果在备份文件中找不到要更新的文件则把它追加到备份文件的最后。x# 从档案文件中释放文件常用辅选项z# 指gzip来压缩/解压缩文件加上该选项后可以将档案文件进行压缩但还原时也一定要使用该选项进行解压缩常用v# 指压缩说明详细报告tar处理的文件信息常用f# 指file文件使用档案文件或设备这个选项通常是必选的常用k# 保存已经存在的文件m# 在还原文件时把所有文件的修改时间设定为现在M# 创建多卷的档案文件以便在几个磁盘中存放W# 每一步都要求确认j# 用bzip2来压缩/解压文件加上该选项后可以将档案文件进行压缩但还原时也一定要使用该选项进行解压缩常用2、rar打包把dir压缩成newdir.rarrara-rnewdirdir解包把newdir.rar解压缩到当前目录unrarx newdir.rar3、zip打包zip-rdir.zipdir解包unzipdir.zip其它linux创建终端快捷键 新开终端CtrlShiftn 创建终端标签CtrlShiftt 切换标签Altnn11、通过运行程序名称找到文件运行路径$ pgrep-xmy_server12345$ readlink-f/proc/12345/exe /home/user/projects/my_server/bin/my_server2、嵌入式中如何自启守护进程并在被杀死立即重启a. install.sh#!/bin/bashchmod777./bs_scpchmod777./start_app.shcp./bs_scp.service /etc/systemd/system/ systemctl daemon-reload systemctlenablebs_scp systemctl start bs_scp systemctl status bs_scpb. start_app.sh#!/bin/bash# 定义源目录和目标目录路径SOURCE_DIR./temp# 替换为实际的源目录路径TARGET_DIR./# 替换为实际的目标目录路径# 检查源目录是否存在并且是目录if[-d$SOURCE_DIR];thenechoupdate directory exists:$SOURCE_DIR# 复制源目录中的所有文件和子目录到目标目录覆盖同名文件cp-r$SOURCE_DIR/.$TARGET_DIR/echoCopied contents from$SOURCE_DIRto$TARGET_DIR# 删除源目录及其内容rm-rf$SOURCE_DIRechoRemoved source directory:$SOURCE_DIRelseechoupdate directory does not existfiwhiletrue;dosleep0.5sLD_LIBRARY_PATH${LD_LIBRARY_PATH}:$(pwd)./bs_scpdonec.bs_scp.service[Unit]Descriptionbs_scp#服务的描述方便管理员识别。Afternetwork.target#表示该服务在网络服务就绪后才启动避免因网络未准备好而出错。[Service]Typesimple# 表示 ExecStart 启动的进程就是主进程不会 fork。Userroot#以 root 身份运行。WorkingDirectory/root/app#设置工作目录start_app.sh 中的相对路径 ./bs_scp 就是相对于这个目录。ExecStart/root/app/start_app.sh#服务启动时要执行的命令这里是运行 start_app.sh 脚本。ExecStop/usr/bin/kill-15$MAINPID#服务停止时执行的命令向主进程发送 SIGTERM15信号优雅终止。Restarton-failure#当服务进程异常退出非正常停止时systemd 会自动重启它。[Install]WantedBymulti-user.target#表示该服务在系统进入多用户模式正常启动时被启用从而实现开机自启。