Linux系统常用命令以及常见问题的解决方法
常用命令
- sed
sed 是一种流编辑器,它是文本处理中非常常用的工具,能够完美的配合正则表达式使用,功能非常强大。
mkdir playgroundtouch test.txtecho "Hello world!" >> test.txtcat>test.txt<<EOF> i love you> my honey> be easy> last row> EOF
例如:
(1) 删除文档的第一行
sed -i '1d' test.txtcat test.txt
my honey be easy last row
test.txt
(2) 删除文档的第三行
sed -i '3d' test.txtcat test.txt
my honey be easy
test.txt
(3) 删除文档的最后一行
sed -i '$d' test.txtcat test.txt
my honey
test.txt
- dpkg
dpkg是Debian package的简写,是为Debian操作系统专门开发的套件管理系统,用于软件的安装、更新和移除。所有源自 Debian 的 Linux 发行版都使用dpkg,最常见的如 Ubuntu。
(1) 软件安装
cv@cv: ~$ sudo dpkg -i file.deb
其中file.deb是提前手动下载下来的安装包。
有时候安装某个软件时会需要环境中其他依赖项的配置,使用 -f 命令让系统自动去处理依赖项问题。
cv@cv: ~$ sudo apt-get install -f
(2) 软件卸载
cv@cv: ~$ sudo dpkg -l | grep chrome
卸载之前一般先查看软件版本等的信息,-l命令用于显示包的版本
cv@cv: ~$ sudo dpkg -r file.deb
移除软件,但保留配置,如果想要不保留配置,使用-P命令
cv@cv: ~$ sudo dpkg -P file.deb
- uname
该命令用来查看操作系统的详细信息。用法如下
uname [OPTION]...
当没有给定参数时,默认输出 uname -s 的结果,只显示内核名称。
参数解释如下:
-a 按下面参数出现的顺序输出所有信息,如果处理器和硬件平台信息未知则略去-p和-i的结果 -s 输出内核名称 -n 输出网络主机的名称 -r 输出当前系统的内核发行版本 -v 输出内核版本信息 -m 输出机器硬件名称 -p 输出处理器型号 -i 输出硬件平台的信息 -o 输出操作系统的信息 --help 展示帮助信息并退出
cv@cv: ~$ uname -a Linux # kernel-name cv # nodename 4.15.0-48-generic # kernel-release #51~16.04.1-Ubuntu SMP Fri Apr 5 12:01:12 UTC 2019 # kernel-version x86_64 # machine x86_64 # processor x86_64 # hardware-platform GNU/Linux # operating-system
- tree
用来显示指定文件夹的目录结构,以便我们迅速了解该文件夹下由那些文件/文件夹构成。
(1) 不加任何参数时,默认显示当前文件夹的所有文件及其结构
cv@cv: ~$ tree
. ├── build │ ├── block.png │ ├── chessboard.png │ ├── CMakeCache.txt │ ├── CMakeFiles │ │ ├── 3.5.1 │ │ │ ├── CMakeCCompiler.cmake │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ ├── CMakeSystem.cmake │ │ │ ├── CompilerIdC │ │ │ │ ├── a.out │ │ │ │ └── CMakeCCompilerId.c │ │ │ └── CompilerIdCXX │ │ │ ├── a.out │ │ │ └── CMakeCXXCompilerId.cpp │ │ ├── cmake.check_cache │ │ ├── CMakeDirectoryInformation.cmake │ │ ├── CMakeOutput.log │ │ ├── CMakeTmp │ │ ├── feature_tests.bin │ │ ├── feature_tests.c │ │ ├── feature_tests.cxx │ │ ├── Makefile2 │ │ ├── Makefile.cmake │ │ ├── progress.marks │ │ ├── raytrace.dir │ │ │ ├── build.make │ │ │ ├── cmake_clean.cmake │ │ │ ├── CXX.includecache │ │ │ ├── DependInfo.cmake │ │ │ ├── depend.internal │ │ │ ├── depend.make │ │ │ ├── flags.make │ │ │ ├── link.txt │ │ │ ├── lodepng │ │ │ │ └── lodepng.cpp.o │ │ │ ├── progress.make │ │ │ └── raytrace │ │ │ ├── algebra.cpp.o │ │ │ ├── binary.cpp.o │ │ │ ├── chessboard.cpp.o │ │ │ ├── cuboid.cpp.o │ │ │ ├── cylinder.cpp.o │ │ │ ├── debug.cpp.o │ │ │ ├── dodecahedron.cpp.o │ │ │ ├── icosahedron.cpp.o │ │ │ ├── main.cpp.o │ │ │ ├── optics.cpp.o │ │ │ ├── planet.cpp.o │ │ │ ├── reorient.cpp.o │ │ │ ├── scene.cpp.o │ │ │ ├── setcompl.cpp.o │ │ │ ├── setisect.cpp.o│ │ │ ├── setunion.cpp.o [0/742] │ │ │ ├── solid.cpp.o │ │ │ ├── sphere.cpp.o │ │ │ ├── spheroid.cpp.o │ │ │ ├── thinring.cpp.o │ │ │ ├── torus.cpp.o │ │ │ └── triangle.cpp.o │ │ └── TargetDirectories.txt │ ├── cmake_install.cmake │ ├── cuboid.png │ ├── cylinder.png │ ├── difference.png │ ├── donutbite.png │ ├── intersection.png │ ├── Makefile │ ├── multisphere.png │ ├── overlap.png │ ├── polyhedra.png │ ├── raytrace │ ├── saturn.png │ ├── sphere.png │ ├── spheroid.png │ ├── torus1.png │ └── torus2.png ├── CMakeLists.txt ├── lodepng │ ├── lodepng.cpp │ └── lodepng.h └── raytrace ├── algebra.cpp ├── algebra.h ├── binary.cpp ├── block.h ├── chessboard.cpp ├── chessboard.h ├── cuboid.cpp ├── cylinder.cpp ├── debug.cpp ├── dodecahedron.cpp ├── icosahedron.cpp ├── imager.h ├── main.cpp ├── optics.cpp ├── planet.cpp ├── planet.h ├── polyhedra.h ├── raytrace.vcproj ├── reorient.cpp ├── scene.cpp ├── setcompl.cpp ├── setisect.cpp ├── setunion.cpp ├── solid.cpp ├── sphere.cpp ├── spheroid.cpp ├── thinring.cpp ├── torus.cpp └── triangle.cpp11 directories, 102 filestree
(2) 利用-L参数,显示到Level 2即停止,不会全部显示出来,方便我们宏观把握
cv@cv: ~$ tree -L 2.├── build │ ├── block.png │ ├── chessboard.png │ ├── CMakeCache.txt │ ├── CMakeFiles │ ├── cmake_install.cmake │ ├── cuboid.png │ ├── cylinder.png │ ├── difference.png │ ├── donutbite.png │ ├── intersection.png │ ├── Makefile │ ├── multisphere.png │ ├── overlap.png │ ├── polyhedra.png │ ├── raytrace │ ├── saturn.png │ ├── sphere.png │ ├── spheroid.png │ ├── torus1.png │ └── torus2.png ├── CMakeLists.txt ├── lodepng │ ├── lodepng.cpp │ └── lodepng.h └── raytrace ├── algebra.cpp ├── algebra.h ├── binary.cpp ├── block.h ├── chessboard.cpp ├── chessboard.h ├── cuboid.cpp ├── cylinder.cpp ├── debug.cpp ├── dodecahedron.cpp ├── icosahedron.cpp ├── imager.h ├── main.cpp ├── optics.cpp ├── planet.cpp ├── planet.h ├── polyhedra.h ├── raytrace.vcproj ├── reorient.cpp ├── scene.cpp ├── setcompl.cpp ├── setisect.cpp ├── setunion.cpp ├── solid.cpp ├── sphere.cpp ├── spheroid.cpp ├── thinring.cpp ├── torus.cpp └── triangle.cpp4 directories, 51 filestree -L 2
(3) 利用-I参数指定忽略某个文件夹,因为有时候我们明确知道不需要显示该文件包含的文件和结构
cv@cv: ~$ tree -I build. ├── CMakeLists.txt ├── lodepng │ ├── lodepng.cpp │ └── lodepng.h └── raytrace ├── algebra.cpp ├── algebra.h ├── binary.cpp ├── block.h ├── chessboard.cpp ├── chessboard.h ├── cuboid.cpp ├── cylinder.cpp ├── debug.cpp ├── dodecahedron.cpp ├── icosahedron.cpp ├── imager.h ├── main.cpp ├── optics.cpp ├── planet.cpp ├── planet.h ├── polyhedra.h ├── raytrace.vcproj ├── reorient.cpp ├── scene.cpp ├── setcompl.cpp ├── setisect.cpp ├── setunion.cpp ├── solid.cpp ├── sphere.cpp ├── spheroid.cpp ├── thinring.cpp ├── torus.cpp └── triangle.cpp2 directories, 32 filestree -I build
如果需要忽略多个文件夹,多个文件夹之间使用分隔符 "|" 隔离开,并将要忽略的文件名字符串用单引号引起来,如下所示
cv@cv: ~$ tree -I 'build|cmake_build_debug'
===================================================分割线===================================================
常见问题及解决方案
- SWAP分区的手动刷新
SWAP 分区是 Linux 系统的交换分区,一般在安装系统时建立。
Memory指机器物理内存,读写速度比 CPU 低一个量级,但比磁盘高了不止一个量级。因此程序和数据如果在内存中的话,会有非常快的读写速度。但内存造价高于磁盘,且内存在断电时会丢失数据也是不能把所有数据和程序都保存在内存中的原因。既然不能全部使用内存,那数据还有程序不可能一直霸占内存。当内存空间不足时,就必须要把内存中不经常运行的程序踢出去。
SWAP 全称swap place,即交换分区。当内存不够时,被踢出的进程被暂时存储到交换区,以便让系统不会因内存不够而导致oom或者其他更致命的情况。当需要这条被踢出的进程时,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。
根据Centos官网介绍,SWAP的大小可以按如下公式确定
M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M * 2 Else S = M + 2
但有时服务器访问量确实很大,有可能出现 SWAP 分区不够用的情况,需要手动构建,这是后话。
在 Linux上可使用 swapon -s 命令查看当前系统上正在使用的交换空间有哪些,以及相关信息。
cv@cv: ~$ swapon -s Filename Type Size Used Priority /dev/sdb8 partition 3905532 0 -2
当 SWAP占用率较高时,对系统性能可能会有一定的影响,所以在适当情况下,我们需要手动刷新,将 SWAP里的数据转储回内存,并清空SWAP里的数据。
其原理非常简单,就是把 SWAP 关闭再重启。
cv@cv: ~$ sudo swapoff -a && sudo swapon -a
- sudo apt update的问题
update时出现下面的提示
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) E: Unable to lock directory /var/lib/apt/lists/
解决方法
方法1:找出所有占用 apt 的进程
cv@cv: ~$ ps -A | grep apt
终止这些占用进程
cv@cv: ~$ sudo kill -9 processnumber
之后再 update 即可。
方法2:删除被锁定文件
cv@cv: ~$ sudo rm /var/cache/apt/archives/lockcv@cv: ~$ sudo rm /var/lib/dpkg/lock
强制重置配置软件包
cv@cv: ~$ sudo dpkg --configure -a
之后再 update 即可。
- CLI运行脚本出现syntax error: unexpected end of file
通常我们在编辑 Linux 服务器上的文件时,直接在 Linux 环境比较麻烦(当然熟练使用 VIM 的程序员除外哈哈),有时我们会使用 Windows 将文件编辑好再上传到服务器端,我这里用的是 Sublime text 。
编辑完脚本上传到服务器运行时,会出现语法错误,以下面的一小段脚本为例
#!/bin/bash echo "updatedb..." sudo updatedbBASE_PATH=$(dirname $(locate $0)) echo ${BASE_PATH}if [ $BASE_PATH == "TODO" ] thenecho "please modify this script with the base path of your bundler installation";exit; fiEXTRACT_FOCAL=${BASE_PATH}/bin/extract_focal.pl echo ${EXTRACT_FOCAL}echo "[- Done -]"
cv@cv: ~/bundler$ bash runbundler.sh runbundler.sh: line 4: $'\r': command not found runbundler.sh: line 7: $'\r': command not found runbundler.sh: line 13: $'\r': command not found runbundler.sh: line 16: $'\r': command not found runbundler.sh: line 17: syntax error: unexpected end of file
这里显示的两个问题都是因为我们的 .sh 文件为 dos 格式,在 dos/windows 系统中按一次回车键实际上输入的是 CRLF ,即回车+换行。
而 Linux 系统一般只能执行 unix 格式的脚本,在 Linux/Unix 系统中按一次回车键实际上输入的是 LF ,即只有换行。
所以这里在 Windows 系统编辑的 sh 脚本文件每行都多了一个回车,当在 Linux 系统中运行时就会报错提示找不到相关命令。
我们可以查看该脚本的格式,在命令行使用 vim 打开脚本, ESC 进入命令输入模式,输入 :set ff ,查看输出结果,比如我得到的是 fileformat=dos
此时我们可以使用 :set ff=unix 将 dos 格式更改为 unix 格式, ff=fileformat ,因此也可以输入 :set fileformat=unix ,这是 :set ff 查看会得到修改后的结果 fileformat=unix
然后再执行脚本就不会出现上面的错误了!
- 文本格式转换之 docx-to-pdf
利用 Liunx 下的 LibreOffice 来实现
~$ python>> import os>> os.system(“libreoffice --invisible --convert-to pdf --outdir /home/cv/Documents/myfiles/ /home/cv/Documents/myfiles/source.docx”)
注意:
1. 转换时要保证 libreoffice 没有被打开
2. 通过命令行调用 liberoffer 时需要注意中文不显示、中文乱码等问题,具体参考博客https://blog.csdn.net/zapperstab/article/details/18602969
未完待续……
Reference
[1] 解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题
[2] linux下docx转pdf
转载于:https://www.cnblogs.com/phillee/p/10789243.html
Linux系统常用命令以及常见问题的解决方法相关推荐
- 【收藏】Linux系统常用命令速查手册(附赠PDF档)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,获取<Linux系统常用命令速查手册>.PDF版. 联系小姐姐,备注"liunx命令 ...
- 【收藏】Linux系统常用命令速查手册(附PDF下载链接)
给大家收集整理了日常常用的Linux系统命令,仅供大家参考. 大家如果觉得文章看起来不太方便,可以在+qq. 2 3 5 53 3 1 0 4 6 备注"liunx命令",即可获取 ...
- Linux 系统常用命令速查手册,值得收藏!
Linux 系统常用命令速查手册,值得收藏! 给大家收集整理了日常常用的 Linux 系统命令,仅供大家参考. 文章目录 Linux 系统常用命令速查手册,值得收藏! 系统信息 date 显示系统日期 ...
- Linux系统常用命令,指令详解及案例
现在的企业有90%甚至更过是使用Linux操作系统, 所以不管是开发还是运维, 不会点Linux知识肯定是无法进入到企业里工作. 而且, 全球500强超级计算机几乎都是使用Linux操作系统, 这也是 ...
- linux系统 常用命令
linux系统 常用命令 ps –ef|grep java 查看进程 netstat –an|grep 52818查看端口是否开启 tail –f log.log 查看日志 echo hello &g ...
- Linux系统常用命令及其使用详解大全
Linux系统常用命令及其使用详解大全 整理了linux常用的命令,最长常用的也就几十个,cd,ls ,vi等等,有些容易忘记,经常拿出来看看. 其他的可以推荐一个网站,https://www.lin ...
- linux系统 常用命令(全面总结)
文章目录 Linux 之 文件目录 工作机制 Linux命令 之 文件目录管理 2.1 目录管理 2.1.1 cd 2.1.2 ls 2.1.3 pwd 2.1.4 mkdir 2.1.5 rmdir ...
- Vmware虚拟机里面的linux系统ping不通宿主机的解决方法(注意同时安装vmware和vbox虚拟机)
Vmware虚拟机里面的linux系统ping不通宿主机的解决方法(注意同时安装vmware和vbox虚拟机) 参考文章: (1)Vmware虚拟机里面的linux系统ping不通宿主机的解决方法(注 ...
- nc提示java过期_用友NC系统使用过程中常见问题和解决方法!财会必看!
原标题:用友NC系统使用过程中常见问题和解决方法!财会必看! 用友NC系统使用过程中常见问题和解决方法: 1.无法安装客户端插件,不能进入NC系统登陆界面 问题现象 现象1:可以打开web界面,但无法 ...
最新文章
- 网络营销外包期间如何提升网络营销外包外链优化效果?
- AJAX推送与拉取方式的比较
- NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)
- Logstash 使用fingerprint filter过滤重复数据
- 3D数学 向量和矩阵
- 看完这些自动化原理图,有一种豁然开朗的感觉
- JAVA入门级教学之(方法-1)
- 设置固定高度_防排烟系统的设置,前室、楼梯间、避难层!设置要求全记住!...
- 前端 input怎么显示null_前端架构 101(二): MVC 初探
- 折线图后面无数据_老板让数据师分析二八法则,此图表完美解决,项目管理师专用图表...
- 强烈推荐!mac超牛皮解压/压缩工具MyZip 1.1.2 mac免费版
- ISL68124与PMBUS
- DynamipsGUI使用注意
- redis 默认过期策略_redis过期策略
- WordPress二次元博客主题模板-Sakurairo v2.5.1.1
- swiper网格布局
- 性能和稳定性测试报告模板
- 为什么大家都想进入IT行业?IT行业到底好不好?
- 【论文】Believe It or Not, We Know What You Are Looking at! 阅读笔记
- c语言樱花飘落代码_用Python画一棵漂亮的樱花树,给女友惊喜
热门文章
- java 模块 分工_Java秒杀系统实战系列~构建SpringBoot多模块项目
- socket 获取回传信息_Luat系列官方教程5:Socket代码详解
- pycharm自带python.exe_Pycharm自带Git实现版本管理的方法步骤
- 计算机组装与维护 授课计划,计算机课程教学计划
- java命令查看环境变量 user.home file.encoding等参数值
- 服务器站点解密出错,修改域超级管理员密码后站点复制出错。
- 手机端适应_不轻易透露的超强技巧!详解iVX中怎样做设备自适应
- 画师id_100位插画师是怎么过日子的?
- php画图取色,procreate怎么取色
- 阅读器xodo_佐道Xodo——手机最佳pdf阅读器