Linux指令篇(一)

操作系统于当今网络世界已不可或缺,个人电脑、手机、公司服务器后台都需要搭建操作系统;

Linux目前是各大互联网公司云服务器搭载的操作系统,主要就是因为开源,开源不等于免费,大多数情况下开源都是免费的,Linux也是免费的;因为Linux是开源的,有很多顶级工程师会去指出问题、解决问题、进行优化,他们认为在做的是抵制收费操作系统,在重构软件行业。

Linux的发展比较好,稳定、快速、安全,因为源码开源,底层实现细节一览无余,因此安全;如果用的是闭源的操作系统,底层实现细节不知道,安全性不可知,用户的个人信息是否会被侵犯等问题无从知晓。

Linux版本包括商业化版本(诸如小红帽、乌班图等)和技术版本

Linux是命令行,包括公司服务器后台也是命令行;早期的苹果电脑是命令行,因为当时用户一般是科研人员、技术人员等,后来乔布斯参观施乐公司时见到了图形化界面回到公司后开始研发图形化界面,后来比尔盖茨也紧跟步伐,做Windows的图形化界面;

先有指令,后有图形化界面,再比如,先有键盘,后有鼠标;

1.系统配置

三种方法

1.双系统

2.虚拟机

3.云服务器

推荐云服务,下载xshell

连接
ssh root/用户名(普通用户)@域名

增加子用户
adduser 用户名 回车
passwd 回车

输入密码(不回显)回车

确认密码 回车

删除子用户
userdel -r 用户名 回车

从root(超级用户 )切换到子用户
su 用户名

回到root
exit

查看当前用户名
whoami

背景知识补充:

1.软件:满足用户不同需求适用不同场景

2.操作系统:管理软硬件资源为上层提供良好(稳定、快速、安全)的服务, 任何在软件上的操作都会从上至下贯穿整个体系结构落到硬件上。

2.指令介绍

Linux的学习,左手指令,右手理论,缺一不可;

指令的本质是可执行程序或脚本,指令执行前先去系统中找对应的可执行文件,Linux下文件后缀是.out,Windows下后缀是.exe;我们日常Windows下的软件本质也是可执行程序,不过可能会有配置文件、依赖关系等;

有些指令、选项的具体细节可能在超级用户、普通用户下不完全一样,以下列举一些常用指令、快捷键
pwd 查看当前路径
clear 清屏
nano 文件名 打开文件 Ctrl+X 退出打开的文件
Ctrl+C 停止正在运行的指令,或者指令输错了换到重新输入
Ctrl+D 断开连接 再次Ctrl+D,退出Xshell

2.1 ls

ls /home root下查看所有普通用户

ls 查看当前目录下所有文件,只显示文件名;ls指令后可以加一个或多个选项,指令和选项以空格分隔,比如ls -l -a等价于ls -la或者ls -al,选项无先后顺序;选项如下

-l 显示文件属性;ls -l等价于ll; d目录文件 -普通文件

-a 看到.开头的文件(隐藏文件)

-d 目录名 只看该目录

-F 可以看到后缀

举例如下

. 是当前路径,根据当前路径查找文件称为相对路径,常用但如果当前文件的位置发生变化,相对路径可能失效;从根目录开始是绝对路径,一般较长,用于比较固定的场景
.. 是上一级路径

也可结合通配符(匹配所有符合规则的内容),举例如下图

2.2 目录/文件操作

2.1 目录操作

2.1.1 mkdir

mkdir 目录文件名 创建目录
mkdir -p d1/d2/d3 建立d1目录下d2目录下d3目录

2.1.2 rmdir

rmdir 目录文件名 删除当前路径下的空目录文件
rmdir 路径名 删除路径对应的空目录
rmdir -r 路径名 递归删除路径对应的目录
rmdir -p dir1/d1/d2/d3 这个路径上如果删除d3之后d2为空的,删除d2,同理处理d1,dir1,否则不删除,举例如下

2.1.3 cd

cd ~ 进入家目录,

超级用户家目录是/root 普通用户,普通用户的家目录是 /home/用户名,举例如下

cd - 进入上一次访问的目录
cd 目录名d 进入目录d
cd d1/d2/d3 进入d1/d2/d3目录

补充:
tree 路径 建立路径下所有目录、文件对应的树形结构;

要先通过yum install -y tree 安装才能使用

tree .亦或是tree 是当前路径下所有文件对应的树形结构

2.2 文件操作 touch/rm

背景知识补充:

  1. 文件系统是以多叉树进行存储的,叶结点对应空目录或非目录文件,根结点到叶节点路径上的分支结点是非空目录,根节点是根目录;
  2. 每个文件的路径是唯一的,因为父结点唯一;
  3. 文件=文件内容+文件属性,对文件的操作包括对文件内容和文件属性的操作
2.2.1 touch

touch 文件名 创建文件

2.2.2 rm

rm指令后可跟选项
rm 文件名 删除文件
rm -r 目录名 或者rm 目录名 -r 递归删除目录
rm -f(不给提示 force 强制删除)目录名(删除当前目录下的文件)目录名等价于./目录名,默认在当前路径下查找
rm 路径 删除路径对应的文件

举例如下

通配符举例如下

rm /root 超级系统下删除所有内容(dangerous的行为),去云服务器重置系统

2.3 man

在线参考手册的接口,但实际上有些离线,C的库函数去里面查没啥大问题,和下载到电脑里的MSDN差不多,但是查面向对象语言的库函数一般去在线查比较好

使用方法 man pagenumber target 查第几个手册的什么内容,比如man 2 fork是去2号手册查fork指令,如果没有指定pagenumber,默认先从1开始查,没有再去2,2没有再去3,以此类推;查找后按q退出,通过上下键在查找页面上下翻,也可通过回车向下翻;

比如printf既是指令又是库函数,printf做指令的用法举例如下,不自动换行
printf指令

printf函数

(查3要先通过yum install -y man-pages glibc-devel装入)

2.4 重定向

各种设备都可以看做一个文件,echo默认向显示器写入
echo 字符串 将字符串(有没有单引号、双引号皆可)打印到屏幕上,举例如下

echo 字符串 > 文件名 将字符串写到文件中,又称输出重定向,因为默认输出到屏幕上,现在输出到文件中,所以称重定向,这种情况下会先将文件清空,然后写入字符串;
echo 字符串 >> 文件名 将字符串追加写到文件中,又称追加重定向,这种情况下会在文件原有内容后追加写字符串;这个和C语言打开文件时-a追加写有着莫大的关系

printf和echo上述两个用法唯一的区别是,echo默认换行

> 文件名>> 文件名创建新文件,等价于echo > 文件名,echo >> 文件名,也就是说输出、追加重定向在文件不存在的情况下会自动创建,举例如下

cat默认从键盘读,如果只输入cat,回车,那么在键盘上敲击什么,就打印什么;
cat 文件名 或者cat < 文件名(二者还有有区别的),因为默认从键盘读,现在从文件读,所以叫输入重定向;作用:打印文本文件内容,不会自动换行;

cat可以带选项
cat -n 文件名 对打印的内容行编号
cat -b 文件名 对打印的非空行编号
cat -s 文件名 连续的多行空号只打印一行,举例如下

2.5 剪切与复制

2.5.1 复制

2.5.1.1 复制文件

cp src dest

在root下,如果对应路径下要拷贝的文件和源文件名称相同,如果二者内容相同,直接覆盖写,不会提示;如果二者内容不同,无论是否加-f,系统都会询问是否要进行覆盖写

在普通用户下,无论目的路径下的同名文件是否与源文件内容相同,系统都不会询问,直接操作;相同内容加-i的测试结果是会询问,如下图所示

root和普通用户下,但如果目的文件和源文件在同一路径下而且名称相同,不允许,因为无法区分二者

也可拷贝多个文件,但不推荐,一般是先压缩,再拷贝,举例如下

2.5.1.2 复制目录

dest不是已经存在的目录,直接创建并将src复制,如下图

dest如果是已经存在的目录,举例如下

如果是同一路径,同名不行

不同路径,把src对应的目录作为dest的一个子目录

不同名

同名

2.5.2 剪切

mv src dest

2.5.2.1 剪切文件

如果src和dest为不同名的文件,而且在同一个目录下,此时就是重命名,举例如下

剪切到不同路径举例如下

如过dest只给了路径,没有给文件名,就是剪切

如果dest给了不同于src的文件名,就是剪切+重命名

2.5.2.2 剪切目录

如果src和dest重名,src会剪切到dest内,作为dest的子目录,举例如下

如果dest是不存在的目录,就将src剪切到路径下,并命名为dest

which 指令名 查询指令的相关信息及位置,指令均存放在/usr/bin这个目录下,使用ls /usr/bin可以查看;
alias 指令名=' 指令 --color=配色方案' 将指令重命名

举例如下

我们也可以自行定义指令,但是临时的,关闭Xshell就没了

我们可以通过mv指令将我们写的代码编译出的可执行文件剪切到/usr/bin下,以后可以通过文件名直接当指令运行,普通用户下不可以,root下举例如下,

左边为test1.c的内容

但是不太推荐新手这样做,挺危险的

2.6 more/less

cat适合小文件,因为是一次性打印全部内容,但不适合大文本(项目、日志等,一个普通程序员一年大概敲5-2条代码),我们接下来看more/less

2.6.1 more

先搞一个大文件
cnt=1 for ((i=1; i<=10000; i++)); do echo "hello Linux" $cnt; let cnt++; done > test.txt

more 文件名 默认打印占满屏,回车往下翻,鼠标滚轮上翻,上下键不能翻;/n跳到n行附近,q退出
more -n 文件名 打印n行为止,举例如下

2.6.2 less

less比more用的多,
less 文件名 more 文件名 默认打印占满屏,上下键上下翻,回车下翻,不能用鼠标滚轮上下翻;/n跳到n行附近(往后找),?n跳到n行附近(往前找),q退出, ctrl+c没反应;

举例如下

2.7 head/tail

head 文件名 默认打印前10行
head -n 文件名 打印文件的前n行

tail 文件名 默认打印最后10行
tail -n 文件名 打印文件的最后n行

比如程序员日志,如果服务器崩了,就看日志最后几条基本就够

举例如下

读取特定行,举例400-420行,有两种方法,第一种通过管道,前者从管道入,后者从管道提取文件;第二种通过临时文件,如下图所示

管道文件是内存级文件,所有文件的操作都是在内存中进行的,如果要操作磁盘中的文件,要先拷贝到内存;管道大小一般是固定的,由操作系统决定,用于进程间通信,因操作系统、位数等有所变化,为4、8、16KB不等。

tail -n 文件名如果 n大于文件行数,只显示已有内容,举例如下

wc -l 文件名 统计文件行数

相关推荐
睡不醒的猪儿14 小时前
nginx常见的优化配置
运维·nginx
我要升天!14 小时前
Linux中《网络基础》
linux·运维·网络
国强_dev14 小时前
在数据库开发和运维中的“错误信息误导(Red Herring)”
运维·adb·数据库开发
安科瑞刘鸿鹏1714 小时前
工业自动化系统中抗晃电保护的协同控制研究
运维·网络·嵌入式硬件·物联网
ZStack开发者社区15 小时前
ZStack Cloud 5.5.0正式发布
运维·服务器·网络
草莓熊Lotso15 小时前
脉脉独家【AI创作者xAMA】|当豆包手机遭遇“全网封杀”:AI学会操作手机,我们的饭碗还保得住吗?
运维·开发语言·人工智能·智能手机·脉脉
鸽芷咕15 小时前
【2025年度总结】时光知味,三载同行:落笔皆是沉淀,前行自有光芒
linux·c++·人工智能·2025年度总结
羑悻的小杀马特15 小时前
指尖敲代码,笔尖写成长:2025年度总结与那些没说出口的碎碎念
linux·c++·博客之星·2025年度总结
三不原则15 小时前
银行 AIOps 实践拆解:金融级故障自愈体系如何搭建
大数据·运维