linux操作笔录

1、为什么中Linux中各种服务都带一个d呢?

d是daemon的缩写,说明它自己是个守护进程(daemon) ,它在后台运行,一般都是用来做服务端程序。
例如:mysqld代表是mysql数据库服务的守护进程。

2、Linux中有很多已.d结尾的目录作用是什么?

一般为了保持对原有配置方式的兼容,而增加的.d结尾目录。
.d是directory的缩写,表示这是一个目录(文件夹)。这个在配置文件中比较常见,一般如果有一系列格式相同的,目的一致的配置文件,就把它们放在一个以.d结尾的文件夹中。
例如:init.d中存放的就是一系列系统服务的管理(启动与停止)脚本。

3、bash和sh有什么区别呢?

两者都是shell,都是解析工具。
1.bash(Bourne Again SHell) 是linux标准的默认shell ,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。
2.sh(Bourne shell )是UNIX标准的默认shell,它简洁(concise)、紧凑(compact) 、高效(fast) ,是由AT&T编写,属于系统管理shell。
bash完全兼容Bourne shell,也就是说用Bourne shell的脚本不加修改可以在bash中执行

4、Linux经常死机、卡住一般如何排查?

linux操作系统服务器在出现死机或卡顿情况,可以参考以下项目进行整体排查:
(1)检查服务器进程与服务否占用了太多的内存或是没有释放内存,当服务器内存用完后,然后就会很快宕机;
(2)看看/var/spool/cron 里面是不是有cron(计划任务、自动任务)在对应时间段内执行;
(3)检查web服务器的参数是否超过了服务器的性能,如允许最大连接数过高等;
(4)进程数很高,服务瘫痪,机器假死(例如zombie进程是否过多,一直占用资源);
(5)cat /var/log/message查看系统日志是否有异常
(6)检查磁盘是否有坏块。(可使用badblocks命令配合参数)
(7)内核消耗过大,查看是否有瞬间资源占用过大的进程或服务;
(8)ps -ef 查看进程异常否,是否存在攻击

5、服务器宕机了怎么办?

启动机器,看能否登陆,如果能登陆,请检查:
(1)是否是应用程序导致内存溢出或者泄露导致
(2)是否是进程过多或者不断创建,耗尽资源导致
(3)是否是数据库程序死锁,连接数过多导致
(4)是否是应用程序异常导致
(5)是否是流量负载过大导致
(6) 是否是遭受黑客入侵攻击导致
(7)是否是误操作导致
如果无法查看故障现场,则可以查询系统日志查看是否有异常记录。

6、Linux中如何查看软件是否安装??

首先我们知道grep是Linux中常用的文件搜索工具,这里我们要看软件是否安装,其实也会用到grep。由于Linux安装软件方式众多,所以并没有一种通用的方法查看某软件是否安装,总结如下:
(1)rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。
rpm -qa | grep ruby
(2)以deb包安装的,可以用dpkg -l能看到。如果是查找指定软件包,用dpkg -l | grep “软件或者包的名字”;
dpkg -l|grep ruby
(3)yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;
yum list installed | grep ruby
(4)如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,
上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。
说明:其中rpm yum 是Redhat系linux的软件包管理命令,dpkg是debian系列的软件包管理命令
该问题的内容转载自:
https://www.cnblogs.com/yuanqiangfei/p/8033000.html

7、怎么理解Linux中“每个进程都有自己独立的4G内存空间”这句话?

这指的其实是32位操作系统中每个进程系统给分配的“虚拟内存”为4G(具体机制这里就不说了,虚拟内存是相当大的一篇内容,仍需学习),我们日常所说的32位和64位其实就是对应着4G(2的32次方)和8G(2的64次方)的进程内存。
注:
1G = 1024MB
1MB = 1024KB
1KB = 1024Byte
(1024 = 2^10
1G=2^30)
4G对应着2的32次方byte(32位操作系统),8G对应着2的64次方byte(64位操作系统)。

8、su和su -的区别?

su只是切换了root身份,但Shell环境仍然是普通用户的Shell;
而su -连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。
su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;
而用su -命令切换以后,工作目录变成root的工作目录了。
用echo $PATH命令看一下su和su - 后的环境变量已经变了。

9、Linux中/usr/lib/systemd/system目录作用???

该目录自动存放启动文件的配置位置,里面一般包含有XXXXX.service。
当我们利用systemctl查看服务状态时,如下:

[admin@localhost system]$ systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-05-17 13:45:54 CST; 7 months 20 days ago
  Process: 4441 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 4425 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 4440 (mysqld_safe)
   Memory: 6.6G
   CGroup: /system.slice/mysqld.service
           ├─4440 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─4702 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysq...

如上出现的/usr/lib/systemd/system/mysqld.service,其实我们用systemctl命令操作mysqld服务其实就是操作mysql.service文件,其实上面命令中的mysqld也可以用mysqld.service,调用该文件即可启动该服务。

mysqld.service文件内容:

[admin@localhost system]$ cat mysqld.service
#
# Simple MySQL systemd service file
#
# systemd supports lots of fancy features, look here (and linked docs) for a full list: 
#   http://www.freedesktop.org/software/systemd/man/systemd.exec.html
#
# Note: this file ( /usr/lib/systemd/system/mysql.service )
# will be overwritten on package upgrade, please copy the file to 
#
#  /etc/systemd/system/mysql.service 
#  
# to make needed changes.
# 
# systemd-delta can be used to check differences between the two mysql.service files.
#

[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target
Alias=mysql.service

[Service]
User=mysql
Group=mysql

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables etc.
ExecStartPre=/usr/bin/mysql-systemd-start pre

# Start main service
ExecStart=/usr/bin/mysqld_safe --basedir=/usr

# Don't signal startup success before a ping works
ExecStartPost=/usr/bin/mysql-systemd-start post

# Give up if ping don't get an answer
TimeoutSec=600

Restart=always
PrivateTmp=false

10、安装supervisor,手动配置开机自启动??

第一步:编辑新建supervisord.service

vi /lib/systemd/system/supervisord.service

第二步:添加如下内容

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
SysVStartPriority=99
[Install]
WantedBy=multi-user.target

第三部:配置开机启动

systemctl enable supervisord.service
或者
systemctl enable supervisord

还有其他其他命令
systemctl start/restart/stop supervisor.service
验证一下是否为开机启动:
systemctl is-enabled supervisord
重新启动服务
systemctl restart supervisord
查看所有已启动的服务
systemctl list -units --type=service
停止开机自启动
systemctl disable nfs-server.service
查看服务当前状态
systemctl status nfs-server.service

11、Linux中ifcconfig命令的输出内容解析??

注意:
Windows:ipconfig
Linux:ifconfig
实例:

eth0          Link encap:Ethernet  HWaddr 52:54:00:FA:9E:91  
                        inet addr:192.168.129.46  Bcast:192.168.129.255  Mask:255.255.255.0 
                        inet6 addr: fe80::5054:ff:fefa:9e91/64 Scope:Link 
                        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
                        RX packets:96430 errors:0 dropped:0 overruns:0 frame:0 
                        TX packets:10274 errors:0 dropped:0 overruns:0 carrier:0 
                        collisions:0 txqueuelen:1000 
                        RX bytes:19839082 (18.9 MiB)  TX bytes:733188 (716.0 KiB) 
                        Interrupt:11 

lo              Link encap:Local Loopback  
                    inet addr:127.0.0.1  Mask:255.0.0.0 
                    inet6 addr: ::1/128 Scope:Host 
                  UP LOOPBACK RUNNING  MTU:65536  Metric:1 
                    RX packets:16 errors:0 dropped:0 overruns:0 frame:0 
                    TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 
                    collisions:0 txqueuelen:0 
                  RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b) 

解析:
(1)eth0 表示第一块网卡(eth是Ethernet的缩写), 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 52:54:00:FA:9E:91
inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.129.46,广播地址 Bcast:192.168.129.255,掩码地址Mask:255.255.255.0
(2)lo 是 表示主机的回环地址(Loopback Address),这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如 把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。
(3)内容解析
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息。

12、Linux中如何查找MySQL正在使用的配置文件位置?

命令:
which mysqld
/usr/sbin/mysqld --verbose --help | grep -A 1 ‘Default options’

[admin@localhost etc]$ which mysqld
/usr/sbin/mysqld
[admin@localhost etc]$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'
Warning: World-writable config file '/etc/my.cnf' is ignored
2021-03-02 17:16:09 0 [Warning] Can't create test file /var/lib/mysql/doctor-test.lower-test
2021-03-02 17:16:09 0 [Note] /usr/sbin/mysqld (mysqld 5.6.36) starting as process 25218 ...
2021-03-02 17:16:09 25218 [Warning] Can't create test file /var/lib/mysql/doctor-test.lower-test
2021-03-02 17:16:09 25218 [Warning] Can't create test file /var/lib/mysql/doctor-test.lower-test
2021-03-02 17:16:09 25218 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2021-03-02 17:16:09 25218 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
2021-03-02 17:16:09 25218 [Note] Binlog end
2021-03-02 17:16:09 25218 [Note] Shutting down plugin 'MyISAM'
2021-03-02 17:16:09 25218 [Note] Shutting down plugin 'CSV'

上面获取到的/etc/my.cnf就是使用的配置文件。

/usr/sbin/mysqld的获取还可以通过systemctl status status

[admin@doctor-test etc]$ systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-01-22 14:16:23 CST; 1 months 8 days ago
  Process: 24795 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 24771 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 24788 (mysqld_safe)
   Memory: 5.6G
   CGroup: /system.slice/mysqld.service
           ├─24788 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─24918 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/lib/mysql/doctor-test.err --pid-file=/...
[admin@doctor-test etc]$ cd /
[admin@doctor-test /]$ systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-01-22 14:16:23 CST; 1 months 8 days ago
  Process: 24795 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 24771 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 24788 (mysqld_safe)
   Memory: 5.6G
   CGroup: /system.slice/mysqld.service
           ├─24788 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─24918 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/lib/mysql/doctor-test.err --pid-file=/...

13、linux中的ssh_config和sshd_config配置文件

ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。

14、查看某一时间区间内的日志信息

1.grep命令
命令: grep ‘时间‘ ‘日志文件名 ‘
(1)例如查询2020-02-19 14:10到2020-02-19 14:15区间的日志
grep “2020-02-19 14:1[0-5]” dubbo-elastic-job.log
(2)例如查询当天10点到11点的日志
grep "2020-02-19 1[0-1] " dubbo-elastic-job.log

2.sed命令—推荐使用
例如查询2020-02-19 14:10到2020-02-19 14:15区间的日志
sed -n ‘/2020-02-19 14:10:00/,/2020-02-19 14:15:00/p‘ dubbo-elastic-job.log

3.awk命令
例如查询今天14:10:10 到14:12:59区间的日志,注意时间要用引号
awk ‘$2>“14:10:10” && $2<“14:12:59”‘ dubbo-elastic-job.log  
注意:参数$1和$2的取值,我这里$1是指年月日,$2是指时分秒。

15、Linux中查看磁盘使用情况?

df:显示磁盘分区上可以使用的磁盘空间。
du:显示每个文件或目录的磁盘使用空间,即文件的大小。可结合sort命令方便查看。
https://blog.csdn.net/u014311799/article/details/78775175

16、Linux中查看内存使用情况?

top
free
cat /proc/meminfo,动态更新的虚拟文件事实上是诸如free,top和ps这些与内存相关的工具的信息来源。
特定进程的内存使用信息也可以通过命令:cat /proc//statm 、 cat /proc//status 来查看。
https://www.linuxprobe.com/check-linux-memory.html

17、Linux中查看CPU和GPU的使用情况?

https://blog.csdn.net/lrt366/article/details/89257643
https://blog.csdn.net/wujizhishui/article/details/89333957

18、grep 匹配多个关键字

1.一个关键字:
(1)cat filename | grep 'xxx'
匹配文件中包含xxx的那一行
(2)cat filename | grep -v 'xxx'
匹配文件中不包含 xxx的那一行
2.多个关键字:
(1)grep -E "word1|word2|word3" file.txt
匹配 file.txt 中包含 word1 word2 word3 的行。
满足其中任意条件(word1、word2和word3之一)就会匹配。
(2)grep word1 file.txt | grep word2 | grep word3
必须同时满足三个条件(word1、word2和word3)才匹配。

19、shell脚本执行报错:/bin/bash^M: bad interpreter: No such file or directory

shell脚本格式必须是unix才行,但脚本若是在windows上编写完成传到Linux服务器上的,则执行就会报错。
windows环境下的文件是dos格式,即每行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。
(1)查看文件格式
  1)cat -A filename,如果输出结果中行末尾是^M, 则 是 d o s 格 式 , 如 果 行 末 尾 只 是 ,则是dos格式,如果行末尾只是,则是dos格式,如果行末尾只是,则是unix格式。
  2)vim filename,编辑文件,执行“:set ff”,若执行结果为fileformat=dos则为dos格式,若执行结果为fileformat=unix则为unix格式。
  3)od -t x1 filename,以16进制查看文件,若输出结果中存在“0d 0a”则为dos格式,如果只有“0a”则为unix格式。其中“0d”即为回车符“\r”,“0a”即为换行符“\n”。
(2)问题解决
通过上图可以看出,文件末尾是^M$,所以要修改该shell脚本格式,方法如下:
  1)sed -i “s/\r//” filename 或sed -i “s/^M//” filename,直接将回车符替换为空字符串。
  2)vim filename,编辑文件,执行“: set ff=unix”,将文件设置为unix格式,然后执行“:wq”,保存退出。
  3)dos2unix filename或busybox dos2unix filename,如果提示command not found,可以使用前两种方法。

20、查看历史命令相关用法

1.使用上\下方向键,命令行会显示相对于当前命令的上一条或下一条命令。
2.也可以在命令行敲入history,打印出执行过的历史命令。
3.Ctrl+ p与 Ctrl +n与上\下方向键的作用一样。
4.使用Ctrl+ r搜索历史命令:输入一个或多个字符,系统会找到最近一个包含该字符的命令;找到想要的命令后,可以按回车执行这条命令,还可以按上下键查找该命令前后的命令;按左右键移动光标并修改这条命令。建议使用该快捷键搜索时,一般输入特殊的字符进行查找。

21、shell脚本获取今天、昨天、前天以及n天前的日期

(1)获取今天的日期

log=$(date -d "now" +%Y-%m-%d)
echo ${log}

(2)获取昨天的日期

log2=$(date -d "yesterday" +%Y-%m-%d)
echo ${log2}

或者

log2=$(date -d "1 day ago" +%Y-%m-%d)
echo ${log2}

(3)获取前天的日期

log3=$(date -d"2 day ago" +%Y-%m-%d)
echo ${log3}

(4)获取具体日期的前几天

log4=$(date -d"15 day ago 2017-04-16" +%Y-%m-%d) 
echo ${log4}
输出:2017-04-01

22、Linux中查看历史命令执行时间

export HISTTIMEFORMAT='%F %T'

输入上面的命令后再输入history,即可查看每条历史命令以及执行时间。

以梦为马,以汗为泉,不忘初心,不负韶华。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值