ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

银河麒麟Linux命令实战:从高频命令到避坑指南

银河麒麟Linux命令实战:从高频命令到避坑指南 1. 银河麒麟的“底子”命令兼容性比想象中复杂刚拿到银河麒麟服务器系统的人大多会有一个错觉这不就是套了层皮的Linux吗apt、yum、systemctl、ls、cd这些命令肯定全通用。这个判断大方向没错但真正上手之后你会在一些不起眼的地方卡住而且卡得莫名其妙。我最早接触的是银河麒麟V10 SP3ARM架构的ISO镜像装到国产服务器上。第一感觉是界面风格和CentOS很像毕竟同源同宗但深挖之后发现它基于Ubuntu的底层构建同时融合了CentOS的很多管理习惯这就导致一个局面你用apt的时候它好使你用yum的时候它也好使可一旦用到某些系统级路径、内核模块和服务管理方式两边的手感就开始打架了。这种“杂交”属性带来的最大问题不是命令本身不能用而是很多资料、博客、视频里的操作范例不能直接照抄。如果你搜到的是CentOS 7的教程里面有yum install xxx在麒麟上可能能跑但包源未必对得上。如果你搜到的是Ubuntu 20.04的教程里面有apt install xxx在麒麟上通常也能跑但某些依赖包的版本差异会让你陷入依赖地狱。所以学习银河麒麟的Linux命令第一步不是背命令而是先搞清楚你面对的这个系统到底是个什么“物种”。拿实际场景来说我曾在麒麟V10 SP3上尝试安装一个网络诊断工具按CentOS习惯用yum装结果提示找不到软件包。切到apt装上了但运行的时候报缺少某个库文件。最后查了半天发现这个库文件在系统的另一个目录下需要手动做软链才能被程序识别。这种问题在纯CentOS或纯Ubuntu上很少遇到但在麒麟上非常典型。所以这篇东西我不想写成一本命令大全而是想从一个真实使用的角度把你在银河麒麟上最常用、最有坑、最需要理解的Linux命令串一遍。重点不是背参数而是知道为什么在这里要这么用以及用的时候会踩到哪些坑。系统版本不同、CPU架构不同命令的运行结果和方法可能完全不一致这个认知比任何一条命令都重要。我用的环境是银河麒麟V10 SP3ARM64架构root权限操作。这些命令在x86架构的麟麟上也能跑但个别输出信息会有差异比如某些硬件的设备名称、中断号、驱动模块名ARM和x86会不一样。后面涉及的地方我会单独标注。2. 再聊删除与复制rm、cp这些“高频操作”到底该怎么用才不后悔不少人在Linux上的第一个需求就是删文件夹或者复制大文件。原因很现实服务器磁盘满了要清理日志要归档备份要转移。热搜词里“linux删除文件夹命令”排在前面说明大家都在找这个。2.1 rm的危险层级从删文件到删根目录删除文件夹最基本的命令是rm -rf这玩意儿用好了是效率神器用不好是职业生涯终结者。它的结构是rmremove -r递归 -f强制不提示组合起来的效果就是“不要问我直接干掉整个目录树”。在普通Linux上你在/home/user/project目录下执行rm -rf删的是项目本身在银河麒麟上行为逻辑没有任何区别。但真正的问题在于新手经常会在路径上犯错。比如rm -rf /home/user/project /注意最后那个空格和斜杠。这行命令的本意可能是删除project目录但因为在路径末尾多敲了一个空格再加根目录符号系统会把它解析成先删/home/user/project再删整个根目录。如果在root权限下执行结果就是在几十秒内把整个系统清空。银河麒麟对root用户的保护相比普通Linux并没有增加额外屏障删除就是删除不会因为你是国产系统就手下留情。我自己的习惯是三条铁律第一不使用root账号做日常操作用普通用户加sudo第二删除目录前先cd进去用ls确认一遍内容第三在rm -rf命令的路径中不使用通配符比如rm -rf /data/*这种写法一旦路径变量为空会变成rm -rf /后果和上一个案例一样。如果要删除一个目录但保留外层结构正确做法是rm -rf /data/logs/这个斜杠的作用是告诉系统“删除logs目录里的所有内容并删除logs目录本身”。如果你想清空logs目录但保留它应该是rm -rf /data/logs/*区别在于最后一个星号。前者删除目录后者只删目录中的内容。高级一点的做法是用find配合删除比如只删除一周前的日志find /data/logs -type f -mtime 7 -exec rm -f {} \;这条命令在麒麟上运行没问题但它有个隐藏性能风险如果/data/logs下有几万个小文件-exec每匹配一个文件就要启动一次rm进程速度会非常慢。更优的写法是用管道加xargsfind /data/logs -type f -mtime 7 -print0 | xargs -0 rm -f-print0和-0的组合是为了处理文件名中的空格和特殊字符这个细节在纯中文环境里尤其重要因为有些人建目录喜欢带中文和空格默认的find输出方式会把一个文件名拆成两段后面的rm就会报错。2.2 cp复制的大坑-a、-r、-l的区别你不知道的话迟早出事复制操作里热搜词提到一个非常细节的命令linux cp -lf。这不是一个常见的组合但能搜这个的人大概率是遇到了硬链接复制的问题。先拆解一下cp的常用参数-r递归复制目录但默认不保留文件属性复制出来的文件时间戳、所有者都是新的。-a归档模式在递归的基础上保留所有属性包括权限、时间戳、硬链接结构和符号链接本身。-f强制覆盖如果目标文件存在且无法打开先尝试删除再复制。-l创建硬链接而不是复制文件内容。-d复制符号链接本身而不是复制链接指向的目标文件内容。cp -lf这个组合的实际含义是“以硬链接方式创建复制遇到已存在的同名文件时强制替换”。硬链接的特点是多个文件名指向同一个inode用ls -l看文件大小都一样但它们其实是同一个文件数据的不同入口。修改其中任何一个另一个也会变。这个特性在某些场景下很有用比如你要在同一个分区内做一个“看起来是复制、其实不占额外空间”的快照目录。但是硬链接有一个致命限制它不能跨文件系统。也就是说/data目录在根分区/backup目录在单独挂载的一块硬盘上比如/dev/sdb1那cp -l就执行不了。你只能换回普通复制cp -a /data /backup/data_bak这里用-a而不是-r就是因为普通复制会丢失原有文件的属性和权限。在银河麒麟上特别是涉及系统配置文件备份时如果你用了-r而不是-a复制出来的文件owner会变成当前用户权限也可能被“reset”掉后续服务启动时就会报权限错误。备份/etc目录下的配置建议这样操作cp -a /etc /backup/etc_bak_$(date %F)$(date %F)会自动生成当天日期比如etc_bak_2025-01-15这样每次备份不会互相覆盖你也能清楚知道哪份是最新的。另外一个cp的细节是复制大文件时的进度反馈问题。普通cp复制几个G的文件终端会一直在那里“无响应”你不知道它到底是在跑还是卡住了。这时候两种方案一个是用CtrlT查看系统当前在执行什么系统调用另一个是干脆换用rsync来显示进度rsync -avh --progress /data/bigfile.iso /backup/rsync在银河麒麟上默认自带没有的话就装一下apt install rsync。它的优势是断点续传、增量同步、还能通过SSH远程复制日常备份场景里比cp好用太多。这个问题放到后面网络命令部分再展开。3. 查文件、查DNS、查用户这些“查询类”命令知道比会用更重要热搜词里有一类非常高频的搜索“linux find命令查找文件”“linux列出所有用户和群组命令”“linux如何用命令查dns”。这类命令的共同点是它们不是在“操作”系统而是在“读取”系统状态。但正因如此它们的输出格式、权限要求、执行效率反而更容易坑人。3.1 find的完整逻辑从路径到动作的拆解查找文件最常用的就是find。基本结构是find [路径] [匹配条件] [动作]比如查找整个根目录下所有.conf文件find / -name *.conf -type f这里的-type f是限制只找普通文件不加的话会把目录、管道、套接字也列出来输出会非常乱。在银河麒麟上执行这个命令你很可能遇到一堆“Permission denied”的错误原因是普通用户没有权限进入某些目录。两条方案要么用sudo提升权限要么把错误输出丢弃只看正确结果find / -name *.conf -type f 2/dev/null2/dev/null是把错误信息重定向到空设备眼不见为净。这个写法在日常操作里极其常用。find还有一个高效的场景是按时间查找find /var/log -mtime -3-mtime -3表示最近3天内修改过的文件30表示30天以前。这个参数在排查“哪个文件今天被动过”时非常有用。按大小查找也很实用。磁盘满了想知道哪个文件最大find / -type f -size 500M -exec ls -lh {} \; 2/dev/null这个命令找出所有大于500MB的文件并显示它们的详细大小。在银河麒麟上跑这个命令要有点耐心全盘扫描的耗时会比较长。如果只想查某个数据目录把路径换掉就行。3.2 DNS查询nslookup、dig的区别与用法查DNS这个需求在配置服务器网络、排查域名解析故障时一定会遇到。银河麒麟自带的最基础工具是nslookup和host但dig在某些精简安装的版本里没有预装需要自己装dnsutils对应Ubuntu的包管理方式或bind-utils对应CentOS的方式。nslookup的典型用法nslookup www.example.com默认走的是系统/etc/resolv.conf里配置的DNS服务器。你也可以指定查询某台DNS服务器nslookup www.example.com 8.8.8.8但nslookup的输出信息比较简略排错不够用。更推荐用digdig www.example.comdig的基本输出分为几段QUESTION SECTION是查询内容ANSWER SECTION是解析结果SERVER是实际响应的DNS服务器TIME是查询耗时。其中耗时信息对排查“为什么解析这么慢”很有帮助。如果响应时间一直是几百毫秒甚至报超时大概率是上游DNS服务器有问题或网络路由有问题。反向解析用dig -x 8.8.8.8这是把IP反向解析成域名。在银河麒麟上这个命令对某些国内DNS服务器可能返回空结果原因在于反向DNS记录的注册服务本身缺失不是你的系统问题。还有一种常见场景是修改了/etc/resolv.conf但立即测试发现没生效。因为有些环境里resolv.conf会被NetworkManager复位需要通过nmcli重新加载systemctl restart NetworkManager或者在/etc/resolv.conf里加上注释标记再配合chattr i把文件锁住chattr i /etc/resolv.conf这样文件就被锁定成“不可修改”NetworkManager想改也改不了。但这个做法有副作用后续手动修改DNS配置前必须先用chattr -i解锁否则会提示操作不允许。这个细节很多教程不会写但在麒麟上用的时候非常关键。3.3 用户与群组查询不只cat /etc/passwd那么简单“列出所有用户和群组”这个需求背后藏着一层意思你可能想知道哪些用户是真实用户哪些是系统内置的服务账号。最简单粗暴的方式就是cat /etc/passwd这个文件每一行代表一个用户格式为用户名:x:UID:GID:描述:家目录:登录Shell。在银河麒麟上这个文件的结构和普通Linux完全一致。Uid小于1000的通常是系统账号1000以上一般是真实用户。但cat出来的内容很长你通常只需要用户名于是cut -d: -f1 /etc/passwdcut命令的意思是按照冒号分隔取第1列。类似的群组信息cut -d: -f1 /etc/group还有一个更精确的方法是直接列出UID大于某个值的用户awk -F: $31000 {print $1} /etc/passwd这条命令的关键是-F指定分隔符为冒号$3代表UID字段条件是大于等于1000然后打印用户名。在银河麒麟上执行这个命令你会发现至少有一个用户名是你自己创建的管理员还有可能有一个叫nobody的用户UID是65534这是系统匿名用户不算真实账号。如果要看某个用户属于哪些组groups username在麒麟上这个命令还有一些变体行为直接输入groups不带参数显示的是当前登录用户所属的组。如果要看每个用户的家目录是否正常可以这样ls -lid /home/*这个命令加上-i参数会显示inode号如果你发现两个目录的inode相同说明它们是硬链接关系这在用户家目录的场景下属于异常情况需要排查是不是有恶意操作或误用。4. 打包压缩与解压tar、zip在麒麟上的差异与实战热搜里关于打包解压的词条出现了两次“linux解压缩命令zip”和“linux之文件打包和解压缩第1关:tar打包命令”。这背后的使用频率很高但恰恰是高频使用反而容易让人忽略细节。银河麒麟的tar和zip命令主程序和别的Linux发行版没有本质区别但在处理中文文件名、压缩格式兼容性和大文件解压时的坑是真实存在的。4.1 tar的三种压缩模式和应用场景tar本身是一个“打包”工具它负责把多个文件合并为一个文件但合并后的文件并不一定被压缩。常见的几种后缀.tar纯打包未压缩。体积大但打包速度快。.tar.gz用gzip压缩。.tar.bz2用bzip2压缩压缩率更高但耗时更长。.tar.xz用xz压缩压缩率最高但CPU开销最大。打包并压缩tar -czvf backup.tar.gz /data参数解释-c创建归档-z使用gzip压缩-v显示过程-f指定文件名。这组参数在银河麒麟上跑没问题但如果源目录是一个几十GB的数据库目录tar打包的过程会很耗IO而且中途一旦CtrlC中断生成的是一个不完整的tar文件后续解压会报错“unexpected end of file”。更稳妥的做法是不用-v参数减少终端输出带来的IO开销tar -czf backup.tar.gz /data解压时tar -xzvf backup.tar.gz或者更安全的方式是解压到指定目录tar -xzf backup.tar.gz -C /restore-C指定解压目标目录好处是不会把文件散落在当前目录里。在麒麟上解压tar包时如果包内的文件包含中文名且当前系统的locale不是UTF-8解压出来的文件名可能会乱码。解决办法是设置环境变量后解压export LANGzh_CN.UTF-8 tar -xzf backup.tar.gz -C /restore4.2 zip和unzip跨平台传输的“坑”集中地zip格式在Windows、macOS、Linux之间通用性最好所以向Windows用户交付文件时首选zip。银河麒麟默认安装了zip和unzip吗在V10 SP3的桌面版上是自带的服务器版不一定需要先检查which zip unzip如果没有输出就装apt install zip unzip -y压缩文件夹zip -r archive.zip /data-r递归是必须的不写的话zip只会收进这个目录本身不会收里面的内容。在麒麟实战中你很可能遇到一种特殊问题zip出来的包在Windows上解压时里面的中文文件名乱码。这是因为zip工具在创建归档时写入的文件名字符集不是UTF-8Windows的默认解压方式按本地编码解析结果就花了。解决方法是给zip指定UTF-8编码zip -r -UNUTF8 archive.zip /data注意这里的-U是设置编码相关参数NUTF8告诉zip用UTF-8写文件名。在麒麟上执行时如果你的system语言是英文环境建议先设置LANGexport LANGzh_CN.UTF-8 zip -r -UNUTF8 archive.zip /data解压Windows传过来的zip时如果出现乱码用unzip的编码转换参数unzip -O GBK archive.zip-O GBK的意思是“把包内文件名的编码当作GBK来解析”。这个参数不是所有版本的unzip都支持麒麟自带的是Info-ZIP版本实测支持该参数。如果你的系统报“invalid option”错误说明当前版本太老需要更新unzip或者用别的方式处理乱码。4.3 中途中断与断点续传问题打包到一半中断tar文件是坏的zip也一样。这事的根因是zip格式本身没有设计“可恢复的归档结构”。你如果经常处理超大压缩包建议了解一下7zapt install p7zip-full -y 7z a backup.7z /data7z在压缩超大目录时支持多线程、可设置分卷大小而且对于损坏的压缩包有一定的容错能力。在麒麟服务器上跑7z压缩的IO开销比tar小一些因为多核CPU能用起来。5. 系统状态与性能监控free -h背后的门道热搜词里出现了“free h命令详解linux”这是系统监控方向最经典的话题。但free命令本身很简单真正复杂的是你如何理解它的输出以及基于这些信息做判断。银河麒麟的free输出和标准Linux一致但不同内核版本下单位、缓存计算方式会有差异。直接跑一下free -h输出大概是这样的total used free shared buff/cache available Mem: 62Gi 41Gi 1.2Gi 1.3Gi 19Gi 18Gi Swap: 7.9Gi 204Mi 7.7Gi-h是人性化单位显示自动切换成GiB/MiB。总内存62Gi已使用41Gi空闲只有1.2Gi但有19Gi被用作buff/cacheavailable还剩下18Gi。这里新手最容易误解的就是free和available的关系。free是“完全空闲的物理内存”available是“估算可用于启动新程序的内存”。buff/cache这部分内存在Linux的设计哲学里是“拿空闲内存来缓存磁盘数据”一旦某个程序需要更多内存系统会先丢弃/回收缓存把这部分内存释放给程序用。所以free很低并不代表内存紧张要看available。在麒麟上遇到过一种情况free -h显示available只有几百兆但top里看不到任何高内存占用进程。排查时发现是系统日志服务在疯狂写日志日志文件占用了大量page cache而日志写入速度太快缓存来不及刷回磁盘导致内存压力高。这种问题的解决办法是检查磁盘IOiostat -x 1如果iostat没装用apt install sysstat装一下。看%util列如果长期接近100%说明磁盘是瓶颈。再配合排查/var/log下的日志文件大小du -sh /var/log/*找到异常增长的日志确认是哪个服务产生的再决定是轮转日志还是重启服务。这里银河麒麟和普通Linux的行为完全一致没有特殊之处但很多人第一反应会去调内核参数其实多半是多余的。还有一个被很多人忽略的命令是vmstatvmstat 1 5每秒采样一次一共采样5次。输出里看几个关键列r运行队列、b不可中断睡眠进程数、si/so交换区换入换出、us/sy用户态和系统态CPU占用。如果si和so持续非零说明物理内存不够系统正在疯狂使用swap这时候free -h里Swap那行会显示used持续增长。在银河麒麟上处理内存问题首选方案不是直接加swap而是排查有没有内存泄漏的程序。6. 网络操作命令scp、nc、DNS查询背后的真实场景网络命令是服务器运维的重头戏。热搜词里的“linux scp命令”“linux nc命令下载”和“linux如何用命令查dns”都属于这个范畴。但scp和nc这两个命令在银河麒麟上使用时的注意事项很多人不知道。6.1 scp的进阶用法与性能替代方案scp基于SSH协议传输文件加密性好但速度受加密开销影响。基础用法scp /data/file.tar.gz userremote_ip:/data/从远程服务器拉取文件scp userremote_ip:/data/file.tar.gz /data/指定端口如果SSH不是默认22端口scp -P 2222 /data/file.tar.gz userremote_ip:/data/注意scp的-P是大写字母P而ssh登录指定端口是小写-p。这个大小写问题坑了无数人。大数据传输用scp其实效率很低特别是不稳定的网络环境下一旦中断就从头来过。替代方案是rsyncrsync -avh --progress -e ssh -p 2222 /data/ userremote_ip:/data/rsync的增量同步和断点续传能力比scp强太多。在银河麒麟上如果需要定期同步文件到另一台服务器rsync是更靠谱的选择。但要注意的是rsync的增量同步是基于文件大小和时间戳的默认情况下如果源文件的内容被修改过但大小没变、时间戳没变rsync会认为文件没有变化不进行同步。强制校验内容变化需要加-c参数但代价是每次都要扫描所有文件大目录时耗时会很长。实操中我的做法是对大文件用-c小文件多的情况下相信时间戳。6.2 nc的下载与端口连通性测试ncnetcat被誉为“网络瑞士军刀”它能在TCP或UDP协议上读写数据。热搜词“linux nc命令下载”说明很多人想用nc传输文件或测试端口。在银河麒麟上nc预装的是OpenBSD版本还是传统版本不同版本参数有细微差异使用前最好确认一下nc -h端口连通性测试是nc最常用的场景nc -zv 192.168.1.10 22-z表示“不发送数据只是扫描”-v显示详细过程。如果22端口开放输出“Connection to 192.168.1.10 22 port [tcp/ssh] succeeded”。在麒麟服务器上做ping检测时有些机器禁掉了ICMPping不通但业务正常这时候用nc测端口才能真正确定网络是否通。比如测试MySQL的3306端口nc -zv 192.168.1.20 3306如果通输出succeeded如果不通输出refused或timeout。注意refused和timeout含义不同。refused说明目标机器收到了请求但该端口没有程序在监听timeout说明请求根本没到目标机器八成是防火墙拦截了。这个区分在排查问题时事关紧要。用nc传文件的场景# 接收端 nc -l -p 8888 received_file.tar.gz # 发送端 nc 192.168.1.100 8888 local_file.tar.gz这种方式的精髓是无鉴权、快但没有任何加密在本地局域网测试可以用跨公网千万不要这么干数据会被明文嗅探还容易被注入恶意内容。6.3 DNS查询场景的延伸前面3.2节已经聊过dig和nslookup再补一个排查DNS故障的真实案例。某次在麒麟服务器上应用经常报告“域名解析超时”但相同域名在本地机器上秒开。排查步骤是先dig看解析结果发现SERVER字段指向的DNS服务器没问题但响应时间波动很大。然后又试了一个办法time nslookup www.example.comtime命令显示了整体命令耗时发现每一次查询都接近5秒。这是典型的网络延迟超时重试表现。最后定位到问题是系统配置了多个DNS服务器第一个DNS服务器不可达每次都必须等超时后才切换到第二个。解决方式是调整/etc/resolv.conf中的服务器顺序把最快的DNS放在最前面。这个排查思路在银河麒麟上与普通Linux完全一致关键不是你用什么命令而是如何解读命令输出背后的逻辑。7. 让一条命令干更多事组合命令、重定向与Shell脚本的砖瓦聊完单个命令后你可能会想这些命令单个用都有局限真正干活的时候总不能一条条敲。确实实际运维中你需要的是组合命令行把多个命令通过管道、重定向、循环组合在一起一次完成一系列操作。这部分其实才是“基础”和“进阶”的分水岭。7.1 管道与重定向的基础但关键用法管道符号|把前一个命令的输出作为后一个命令的输入。典型场景cat /etc/passwd | grep bash找出所有可登录用户登录Shell是bash的。ps aux | grep nginx | grep -v grep查看nginx进程。这里grep -v grep是为了把检查进程本身的那个grep命令行过滤掉否则你自己这条命令也会出现在进程列表里干扰判断。重定向则分三种覆盖写入追加写入2错误输出。标准用法echo test /tmp/test.txt echo append /tmp/test.txt command_not_found 2/tmp/error.log第三个命令中2把错误信息单独写到文件里正常输出仍然在终端显示。实际运维中这个技巧常用于定时任务比如*/10 * * * * /usr/local/bin/backup.sh /var/log/backup.log 21这是crontab定时任务里的一条。表示追加到日志文件21的意思是把标准错误输出也重定向到同一个地方。这个21的写法几乎是运维必用如果你漏了它程序报错信息会直接丢到系统邮件里而不在日志文件中排查问题时会漏掉关键信息。7.2 for循环批量操作的利器服务器上经常需要对多个文件或IP执行相同操作。比如批量重命名for f in *.log; do mv $f ${f%.log}_bak.log; done这个命令遍历当前目录下所有.log结尾的文件逐个重命名为_bak.log后缀。${f%.log}是Shell参数扩展作用是去掉文件名的.log后缀。批量测试多个IP的某个端口for ip in 192.168.1.10 192.168.1.11 192.168.1.12; do nc -zv $ip 22; done如果IP很多可以先写在一个文件里cat ip_list.txt | while read ip; do nc -zv $ip 22; done这里的while read循环从文件逐行读取IP。相比for循环这种写法能更好地处理文件中的每一行数据特别是行中包含空格时。批量杀进程也是运维高频操作ps aux | grep java | grep -v grep | awk {print $2} | xargs kill -9这条命令的逻辑是列出所有进程→筛选含“java”的行→过滤掉grep自身→用awk提取第二列PID→用xargs传给kill -9强制杀掉。整条命令虽然看起来长但拆解开每一步都很清晰。在银河麒麟上使用这条命令要特别小心先不加kill -9只运行前半段确认输出是否正确确认无误后再接上xargs kill -9。特别是kill -9这种致命操作宁可多敲一行验证也不要一次赌命。7.3 Shell脚本的基本骨架当组合命令超过三四个的时候就该写成脚本了。一个最简单的备份脚本可以长这样#!/bin/bash BACKUP_DIR/data/backup DATE$(date %Y%m%d) mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/etc_$DATE.tar.gz /etc find $BACKUP_DIR -name *.tar.gz -mtime 7 -delete echo backup done at $(date)第一行shebang指定用bash解释器。在银河麒麟上如果你的脚本是在Windows编辑并上传的第一行后面可能藏着不可见的回车符执行时会报“bad interpreter”错误。解决办法是用dos2unix转换或者用sed去掉sed -i s/\r$// backup.sh然后赋予执行权限chmod x backup.sh执行./backup.sh脚本的调试经验是写完先bash -x backup.sh-x会逐步打印命令执行过程每条命令的参数都会显现出来这样可以快速定位是哪一行出了问题。这个习惯我一直保持效果立竿见影。8. 我在麒麟上踩过的高频坑命令存在但库不匹配路径对了权限不够最后再分享几个我实际遇到的坑这些坑和单条命令本身无关而是和环境、权限、版本相关。这些细节在你实操时几乎一定会碰到。8.1 命令找不到先别急着装在麒麟上输入某个命令报“command not found”不一定就是没安装。有可能是普通用户的PATH环境变量里没有包含该命令所在的目录。比如/sbin下的命令普通用户默认PATH可能不包含这个目录。解决办法两种# 方法一使用完整路径 /usr/sbin/ip addr # 方法二sudo执行sudo会携带更完整的PATH sudo ip addr另外优先确认一下命令是否真的没装apt list --installed | grep 命令名 # 或者 dpkg -l | grep 命令名在麒麟上服务器的精简安装版很多小工具都不是默认安装的比如netstat、dig、iftop、iostat、lsof这些都要自己装。建议一上来就统一安装一批常用工具apt update apt install -y net-tools dnsutils sysstat lsof tcpdump curl wget vimnet-tools提供ifconfig、netstat、route等dnsutils提供dig和nslookupsysstat提供iostat和sarlsof提供查看打开文件的命令。一次性装完后面省心很多。8.2 权限不够chmod、chown、sudo的界限普通用户执行某些操作时报“Permission denied”你要分清三种情况文件本身的权限不够用chmod修改。文件owner不对用chown修改属主。普通用户没有系统级管理权限需要用sudo。chmod的基础chmod 755 script.sh这个数字的含义是第一个数字74读2写1执行代表属主权限第二个54读1执行代表属组权限第三个5代表其他用户权限。755是Linux最常见的执行脚本权限配置。chown修改属主的典型场景chown -R user:group /data/app-R递归应用到目录内所有文件和子目录。在麒麟上有些文件虽然你有读权限但没有写权限vim编辑后保存会失败提示E212: Cant open file for writing这时就需要chown或者sudo来编辑。不过更推荐的做法是不用sudo vim直接改而是先复制到/tmp编辑好再覆盖回去减少在root权限下编辑文件出错的概率。8.3 银河麒麟的字体与系统外观坑热搜里出现了一个看起来不太相关的词“麒麟银河操作系统 time roman字体”。这其实是一个真实场景在麒麟系统上打开某些文档字体显示不正常或者找不到Times New Roman字体。这是因为麒麟系统默认字体库不包含部分商业字体。解决思路是手动安装字体文件。把Windows系统里的Times New Roman字体times.ttf等复制到Linux后放到/usr/share/fonts/truetype/下然后刷新字体缓存fc-cache -fvfc-cache把字体信息缓存到系统中之后在文档软件里就能看到新字体了。如果系统里缺字体导致网页或PDF显示乱码也可以通过安装字体包来解决apt install -y fonts-liberation fonts-noto-cjk中文字体推荐fonts-noto-cjk这是谷歌Noto系列的中文支持包覆盖了简繁体常用字符。这个操作和命令基础关联不大但经常在配置麒麟桌面系统时遇到顺手记录一笔。9. 给刚入门的你一套可复制的命令学习路径与备份意识学了命令之后怎么快速上手、怎么避免把系统搞坏才是重中之重。很多教程都只告诉你怎么执行没人告诉你怎么反悔。这里强烈建议所有人在麒麟上实操前先将关键配置和系统状态做个快照备份。最轻量级的备份方法是用tar打包系统关键目录tar -czf /backup/etc_full_$(date %F).tar.gz /etc这个操作做一次万一改坏了某个配置文件解压回去就能恢复。另外在每次执行rm、cp、scp等危险命令前要养成一个习惯先用绝对路径确认当前目录和目标路径。pwd ls -ld 路径pwd显示当前所在路径ls -ld显示目标路径的详细信息。这些基础命令串在一起的价值远超单个命令本身。另外一个非常实用的小技巧是alias。你可以把经常用的命令组合简化成短命令写在~/.bashrc里alias llls -lha alias backup_etctar -czf /backup/etc_$(date %F).tar.gz /etc alias myiphostname -I设置完后执行source ~/.bashrc让配置立即生效。在银河麒麟上这些操作和标准Linux完全一致。alias看起来简单但在日积月累的使用中能省下大量重复输入的时间。建议的学习路径是先掌握文件操作ls、cd、cp、rm、mv、find和查看命令cat、less、grep、awk然后学权限管理chmod、chown、useradd再学网络和进程管理ps、top、netstat、ss、systemctl最后学打包压缩和Shell脚本。按照这个顺序在麒麟系统上操作时日积月累遇到问题也知道该从哪里下手。至于最后那个“systemctl管理服务”的话题因为篇幅关系这次就不展开写了。麒麟上systemctl的用法和主流Linux一致但个别服务的unit名称和启动参数有差异在后续的“服务管理篇”里我再专门讲。
返回列表