Linux系统与指令那些事儿

1、systemctl指令的相关使用方法:参考Systemd 入门教程:命令篇

 

2、Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

也即:service文件放在/usr/lib/systemd/system/下

 

3、systemd.sevice中文手册:service文件的使用

 

4、systemd.timer中文手册:systemd.time 中文手册

对于"年-月-日"与"时:分:秒"两部分中的每个子部分, 都可以: 使用 "*" 表示匹配任意值、 使用 "," 依次列出多个值、 使用 "/整数" 后缀表示以此整数为间隔不断向后重复跳跃(例如在表示分钟的部分"3/10"等价于"3,13,23,33,43,53")、 使用 ".." 表示一个范围。 最后,还可以用逗号(,)依次列出多个重复(/)与范围(..)。

 

5、Linux下查找文件指令:

(1)find:最常用也是最强大的查找命令,它可以查找任何类型的文件;

命令格式为:

find <指定目录><指定条件><指定动作>,即find pathname -options [-print -exec -ok]

参数解释:

pathname:pathname为搜索的目录及其子目录,默认情况下为当前目录

常用的option选项:

-name:按文件名来查找文件

-user:按照文件的属主来查找文件

-group:按照文件所属的组来查找文件

-perm:按照文件权限来查找文件

-prune:不在当前指定目录中查找

(2)locate:实际是"find -name"的另一种写法,即通过文件名查找文件,但是查找方式跟find不同,它比find快得多;

因为它不搜索具体目录,而是在一个数据库(/var/lib/locatedb)中搜索指定的文件。此数据库含有本地文件的所有信息,此数据库是linux系统自动创建的,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,默认情况下为每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手动的用updatedb命令更新数据库。

(3)whereis:只能用于搜索二进制文件(-b)、源代码文件(-s)、说明文件(-m)。如果省略参数则返回所有的信息。

manual page的说明:whereis locates the binary, source and manual files for the specified command names.

(4)which:在PATH变量指定的路径中搜索指定的系统命令的位置。用echo $PATH可显示当前PATH变量的值。

注:已知文件的名字,获取该文件的绝对路径,可尝试使用locate指令

具体可参考:Linux的五个查找命令:find,locate,whereis,which,type 及其区别

 

6、Linux定时任务:定时任务文件放在/etc/cron.d/目录下, 具体参考:linux下添加定时任务

 

7、linux配置dns三种方式:

(1)、在网卡文件中修改

 

echo 'DNS1="114.114.114.114" ' >> /etc/sysconfig/network-scripts/ifcfg-eth0


(2)、在主机表文件host文件中修改

echo "223.231.234.33 www.baidu.com" >> /etc/hosts


(3)、在域名服务器中修改

echo 'nameserver 114.114.114.114' >> /etc/resolv.conf

 

8、Linux主机在SSH下复制文件到本地:使用scp指令

 

(1)scp是有Security的文件copy,基于ssh登录,操作起来比较方便。

(2)scp只能在linux操作系统平台上,要想在linux与window平台上传文件或者目录,下载一个winscp软件或者下载一个sshsecure shell软件安装在window上即可,非常方便,直接拖拉就行。

(3)上传本机文件到远程服务器

scp local_path/file_name user_name@remote_ip:remote_path/
(4)上传本机目录到远程服务器
scp -r local_path/fold_name user_name@remote_ip:remote_path/
(5)拷贝远程服务器文件到本机
scp user_name@remote_ip:remote_path/file_name local_path/
(6)拷贝远程服务器目录到本机
scp -ruser_name@remote_ip:remote_path/folder_name local_path/

 

9、linux下进程的进程最大数、最大线程数、进程打开的文件数和ulimit命令修改硬件资源限制:点击打开链接
 

10、Linux清理buff/cache的方法:

当使用free -h指令发现可用内存不多,而buff/cache占用较多时,可以使用以下指令清理缓存:

sysctl -w vm.drop_caches=3

 

11、Linux 软链接和硬链接:

先占坑,再补充。

 

12、awk指令

(1)awk为行处理器,相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息;

(2)处理过程:依次对文件的每一行进行处理,然后输出;

(3)基本格式:

#command format
awk  '{pattern + action}' {filenames}

#demo
awk '{print $0}' /etc/passwd

具体可以参考:Linux三剑客之awk命令

13、sed指令:

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

使用demo:

nl /etc/passwd | sed '2a hello world'

# 在第二行后(也即是加在第三行)加上hello world

具体参考:sed 命令详解

14、netstat指令

用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等

具体可以参考:Linux netstat命令详解

 

15、vim中如何将一个文件的内容拷贝到另一个文件中?

如果要通过vim将a文件的内容复制到b文件,则用vim打开b文件,将光标移到需要复制插入的位置,然后进入命令模式中输入:

:r!cat a文件的绝对路径

保存退出:wq!搞定~~

16、vim的一些基本操作:

(1)光标移动相关

光标移到行首:按住shift + 6 键

光标移到行尾:按住shift + 4键

其实这个跟正则表达式的行首(^)和行尾($)一致。

(2)撤销上次操作:u,恢复上一次被撤销的操作:Ctrl+r(Mac是Command+r)

(3)显示行数:“: set nu”

(4)复制粘贴时防止缩进格式错乱:":set paste"

(5)删除指定行:“3,5d",表示删除第3-5行

相关参考:vim常用命令之多行注释和多行删除

17、如何快速的在多个日志文件中寻找调试信息:切换到日志文件路径,然后:grep *,

可参考:linux 如何快速的查找日志中你所要查找的信息

18、cp指令相关:

a、linux复制指定目录下的全部文件到另一个目录中
复制指定目录下的全部文件到另一个目录中
文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。
假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。

19、shell指令批量更换文件名后缀:

场景:例如google图片搜索中将网页下载下来,文件夹中图片没有后缀,需要添加.jpg后缀,这样mac打开文件夹可以预览图片;

解决方法:

利用shell的循环批操作,mv {filename} {filename}.jpg

for file in *.png; do mv "$file" "${file}.jpg"; done

具体参考: Rename all files in directory from $filename_h to $filename_half?

20、linux通过日志排查问题步骤:

(1)先确认log文件路径

(2)在log文件目录下,使用grep  -A {line_num}  -B {line_num} {error_relevant_key_word} *命令找出错误相关文件,同时匹配关键字的行的前后line_num行

具体参考:Linux排查日志总结

21、top指令:

实时显示系统中各个进程的资源占用状况

具体参考:top指令详解

22、df指令

df命令可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息,它也可以显示所有文件系统对i节点和磁盘块的使用情况。

23、文件比较:

(1)vimdiff file1 file2

vimdiff指令使用参考:vimdiff的常用命令

(2)vim -d file1 file2

24、curl指令:

curl -H "Content-Type:application/json" -X POST -d '{"user": "admin", "passwd":"12345678"}' http://127.0.0.1:8000/login

具体参考:curl指令简易教程

25、设置系统语言和终端语言:

请参考:Linux: Define Locale and Language Settings

26、linux下查看某一个tcp/udp端口被哪个进程占用:

(1)lsof -i:port_num命令,即ls open files

lsof -i:80

(2)netstat命令

netstat -tunpl | grep 端口号

27、export指令用法:

请参考:export命令

28、grep指令:

(1)使用grep在文件查找特定关键字:

grep -rnw '/path/to/somewhere/' -e 'pattern'

相关参考: How do I find all files containing specific text on Linux?

其他请参考:linux grep命令详解

29、ssh相关:

(1)ssh原理及相关指令参数

请参考:SSH原理与运用(一):远程登录;Linux ssh命令详解

(2)ssh config相关:

参考:SSH Config 那些你所知道和不知道的事

(3)解决ssh每次需要输入密码问题:

参考:解决Enter passphrase for key

30、eval指令:

请参考:linux shell中的eval命令

31.xz指令

用于生成或解压xz文件

(1)解压:

xz -d -k {filename}.xz

其中-d表示decompress, -k表示保留xz文件,否则解压后会删掉xz文件

32.找出占用磁盘空间较大的大文件:

(1)先使用df -h查看磁盘空间占用情况

(2)使用du -s /* | sort -nr命令查看那个目录占用空间大,  假设为/usr

(3)cd /usr,然后执行du -s /usr/* | sort -nr 一层层排查,找到占用文件多的地方

(4)使用du -h –max-depth=1查看当前目录下文件夹大小情况

(5)如果通过以上方法没有找到问题所在,那么可以使用 lsof | grep deleted 命令,看看是否删除掉的文件仍然被进程占用而没有进行实际删除

相关参考:linux磁盘已满,查看哪个文件占用多

33.less指令查看大的log文件

其操作类似vim,按G调到文件末尾,然后使用f往下翻页和b往上翻页

你可能感兴趣的:(学习笔记,个人总结)