Linux命令

Linux命令

  本文长期更新,仅更新我接触到的、想记录的命令。嘿嘿没错,就是篇个人笔记。

grep 命令

1
grep "被查找的字符串" 文件名

  查找SSH连接IP记录:

1
grep Connection\ from /var/log/auth.log

  递归查找:

1
grep -r "被查找的字符串" 文件目录名

  例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串”update”的文件,并打印出该字符串所在行的内容,grep -r update /etc/acpi

  来源菜鸟教程:https://www.runoob.com/linux/linux-comm-grep.html

scp命令

1
2
3
4
5
6
7
8
9
scp [可选参数] file_source file_target 

scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
  • -r: 递归复制整个目录。
  • -P port:注意是大写的P, port是指定数据传输用到的端口号
  • -p:保留原文件的修改时间,访问时间和访问权限。

  使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

  从远程目录拉取文件到本地:

1
2
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
scp -r www.runoob.com:/home/root/others/ /home/space/music/

  指定远程端口号:

1
2
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator

特权与普通用户的切换方法

  也就是用户之间切换的方法。摘自:Ubuntu中root用户登录、普通用户切换到root身份及root用户切换至普通用户方法

  问题背景:使用腾讯云进入ubuntu系统,默认用户使用命令cd ~时,无法进入ubuntu用户的/home/ubuntu/目录。

  进入特权(root)模式:

1
sudo -i

  然后切换到该用户(登录式切换:会通过读取目标用户的配置文件来重新初始化)

1
su - username

  切换完成,所在目录为该用户的home目录,即/home/username

Ubuntu添加和删除用户

  摘自:如何在Ubuntu 20.04上添加和删除用户

  适用于20.04版本,其他版本未知。

  1. 添加用户:
1
sudo adduser username

  系统会询问您一系列问题。 输入并确认新的用户密码,其他问题是选填的。

  1. 仅删除用户(保留主目录和邮件):
1
sudo deluser username
  1. 删除用户及其主目录和邮件:
1
sudo deluser --remove-home username

修改主机名称(Ubuntu)

  如何在 Ubuntu 20.04 上修改主机名(中文)

  原版英文文章

  显示当前主机名

1
hostnamectl

  修改系统主机名

1
2
3
4
sudo hostnamectl set-hostname host.example.com
sudo hostnamectl set-hostname "Your Pretty HostName" --pretty
sudo hostnamectl set-hostname host.example.com --static
sudo hostnamectl set-hostname host.example.com --transient

  你不应该在同样的网络不同的机器上使用相同的主机名。

静态主机名被存储在/etc/hostname,并且 pretty 主机名被存储在/etc/machine-info文件。

  在大多数系统中,主机名在/etc/hosts中被映射到127.0.0.1。打开文件,并且修改旧的主机名到新的主机名。

1
2
3
4
5
6
7
127.0.0.1   localhost
127.0.0.1 neptune.linuxize.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

自动脚本执行

  执行脚本方法:执行脚本四种方法Shell如何执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#第一种方法:绝对路径执行
/root/mysh/test.sh #需要有执行权限

#第一种方法:相对路径执行
cd /root/mysh/
./test.sh #需要有执行权限

#第三种方法
bash test_bash.sh #执行bash shell脚本,不需要执行权限,甚至第一行指定bash路径的也可以不要

sh test_sh.sh #执行sh shell脚本,不需要执行权限,甚至第一行指定bash路径的也可以不要

#第四种方法
#还有一种暂时不常用
. hello.sh

source hello.sh

  关于sh shell 和bash shell的区别,详情参考:二次文章一次文章

bash脚本:循环

  https://www.cnblogs.com/EasonJim/p/8315939.html

  https://www.runoob.com/linux/linux-shell-process-control.html

开机运行脚本

  详情参考:https://cloud.tencent.com/developer/article/1711876

1
2
3
4
#重启后的执行任务

crontab -e
@reboot /root/mysh/test.sh

用shell脚本监控进程是否存在 不存在则启动

  来源:大自然的流风百度知道

  适配变体:

  ①检查OpenWrt中某广告过滤软件是否运行,未运行则启动该软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh
ps -fe|grep /usr/share/koolproxy/koolproxy |grep -v grep

if [ $? -ne 0 ]
then
echo " "
echo ">>>>koolproxy or godproxy not running, trying start"
echo " "

/etc/init.d/koolproxy start

if [ $? -eq 0 ]
then
echo "****************************"
echo " successfully running "
echo "****************************"

fi

else
echo " "
echo ">>>>koolproxy or godproxy is running, very well"
echo " "

fi

  之后添加到开机启动项中,解决重启后不自动运行的问题。

  ②检查虚拟机OpenWrt是否运行,未运行则启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
for((i=0;i<6;i++));
do

ps -fe|grep /usr/bin/kvm\ -id\ 100\ -name\ OpenWrt|grep -v grep

if [ $? -ne 0 ]
then
echo " "
echo ">>>>OpenWrt not running, trying start"
echo " "

pvesh create /nodes/pve/qemu/100/status/stop

if [ $? -eq 0 ]
then
echo "****************************"
echo " successfully running "
echo "****************************"

fi

else
echo " "
echo ">>>>OpenWrt is running, very well"
echo " "

fi

sleep 30

done

  结合上文“开机运行脚本”,将其加入重启后执行的任务中,这里用了root权限。