Linux 系统命令学习

暗香疏影 创作者

类 Unix 系统下的一些常用命令和用法。

权限解释

命令转换网站

下面是ls -l的解释:

1
2
3
4
5
6
7
8
9
10
-rw-r--r-- 12 linuxize users 12.0K Apr  8 20:51 filename.txt
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions 其他人权限
| | +-------------------------------> 3. Group Permissions 拥有组权限
| +----------------------------------> 2. Owner Permissions 所有人权限
+------------------------------------> 1. File Type (如果开头是d代表这个是个文件夹)

类型为文件的时候w代表修改文件内容,但是不可以删除,删除需要看上级文件夹\目录的权限是否为w。
当为目录的时候,x代表能否cd进去。对于文件来说x最危险,对于目录来说x只是进去,没那么危险。
r = 4, w = 2, x = 1

修改权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
chown UserName path/to/file
# 修改文件所有人

chown UserName:UserGroup path/to/file
# 修改文件所有人和所有组

chown :UserGroup path/to/file
# 修改文件所有组

chmod a+rwx,g-w,o-w path/to/directory
# a=all, g=group, o = other
#加号代表增加,减号代表减去这个权限

chmod u=rw,g=r,o=r path/to/directory

chmod 644 path/to/directory

chmod -R o=rwX path/to/directory
# 递归权限 rwx 且只有子文件夹继承x权限,文件不继承。
#只有x有大写功能,其他都没有。

tar 归档文件

创建yasuo.tar.bz2的tar包,用来压缩/usr/local目录。

1
2
3
4
tar -jvcf ~/yasuo.tar.bz2 /usr/local

#gzip
tar -zvcf ~/yasuo.tar.gzip /usr/local

查询文件大小或查询文件路径所属硬盘

1
2
3
4
5
6
7
8
9
10
> lsblk # 列出硬盘
> df -Th # 列出硬盘与可用容量
# 查询/opt/abcd文件夹所属硬盘 (可看出mountpoint, 可用容量)
> df -h /opt/abcd
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 1T 1T 0 100% /

# 查看该文件夹占用
du -sh /opt/abcd

定时工作命令 crontab

crontab -l

1
2
3
4
5
6
7
8
9
10
11
12
crontab -e

* * * * * command to be executed
|[-][-][-][-][------]
| | | | | |
| | | | | |
| | | | | +-------------------> 6. 执行命令
| | | | +-------------------------> 5. Day of Week 星期几 (0-6) (星期天=0)
| | | +----------------------------> 4. Month (0-12)
| | +-------------------------------> 3. Day of Month (1-31)
| +----------------------------------> 2. Hour (0-23)
+------------------------------------> 1. Minute (0-59)

Example:

1
2
3
4
5
6
7
crontab -e -u natasha
# -e编辑 -u 在该用户下的命令
*/2 * * * * logger "hello rhcsa"
#每两分钟执行 */2

crontab -l -u natasha
#查询natasha用户下的定时命令

查找进程PID及其路径

方法一:

1
ps aux | grep AliNet

方法二:
先查询获得PID,然后通过PID查询

1
2
3
pgrep AliNet

pwdx <pid>

方法三:
通过PID,从内存方式查看源程序运行路径

1
2
3
4
5
pgrep AliNet

ls -l /proc/<pid>/exe
# 或 [exe查看的是原本运行的位置,cwd查看的是现在就在运行的位置]
sudo ls -l /proc/2470/cwd

id

查看当前用户、组 id。

find

1
2
3
4
5
#查找用户harry的文件并放置文件到/etc/findfiles
find / -user harry -exec cp -r {} /etc/findfiles/ \;

#查找权限755的文件并放置文件到/etc/findfiles
find / -perm 755 -exec cp -r {} /etc/findfiles/ \;

fuser

查看文件被谁占用。

1
fuser -u .linux.md.swp

lsof

查看打开的文件列表。

An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a library, a stream or a network file (Internet socket, NFS file or UNIX domain socket.) A specific file or all the files in a file system may be selected by path.

查看网络相关的文件占用

1
lsof -i

查看端口占用

1
lsof -i tcp:5037

查看某个文件被谁占用

1
lsof .linux.md.swp

查看某个用户占用的文件信息

1
lsof -u harry

-u 后面可以跟 uid 或 login name。

查看某个程序占用的文件信息

1
lsof -c Vim

注意程序名区分大小写。

WireGuard Auto Port Change bash

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
33
34
35
36
37
#!/bin/bash

# Get the current WireGuard port from the config file
WG_PORT=$(grep -oP '(?<=ListenPort = )\d+' /etc/wireguard/wg0.conf)

# Show the current WireGuard port
echo "The current WireGuard port is $WG_PORT."

# Ask the user for the new port or press enter to generate a random port
read -p "Enter the new WireGuard port or press Enter to generate a random port: " NEW_PORT

# If the user didn't enter a new port, generate a random port
if [ -z "$NEW_PORT" ]; then
# Generate a random port between 1024 and 65535
NEW_PORT=$(shuf -i 1024-65535 -n 1)
echo "Generated random port: $NEW_PORT"
fi

# Update the WireGuard config file with the new port
sed -i "s/ListenPort = $WG_PORT/ListenPort = $NEW_PORT/" /etc/wireguard/wg0.conf

# Reload the WireGuard config
systemctl restart wg-quick@wg0.service

# Ask the user if they want to update the firewall rule
read -p "Do you want to update the firewall rule? (y/n) " UPDATE_FIREWALL

if [[ $UPDATE_FIREWALL =~ ^[Yy]$ ]]; then
# Remove the old firewall rule
firewall-cmd --zone=public --remove-port=$WG_PORT/udp

# Add the new firewall rule
firewall-cmd --zone=public --add-port=$NEW_PORT/udp

# Save the firewall configuration
firewall-cmd --runtime-to-permanent
fi
  • 标题: Linux 系统命令学习
  • 作者: 暗香疏影
  • 创建于 : 2016-10-22 00:00:00
  • 更新于 : 2024-04-24 00:00:00
  • 链接: https://blog.23ikr.com/2016/10/22/Wiki-Guide/2018-08-08-linux/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论