Linux指令学习
Linux命令格式:命令名 选项 参数
Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作、文件存取、目录操作、进程管理、文件权限 设定等,在职场中,大量的服务器维护工作都是在远程通过SSH 客户端来完成的,并没有图形界面,所有的维护工作,都需要通过命令来完成,在职场中,作为后端程序员,必须要或多或少的掌握一些 Linux 常用的终端命令,Linux 发行版本的命令大概有 200 多个,但是常用的命令只有 10 多个而已。
文件及目录操作
linux下,我们是看不到硬件盘符的,我们只能看到文件夹(目录)
目录速查表
/ :根目录,Ubuntu只有一个根目录,所有文件都在它下面
/home/user :用户工作目录或者家目录。
/bin、/usr/bin :可执行二进制文件的目录
/boot :放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz;系统引导管理器:/boot/grub
/dev :存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
/etc :系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
/home :系统默认的用户家目录,新增用户账号
- ~ 表示当前用户的家目录
- ~edu 表示用户 edu 的家目录
/root :系统管理员root的家目录
/tmp :一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv :服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
/usr :应用程序存放目录
- /usr/bin:存放应用程序
- /usr/share:存放共享数据
- /usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
- /usr/local:存放软件升级包
- /usr/share/doc:系统说明文件存放目录
- /usr/share/man:程序说明文件存放目录
/var :放置系统执行过程中经常变化的文件
- /var/log:随时更改的日志文件
- /var/spool/mail:邮件存放的目录
- /var/run:程序或服务启动后,其 PID 存放在该目录下
小技巧
- ctrl + shift + = 放大终端窗口的字体显示
- ctrl + - 缩小终端窗口的字体显示
- 自动补全:在敲出 文件/目录/命令 的前几个字母之后,按下tab键,如果输入的没有歧义,系统会自动补全
- 按 上 / 下 光标键可以在曾经使用过的命令之间来回切换
- 如果想退出,并且不想执行当前选中的命令,可以按 ctrl+ c
目录操作
pwd :查看目录 路径
ls :查看当前目录下的 文件和文件夹
- ls -l 以列表方式显示文件的详细信息
- ls -a 显示全部(包括隐藏文件)
- ls -t 按照修改时间排序
- ls -l -h 以人性化的方式显示文件大小
cd 目录 :切换路径
- cd 和 cd ~ :切换到当前用户的主目录(/home/用户目录)
- cd . :当前目录
- cd .. :上级目录
- cd - :上一次所在目录
mkdir 目录 :创建目录
- mkdir -p :如果父目录不存在,同时创建父目录
文件操作
touch 文件名 :创建文件
mkdir 文件夹名 :创建文件夹
echo 内容 > 文件名 :向文件覆盖写入内容
- echo 'abc' > test1.txt (将abc字符串写入test1.txt,会覆盖原来的内容;如果不想覆盖原来的内容,使用两个大于符号>>)
cat 文件名 :查看文件内容
grep "搜索内容" 文件名 :搜索某个文件里面是否包含字符串
tree 目录名 :以树状图的形式查看目录文件结构
head -n 行数 文件名 :查看文件前几行
tail -n 行数 文件名 :查看文件最后几行
find /(查找范围) -name '查找关键字' -type d :查找目录
- find / -name 'tomcat7' -type d :查找tomcat7文件夹所在的位置
find /(查找范围) -name 查找关键字 -print :查找文件
- find / -name 'server.xml' -print :查找server.xml文件的位置
- find -name "*1*" 搜索文件名包含1的文件
- find -name "*.txt" 搜索所有以.txt为扩展名的文件
- find -name "1*" 搜索以数字1开头的文件
cp 原文件 新文件 :文件复制
- -r:遍历文件
- -n:跳过已存在文件
mv 原文件路径 新文件路径 :文件移动,注意点:移动文件的话就不要再加 / 了,如果是移动文件夹下的所有文件的话就可以文件夹后面跟上 /*
rm [选项] 文件名|目录名 :文件删除
- -f 强制删除(慎用!)
- -i 互动模式,在删除前询问
- -r 递归删除目录下的内容,删除文件夹时必须的加此参数
比较差异
1、使用 diff 命令来比较两个文件夹。以下是一个示例命令:
diff -r /path/to/directory1 /path/to/directory2
2、使用 rsync 命令来比较两个文件夹。以下是一个示例命令:
rsync -nrcv /path/to/directory1/ /path/to/directory2/
-n
选项表示模拟比较,-r
表示递归比较,-c
表示根据文件内容比较,-v
表示详细输出,
--size-only
,它只会比较文件大小而不比较内容,从而提高比较速度。
rsync -nrcv --size-only /path/to/directory1/ /path/to/directory2/
权限管理
三个权限参数: 读 写 执行
- 参数:r可读,w可写,x可执行,-什么都不行
在rwx三个权限中,从右至左依次用值4、2、1来表示,所以拥有某个文件的读、写、执行权限也可以用三个权限值累加的方式来表示,如下表所示:
权限 | rwx | rw- | r-x | r-- | -wx | -w- | --x | --- |
含义 |
可读4 可写2 可执行1 |
可读4 可写2 不可执行0 |
可读4 不可写2 可执行1 |
可读4 不可写2 不可执行0 |
不可读0 可写2 可执行1 |
不可读0 可写2 不可执行0 |
不可读0 不可写2 可执行1 |
不可读0 不可写2 不可执行0 |
对应值 | 4+2+1=7 | 4+2+0=6 | 4+0+1=5 | 4+0+0=4 | 0+2+1=3 | 0+2+0=2 | 0+0+1=1 | 0+0+0=0 |
修改文件权限:chmod {权限值} {文件/目录名}
- 给文件夹增加权限(-R表示递归):chmod -R 777 文件夹
- 给文件增加权限:chmod 777 文件
更改文件所有者: chown 新用户名 文件民
进程
查询服务器pid对应用户: ps -u -p PID
杀死某个用户的所有进程: pkill -u username
通过进程名杀死进程: pkill -f name
通配符
- *:代表任意个数字符
- ?:代表任意一个字符,至少1个
- []:表示可以匹配字符组中的任意一个
- [abc]:匹配a、b、c中的任意一个
- [a-f]:匹配从a到f范围内的任意一个字符
linux的通配符和正则表达式有很多相似点,可以参考我写正则表达式的这篇文章
查看磁盘空间
Linux 查看磁盘空间可以使用 df 和 du 命令。
df :以磁盘分区为单位查看文件系统,可以获取Filesystem(文件系统)、Size(分区大小)、Used(已用百分比)、Avail(还可使用的容量)、Mounted on(挂载点)。
- df -hl :查看磁盘剩余空间
- df -h :查看每个根路径的分区大小
- du -sh [目录名] : du -sh ./ 返回该目录的大小; du -sh ./* 返回该目录所有文件夹的大小
- du -sm [文件夹] :返回该文件夹总M数
- du -h [目录名] :查看指定文件夹下的所有文件大小(包含子文件夹)
du -* [目录名] :显示磁盘空间的使用情况(disk usage),用于查看当前目录的总大小
- -s :只给出占用的数据总数。
- -a :递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
- -b :以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。
- -k :以1024字节为单位列出磁盘空间使用情况。
- -c :最后再加上一个总计(系统默认设置)。
- -l :计算所有的文件大小,对硬链接文件,则计算多次。
- -x :跳过在不同文件系统上的目录不予统计。
- -h :以K,M,G为单位,提高信息的可读性。
压缩与解压
windows常用rar,Mac常用zip;Linux常用tar.gz,tar后缀名表示进行了打包,gz后缀名表示进行了压缩,加后缀名是为了清晰、易于理解,而不是必须的。
tar格式
参数:
- c 创建打包文件
- x 解开打包文件
- v 列出详细过程,显示进度
- f 执行打包的文件名称,f后面一定是.tar文件,所以必须放在选项后面
- z 使用gzip方式压缩
压缩
压缩为.tar文件
tar -cvf archive.tar folder_name
压缩为.tar.gz文件(gzip压缩)注重压缩速度
tar -czvf archive.tar.gz folder_name
压缩为.tar.bz2文件(bzip2压缩)注重压缩率
tar -cjvf archive.tar.bz2 folder_name
tar与gzip命令结合可以实现文件 打包和压缩
- tar只负责打包文件,但不压缩
- 用gzip压缩tar打包后的文件,其扩展名一般用 xxx.tar.gz
解压
tar -xvf archive.tar tar -xzvf archive.tar.gz tar -xjvf archive.tar.bz2
tar -zxvf xxx.tar.gz -C 解压到指定的文件位置 :解压xxx.tar.gz到指定位置,注意:要解压缩的目录必须存在
tar -xvf xxx.tar -C 解压到指定的文件位置 :解压xxx.tar到指定位置,注意:要解压缩的目录必须存在
zip格式
压缩
zip -r archive.zip folder_name
zip -dv test.zip file1 :从压缩文件 test.zip 中删除文件 file1
解压
unzip dataset.zip :将 dataset.zip 解压到当前文件夹
unzip -o dataset.zip -d dataset/ :将dataset.zip解压到dataset文件夹,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
依次把当前文件夹的子文件夹一一压缩成zip
for i in */; do zip -r "${i%/}.zip" "$i"; done
依次把当前文件夹的zip解压
for zip_file in *.zip; do unzip "$zip_file"; done
网络操作
ifconfig :查看/配置计算机当前的网卡配置信息
ping ip地址 :检查目标 ip地址 的连接是否正常,数值越大,速度越慢
ssh 用户名@ip :远程登录
hostname -I : 主机所有的地址
服务器传输文件
1、拷贝本机/home/wtf/test整个目录至远程主机192.168.100.1的/root目录下
scp -r /home/wtf/test/ root@192.168.100.1:/root/
2、拷贝单个文件至远程主机
scp /home/wtf/test/wtf.txt root@192.168.100.1:/root/
3、如果小文件多,总体积大,可以先压缩再传输
tar czf - /source/path | ssh user@remote "tar xzf - -C /destination/path"
4、rsync在处理大量小文件时通常比scp更高效,却具有更强大的同步功能,能够减少不必要的重复传输。
rsync -avz --progress never@remote:/data/never/Dataset/kws_data/ /data/never/Dataset/kws_data/
- -a:归档模式,保留文件权限、符号链接等。
- -v:显示详细输出。
- -z:启用压缩传输。
5、如果想要强制rsync通过校验和来比较文件(而不是只看文件和时间戳),可以使用-c计算文件的哈希值并根据哈希值判断文件是否需要传输。虽然这个方法更精确,但相对较慢,因为需要读取每个文件的内容。
rsync -avzc --progress source_dir/ user@remote:/destination_dir/
-c
会要求 rsync
比较源文件和目标文件的校验和,即使它们的时间戳和大小相同,也会重新传输不同的文件。
6、跳过目标目录中已经存在的文件
rsync -av --ignore-existing source_dir/ user@remote:/destination_dir/
7、只比较文件大小(忽略时间戳的差异)
rsync -av --size-only source_dir/ user@remote:/destination_dir/
关机
命令格式: shutdown 选项 时间
shutdown now :现在就关闭电脑
shutdown 20:10 :时间20:10分关闭电脑
shotdown -r +10 :十分钟后重启电脑
shotdown -c :取消之前指定的关机计划
shutdown :不设置选项和参数:默认1分钟后 关闭电脑
sudo reboot :重启电脑
window平台安装ubuntu子系统
1、安装Ubuntu子系统,具体的操作步骤可以参考Win10安装Ubuntu子系统超详细攻略这篇知乎文章,步骤一步一步的进行下去就OK了。
2、在文件夹中,我们可以通过shift + 鼠标右键,快速打开 linux shell,即wsl。
微软为我们提供了一个默认的变量可以直接指向WSL的目录 wsl$ , 你可以在运行(win+R)或资源管理器的路径里直接输入 \wsl$ 进入Ubuntu的目录,
知道WSL的网络路径后你可以直接将它添加到资源管理器的网络位置里
参考
【菜鸟教程】Linux 查看磁盘空间
【CSDN】将 Windows10 中的 WSL 添加至右键菜单
【博客园】windows10 ubuntu子系统 WSL文件位置
【博客园】linux如何复制文件夹和移动文件夹
【CSDN】ubuntu查看已安装所有软件包
【CSDN】Ubuntu下如何查看已安装软件版本
【CSDN】如何安全的从ubuntu16.04升级到18.04?
【谷歌搜索】apt-get dist-upgrade能将ubuntu16.04升级到18.04吗
【CSDN】如何在Ubuntu中用apt命令删除/卸载软件包(remove/clean/purge)
作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-07-14 未来工作相关