首页 > 系统相关 >linux基础

linux基础

时间:2024-11-22 21:09:56浏览次数:1  
标签:文件 temp user1 data 基础 linux txt root

linux基本命令

1修改时区

1.修改时区
timedatectl set-timezone “时区”

2.创建用户

查看用户
id admin
创建用户
useradd admin
修改密码
passwd admin
输入两次
修改自己的密码时直接passwd

3切换用户

su - admin
su admn
注销exit

4vim

1.按i键进入插入模式
2.按esc键返回命令模式
:wq保存并推出  退出时会改变atime mtime ctime
:q仅退出   退出时不会改变atime mtime ctime
:q!强制退出
:wq!强制保存 

[root@temp ~]# stat /etc/profile
  File: /etc/profile
  Size: 2123      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 67465529    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2024-10-14 21:25:49.910067943 +0800
Modify: 2020-05-15 13:20:14.000000000 +0800
Change: 2024-10-14 11:15:26.100975815 +0800
 Birth: -

5history

history 查看历史记录
!10 运行第10条历史记录
!vim 运行上一条vim开头的命令
/etc/profile中定义历史记录
HISTSIZE=1000

清除历史记录
echo > /root/.bash_history
history -c 
 

6date

 date
 修改时间
 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
 
 显示时间
 -d, --date=STRING
              display time described by STRING, not 'now'
[root@temp ~]# date -d '1 day ago' +%Y-%m-%d
2024-10-17

[root@temp ~]# echo $[$(date +%s)/86400]
20014
+%s代表1970年据今多少秒

[-u|--utc|--universal]
a | b | c :
多选一
Coordinated Universal Time (UTC)
: 
世界协调时间


查看可用时区:
timedatectl list-timezones
设置新的时区: 使用 timedatectl set-timezone 命令,例如将时区设置为 Asia/Shanghai:
sudo timedatectl set-timezone Asia/Shanghai
验证更改: 使用以下命令检查当前的时区设置:
timedatectl


文件夹管理

ls

ls -l长格式显示文件
ls -R递归显示文件夹下所有子文件
显示目录本身
[root@temp ~]# ls -dl /etc/
drwxr-xr-x. 82 root root 8192 Oct 19 09:02 /etc/
易读方式显示
[root@temp ~]# ls -lh
total 4.0K
-rw-------. 1 root root 1.2K Oct 14 11:17 anaconda-ks.cfg

文件修改时间排序
-t     sort by modification time, newest first
[root@temp /]# ls -lt
total 20
drwxrwxrwt.  12 root root 4096 Oct 19 09:31 tmp
drwxr-xr-x.  82 root root 8192 Oct 19 09:02 etc
drwxr-xr-x.  25 root root  720 Oct 19 09:02 run
drwxr-xr-x.  20 root root 3160 Oct 19 09:02 dev
dr-xr-xr-x.  13 root root    0 Oct 19 09:02 sys

cp

cp -p 保留权限和时间戳
cp -a =cp -dRp  保留快捷方式 递归复制目录  保留权限

mkdir

mkdir -p 递归创建文件夹

touch

创建新文件或者更新时间戳atime,mtime,ctime(如果文件存在)
touch * 更新所有文件时间戳

文件属性

[root@temp etc]# stat cron.deny 
  File: cron.deny
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 67611116    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2019-11-09 00:47:44.000000000 +0800
atime: 文件最后一次访问时间
如果atime比mtime和ctime新的时候24小时变更一次
Modify: 2019-11-09 00:47:44.000000000 +0800
mtime: 文件最后一次修改时间
Change: 2024-10-14 11:15:40.229085631 +0800
ctime: 文件大小,权限改变
 Birth: -

file

显示文件类型

file 文件名

用户管理

vim /etc/login.defs

PASS_MAX_DAYS   99999   密码最大过期时间 天为单位
PASS_MIN_DAYS   0       密码最小过期时间 默认为0天
PASS_MIN_LEN    5       密码最小长度
PASS_WARN_AGE   7       PASS_WARN_AGE密码过期前的警告天数。
UID_MIN                  1000   用户创建用户uid最小为1000
UID_MAX                 60000   用户创建用户uid最大60000
SYS_UID_MIN               201   系统用户最小为201
SYS_UID_MAX               999   系统用户最大为999

创建和删除用户

创建用户

useradd [options] LOGIN
创建用户
创建组
创建家目录
创建邮箱
echo "password" | sudo passwd --stdin username非交互输入密码

删除用户

userdel [options] LOGIN

删除用户两种方式

userdel user1

[root@temp ~]# useradd user1
[root@temp ~]# chown user1:user1 1.txt/
[root@temp ~]# ls -ld 1.txt/
drwxr-xr-x. 2 user1 user1 6 Oct 19 17:59 1.txt/
[root@temp ~]# userdel user1
[root@temp ~]# ls -ld 1.txt/
drwxr-xr-x. 2 1000 1000 6 Oct 19 17:59 1.txt/
删除用户后文件夹权限变为uid
useradd user1
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
删除user1后再创建user1报错

解决办法:

1.
删除现有主目录:如果目录内容不重要,可以删除它,然后重新创建用户。
rm -rf /home/user1
useradd user1
删除现有的邮箱文件:如果该邮箱文件不再需要,可以删除它:
rm /var/mail/user1

2.
给user2家目录添加权限
[root@temp ~]# userdel user2
[root@temp ~]# su - user2
su: user user2 does not exist
[root@temp ~]# useradd user2
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@temp ~]# chown -R user2:user2 /home/user2
[root@temp ~]# useradd user2
useradd: user 'user2' already exists
[root@temp ~]# su - user2
[user2@temp ~]$ exit
logout

[root@temp ~]# rm -rf /home/user1
[root@temp ~]# rm /var/mail/user1
rm: remove regular empty file '/var/mail/user1'? y
[root@temp ~]# useradd user1
useradd: user 'user1' already exists
[root@temp ~]# ls -ld 1.txt/
drwxr-xr-x. 2 user1 user1 6 Oct 19 17:59 1.txt/
再次创建user1之后如果uid与原用户相同文件夹权限则恢复

undersell -r user1

删除用户时删除邮箱和家目录
[root@temp ~]# userdel -r user1
userdel: user1 mail spool (/var/spool/mail/user1) not found
userdel: user1 home directory (/home/user1) not found
[root@temp ~]# useradd user1

用户信息

显示用户信息

[root@web01 ~]# id apache

uid=48(apache) gid=48(apache) groups=48(apache)

[root@temp ~]# cat /etc/passwd |tail -5

存放用户信息文件
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
用户名:密码:用户ID:组ID:用户描述:主目录:登录shell
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

cat /etc/shadow

存放用户密码信息
user2:$6$2rQMcGWPR0q8MTMI$8BEyXF36oUd2GL0IQ5Negd1yx6JruE4t3/k5ktYT1U0YCFV0cFGWrvFfqqI9O5CHh2eib3BlrXttiTW8DjIbg/:20015:0:99999:7:::

用户名:加密密码:密码最后修改时间:密码最小年龄:密码最大年龄:密码过期前通知:保留字段:


astchg (第3个字段,20015):表示自1970年1月1日以来的天数,最近一次密码更改的日期。
min (第4个字段,0):密码更改的最小天数。
max (第5个字段,99999):密码的最大有效天数。
warn (第6个字段,7):密码过期前的警告天数。
inactive (第7个字段,空白):密码过期后账号仍然有效的天数。
expire (第8个字段,空白):账号过期的日期(以天为单位)。


用户名: user2
加密密码: $6$2rQMcGWPR0q8MTMI$...  如果此位置为!!表示没有设置密码
密码最后修改时间: 20015  从1970年7月1号至今天数
密码最小年龄: 0
密码最大年龄: 99999
密码过期前通知: 7
最后的保留字段为空,表示没有其他相关信息。

修改用户信息

usermod -l user55 -u 2100 -g 1001 -c "Test Account" -d /var/www/html -s /sbin/nologin user5
-l user55: 将用户名改为 user55。
-u 2100: 将用户ID (UID) 改为 2100。
-g 1001: 将主组ID (GID) 改为 1001。
-c "Test Account": 修改用户描述为 "Test Account"。
-d /var/www/html: 将主目录改为 /var/www/html。
-s /sbin/nologin: 设置登录 shell 为 /sbin/nologin,表示该用户不能直接登录。

锁定用户原理

[root@temp ~]# cat /etc/shadow|tail -2
user1:!$6$mzQYfHj42.IhMURb$TQcTzeI.WN51SWLC8crFVPq.CmGFDG1JlhuTQMc7rgPI8eMv2uH8nKjM3xiAlEPzZ.4vnquWWkb2BqnoRJ216/:20015:0:99999:7:::
在哈希密码前加! 

组信息

[root@temp ~]# cat /etc/group|tail -1

user2:x:1001:

user2: 组名
x: 表示组密码
1001: 组ID (GID)
(空字段): 该组的成员列表,当前没有成员。

私有组:初始组,有且只有一个初始组

附加值:额外组,可以有多个附加组

创建组,修改组


[root@temp ~]# groupadd it
[root@temp ~]# groupadd -g 3000 hr
-g
修改初始组
-G
修改附加值
-a: append
追加

[root@temp ~]# usermod -g it user1
[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it)

-G不会保留之前的附加组
[root@temp ~]# usermod -G hr user1
[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it),3000(hr)
[root@temp ~]# usermod -G user1  user1
[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it),1000(user1)

-aG:追加附加组
[root@temp ~]# usermod -aG hr  user1
[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it),1000(user1),3000(hr)

组密码

[root@temp ~]# cat /etc/gshadow|tail -1
hr:!::user1

hr: 组名
!: 表示该组没有设置密码(通常用于限制组访问)。
**(空字段)**: 该组的管理员,当前没有设置。
user1: 该组的成员。

给组设置密码

[root@temp ~]# gpasswd hr
Changing the password for group hr
New Password: 
Re-enter new password: 

给组设置密码后可以登录组,变成组成员 
[user2@temp ~]$ id
uid=1001(user2) gid=1001(user2) groups=1001(user2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user2@temp ~]$ newgrp hr
Password: 
[user2@temp ~]$ id
uid=1001(user2) gid=3000(hr) groups=3000(hr),1001(user2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

将用户从组移除

gpasswd -d  用户名 组名

[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it),1000(user1),3000(hr)
[root@temp ~]# gpasswd -d user1 hr
Removing user user1 from group hr
[root@temp ~]# id user1
uid=1000(user1) gid=1002(it) groups=1002(it),1000(user1)

权限管理

文件和文件夹权限

[root@temp ~]# ls -l
total 28
drwxr-xr-x. 2 user1 user1     6 Oct 19 17:59  1.txt
- rw- --- ---. 1 root  root   1161 Oct 14 11:17  anaconda-ks.cfg
文件类型  文件拥有人  文件拥有组  其他人  链接文件数  属主 属组  文件大小  mtime

d文件夹
l快捷方式
绿色可执行文件
.开头的文件为隐藏文件
b块设备
c字符设备,鼠标键盘,显示器

r:
浏览该目录中的文件
x:
可以进入该目录
w:
可以在文件夹中创建文件,删除文件



文件的意义
r
可以读取文件内容
w
可以修改文件内容,但不能删除文件
x
可以执行该文件

目录的意义
r:
浏览该目录中的文件
x:
可以进入该目录
w:
可以在文件夹中创建文件,删除文件

对文件夹有rwx权限,可以删除文件夹中文件
[root@temp data]# ll 1.txt 
-rw-r--r--. 1 root root 0 Oct 19 19:41 1.txt
[root@temp data]# ll -d /data/
drwxr--rwx. 2 root root 19 Oct 19 19:41 /data/
[user3@temp data]$ ll -d 1.txt 
-rw-r--r--. 1 root root 0 Oct 19 19:41 1.txt
[user3@temp data]$ rm 1.txt 
rm: remove write-protected regular empty file '1.txt'? y'

只能删除当前文件夹下的文件,redhat文件夹内有文件,如果redhat下没有文件就可以删除
[root@temp data]# ll -d redhat/
drwxr-xr-x. 2 root root 6 Oct 19 19:44 redhat/
[user3@temp redhat]$ rm -rf 1.txt 
rm: cannot remove '1.txt': Permission denied
[user3@temp redhat]$ cd ..
[user3@temp data]$ rm -rf redhat/
rm: cannot remove 'redhat/1.txt': Permission denied 

修改文件拥有人和拥有组

chown: change owner

递归修改/data下所有文件属主和属组
chown -R  user3:user3 /data/

修改文件拥有组两种方式
[root@temp data]# chown  -R  :user3  /data/
[root@temp data]# chgrp root /data/

[root@temp data]# ll -d /data/
drwxr--rwx. 3 user3 root 20 Oct 19 19:51 /data/


[root@temp data]#  ls -ld  /data/
drwxr--rwx. 3 root root 20 Oct 19 19:51 /data/
[root@temp data]# chown user3:user3 /data/
[root@temp data]#  ls -ld  /data/
drwxr--rwx. 3 user3 user3 20 Oct 19 19:51 /data/
[root@temp data]# ll -d redhat/
drwxr-xr-x. 2 root root 15 Oct 19 19:51 redhat/
[root@temp data]# chown -R  user3:user3 /data/
[root@temp data]# ll -d redhat/
drwxr-xr-x. 2 user3 user3 15 Oct 19 19:51 redhat/
[root@temp data]# 


修改文件权限

chmod

u:用户(文件拥有者)

g:组

o:其他用户

a:所有用户(默认值)

chmod u+x file.txt    # 为文件拥有者添加执行权限
chmod g-w file.txt    # 从组中删除写权限
chmod o=r file.txt    # 将其他用户的权限设置为只读

读 (r) = 4
写 (w) = 2
执行 (x) = 1


chmod 755 file.txt    # 用户可读、可写、可执行;组和其他用户可读和可执行
chmod 644 file.txt    # 用户可读、可写;组和其他用户可读


-R: 递归地更改目录及其内容的权限。
chmod -R 755 /path/to/directory  # 递归地为目录及其文件设置权限

umask

什么是umask?

umask(用户文件创建掩码)定义了在创建新文件或目录时,系统将屏蔽(不允许)哪些权限位。umask的值以八进制表示,通常由三位数字组成,分别对应用户、组和其他用户的权限。

[root@temp data]# umask 
0022

[user3@temp ~]$ umask 
0002


新文件的默认权限:通常是666(rw-rw-rw-),意味着所有用户都有读和写权限。
新目录的默认权限:通常是777(rwxrwxrwx),意味着所有用户都有读、写和执行权限。


umask的工作原理
umask的值会从默认权限中减去。例如:

如果umask设置为002,则新文件的权限将是664(666 - 002),新目录的权限将是775(777 - 002)。

设置umask值: 你可以通过在终端中输入以下命令来设置umask值:

umask 002

永久设置umask: 要使umask设置在每次登录时都生效,可以将其添加到用户的shell配置文件中,例如~/.bashrc~/.bash_profile

echo "umask 002" >> ~/.bashrc

文件的特殊权限

1. Setuid(设置用户ID)

  • 作用:当一个可执行文件具有Setuid位时,以该文件所有者的身份执行,即使运行该文件的用户不是文件的所有者。

  • 用法:常用于需要特权的程序,例如/usr/bin/passwd

  • 设置方式

    chmod u+s filename
    
  • 表示:在文件的权限字符串中,Setuid位用S表示(如果其他执行位为-)或s(如果其他执行位为x)。

data文件夹对user3无创建目录权限,mkdir添加suid后user3创建文件夹属主为root

[root@temp data]# chmod u+s /usr/bin/mkdir 
[root@temp data]# ll -d /data/
drwxrwxr-x. 3 root root 20 Oct 19 19:51 /data/
[user3@temp data]$ ls -dl 1
drwxrwxr-x. 2 root user3 6 Oct 19 20:17 1

2. Setgid(设置组ID)

  • 作用:当一个可执行文件具有Setgid位时,以该文件所属组的身份执行。对于目录,当Setgid位被设置时,新创建的文件和子目录将继承父目录的组ID。

  • 用法:常用于共享组文件的情况。

  • 设置方式

    chmod g+s filename
    
  • 表示:在文件的权限字符串中,Setgid位用S表示(如果其他执行位为-)或s(如果其他执行位为x)。

data文件夹对user3无创建目录权限,mkdir添加sgid后user3创建文件夹属组为root

[root@temp data]# chmod g+s /usr/bin/mkdir 
[root@temp data]# ll -d /data/
drwxrwxr-x. 3 root root 20 Oct 19 19:51 /data/
[user3@temp data]$ ls -dl 1
drwxrwxr-x. 2 user3 root 6 Oct 19 20:17 1
应用场景:

如果有一个项目小组,共同开发一个应用,项目小组成员之间互相协同
/video
存放所有的开发程序代码,我们希望小组成员之间可以互相读取甚至修改
/video root it  775
user2---it
user3---it
user2用户在/video目录中创建的文件或者目录,拥有人是user2,拥有组user2,664,此时user3用户可以修改user2创建的文件

3. Sticky Bit(粘滞位)

  • 作用:通常用于目录

  • 如果在一个目录上应用sticky权限,则任何在该目录中创建的文件或文件夹,仅root和创建者可以删除

  • 用法:常用于/tmp目录,以防止用户删除其他用户的文件。

  • 设置方式

    chmod +t directoryname
    
  • 表示:在目录的权限字符串中,Sticky Bit用t表示(如果其他执行位为-)或T(如果其他执行位为x)。

  • Sticky Bit 示例

    chmod +t /tmp
    
    
    [root@temp data]# chmod o+t /data/
    [root@temp data]# ll -d /data/
    drwxrwxrwt. 2 root root 6 Oct 19 20:23 /data/
    [user2@temp ~]$ cd /data/
    [user2@temp data]$ mkdir 1
    [user2@temp data]$ ls
    1
    [user2@temp data]$ su - user3
    Password: 
    Last login: Sat Oct 19 20:17:43 CST 2024 on pts/0
    [user3@temp ~]$ cd /data/
    [user3@temp data]$ rm -rf 1
    rm: cannot remove '1': Operation not permitted
    
    
    

查看特殊权限

可以使用ls -l命令查看文件或目录的权限。特殊权限会在权限字符串中显示:

-rwsr-xr-x  1 user group size date filename  # Setuid
-rwxr-sr-x  1 user group size date filename  # Setgid
drwxrwxrwt  2 user group size date directoryname  # Sticky Bit

ACL(访问控制列表)

提供了一种更灵活的方式来管理文件和目录的权限

1. 查看ACL

使用getfacl命令可以查看文件或目录的ACL:

getfacl filename

2. 设置ACL

使用setfacl命令来设置或修改ACL:

  • 添加权限

    setfacl -m u:username:rwx filename  # 为特定用户添加权限
    setfacl -m g:groupname:rx filename   # 为特定组添加权限
    
    [root@temp ~]# ll -d /data/
    drwxr-xr-x. 2 root root 6 Oct 19 20:45 /data/
    如果只想让user2对data目录有写权限怎么实现
    setfacl -m u:user2:rwx /data/ 
    [root@temp ~]# ls -ld /data/
    drwxrwxr-x+ 2 root root 6 Oct 19 20:45 /data/
    [root@temp ~]# getfacl /data/
    getfacl: Removing leading '/' from absolute path names
    # file: data/
    # owner: root
    # group: root
    user::rwx
    user:user2:rwx
    group::r-x
    mask::rwx
    other::r-x
    
    权限说明
    user::rwx:所有者(root)具有读、写和执行权限。
    user:user2
    :用户user2具有读、写和执行权限。
    group::r-x:组(root)成员具有读和执行权限,但没有写权限。
    mask::rwx:当前权限的最大掩码,影响组和其他用户的权限。
    other::r-x:其他用户具有读和执行权限,但没有写权限。
    
    mask怎么理解:
    组的权限是r-x(读和执行)。
    mask::rwx 允许读、写和执行。
    在这种情况下,虽然掩码是rwx,但由于组权限是r-x,因此组成员实际只能读取和执行,无法写入。
    作用
    掩码确保了权限的一致性和安全性,防止意外的权限提升。如果需要更改掩码,可以使用setfacl -m m:<permissions>命令来调整。这样可以更好地控制不同用户和组的访问权限。
    
  • 设置默认权限

    setfacl -m d:u:username:rwx directoryname  # 设置目录的默认ACL
    

4. 删除ACL

使用setfacl命令删除ACL条目:

setfacl -x u:username filename  # 删除用户的ACL

5. 还原默认ACL

如果想要删除某个文件或目录上的所有ACL条目,并恢复到默认权限,可以使用以下命令:

setfacl -b directoryname


[root@temp ~]# setfacl -b /data/
[root@temp ~]# getfacl /data/
getfacl: Removing leading '/' from absolute path names
# file: data/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

权限优先级顺序:文件拥有人>用户ACL >文件拥有组>组ACL>其他人

sudo提权

基本用法

sudo <command>

输入密码: 在首次使用sudo时,系统会提示你输入当前用户的密码。输入密码后,sudo会在一段时间内缓存你的权限,避免重复输入。

配置 sudo

  1. 编辑 sudoers 文件: 使用visudo命令安全地编辑sudoers文件:

    [root@web01 ~]# vim /etc/sudoers
    
  2. 授予用户权限: 在sudoers文件中,你可以添加如下行以授予特定用户权限:

    User_Alias USERS = user2,user3  设置用户组
    Cmnd_Alias USERMANAGER = /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/passwd  设置权限组
    
    USERS ALL=(ALL) USERMANAGER 
    
    或者
    username ALL=(ALL) ALL
    
  3. 无密码执行: 如果希望特定用户在使用sudo时不需要输入密码,可以添加:

    username ALL=(ALL) NOPASSWD: ALL
    

chattr隐藏权限

1 使用 chattr 设置文件属性

chattr 是一个更高级的工具,用于设置文件的属性。在某些情况下,你可以使用它来保护文件不被修改或删除。

例如,要使文件不可删除:

chattr +i filename

可以使用 lsattr 命令查看文件的属性

文件属性

  • i:不可更改(immutable)。文件不能被修改、删除或重命名。

  • a:附加(append)。只能在文件末尾追加内容,不能修改已存在的内容。

  • e:可扩展(extent)。启用扩展属性,适用于某些文件系统。

  • j:日记(journaled)。为文件启用日志记录。

  • s:安全删除(secure deletion)。文件被删除时,其内容将被安全删除。

  • u:无效删除(undeletable)。文件被删除后,可以恢复其内容。

    常用参数

    1. +:添加属性。
    2. -:删除属性。
    3. =:设置属性。

这会将文件标记为不可变。要删除这个属性,可以使用:

chattr -i filename

文本处理

重定向

stdin: standard input 标准输入,默认是键盘
stdout: standard output 标准输出,正确输出,默认是终端 >
stderr: standard error: 标准错误输出,默认是终端

输出重定向

[user2@web01 ~]$ find /etc/ -name passwd > find.out  
[tom@wsa tmp]$ find /etc/ -name passwd > find.out  
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
这条命令只会将正确输出写入文件

输入重定向

重定向标准输入(<): 从文件中读取输入,而不是从终端。
[tom@wsa tmp]$ ls < /data
date.txt            ks-script-ryx_isj3                                                       vmware-root_1005-4290625330
find.out            systemd-private-a0664fe5e9cd455a9b9dab43a99d8b96-chronyd.service-vjpihh  vmware-root_1036-2990547702
ks-script-_r6q9g1_  vmware-root_1003-4290756405                                              vmware-root_1046-2999657322

错误重定向

  1. 重定向标准错误输出2>): 将错误消息输出到文件。

    command 2> error.txt
    
  2. 将标准输出和标准错误输出同时重定向

    command > output.txt 2>&1
    

    或使用:

    command &> output.txt
    

追加内容

echo "要追加的内容" >> 目标文件名

将多次输入的结果一次输出

at > /etc/yum.repos.d/dvd.repo <<END
[dvd]
echo name=centos8 >> 
baseurl=file:///media/BaseOS
gpgcheck=0
[AppStream]
name=centos8
baseurl=file:///media/AppStream
gpgcheck=0
END

vim

模式

  • 普通模式:打开文件后默认模式
  • 插入模式:按 i 进入插入模式,按 Esc 返回普通模式
  • 命令模式:在普通模式下输入 : 进入

常用命令

  • 移动光标
    • h
    • j
    • k
    • l
  • 删除
    • x 删除光标所在字符
    • dd 删除整行
  • 复制与粘贴
    • yy 复制当前行
    • p 粘贴到光标后

查找与替换

  • 查找/关键词,按 n 查找下一个

  • 替换:s/旧/新/g(在当前行替换),: %s/旧/新/g(在整个文件替换)

  • 忽略大小写
    :set ignorecase
    
    要取消 Vim 中的搜索高亮
    :noh
    

文本提取工具

grep

常用参数已加粗

-A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。

例如,如果你有一个文件 file.txt,其中包含多行文本,你想找到包含 "error" 的行及其后两行,可以使用以下命令:

grep -A 2 "error" file.txt

-B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。

grep -B 2 "pattern" file.txt

-C<显示行数>:显示匹配行及其前后各几行。

-c:统计匹配的行数

-e :允许多个匹配模式。

grep -e "pattern1" -e "pattern2" file.txt

-E:扩展的正则表达式

grep -E "pat(tern1|tern2)" file.txt

-f FILE:从文件中获取匹配模式。

grep -f patterns.txt  file.txt

grep -f FILE 选项允许你从指定的文件中读取多个匹配模式。这个文件应该包含每个模式占一行的文本。例如,假设你有一个名为 patterns.txt 的文件,里面有以下内容:

error
warning
info
你可以使用以下命令来查找 file.txt 中所有包含这些模式的行:


grep -f patterns.txt file.txt
这样,grep 将会查找 file.txt 中的所有行,找出包含 "error"、"warning" 或 "info" 的行并显示出来。

-F:固定字符串匹配,相当于 fgrep

bash


复制代码
grep -F "fixed_string" file.txt

-i:忽略大小写。

bash


复制代码
grep -i "pattern" file.txt

-n:显示匹配行的行号。

grep -n "pattern" file.txt

-o:仅显示匹配到的字符串。

grep -o "pattern" file.txt

-q:静默模式,不输出任何信息。

grep -q "pattern" file.txt

-s:不显示错误信息。

grep -s "pattern" file.txt

-v:显示不匹配的行。

grep -v "pattern" file.txt

-w:匹配整个单词。

grep -w "word" file.txt

正则表达式

(1)格式

  • . 匹配任意单个字符,不能匹配空行
  • [] 匹配指定范围内的任意单个字符
  • [^] 取反
  • [:alnum:] 或 [0-9a-zA-Z]
  • [:alpha:] 或 [a-zA-Z]
  • [:upper:] 或 [A-Z]
  • [:lower:] 或 [a-z]

(2)格式

  • ***** 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
  • .* 任意长度的任意字符,不包括0次
  • ? 匹配其前面的字符0 或 1次
  • + 匹配其前面的字符至少1次
  • {n} 匹配前面的字符n次
  • {m,n} 匹配前面的字符至少m 次,至多n次
  • {,n} 匹配前面的字符至多n次
  • {n,} 匹配前面的字符至少n次

sed

sed [options]  '[地址定界] command'   file(s)

options
 -n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
 -e:多点编辑,对每行处理时,可以有多个Script
 -f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
 -r:支持扩展的正则表达式
 -i:直接将处理的结果写入文件
 -i.bak:在将处理的结果写入文件之前备份一份
 
command 
  s///:查找替换,支持使用其它分隔符,如:s@@@,s###;
  a:在指定行后面追加文本,支持使用\n实现多行追加
  p:打印当前模式空间内容,追加到默认输出之后
  d:删除模式空间匹配的行,并立即启用下一轮循环
  =:为模式空间中的行打印行号
 
 地址定界 
 不给地址:对全文进行处理
 单地址:
 #: 指定的行
 /pattern/:被此处模式所能够匹配到的每一行
 地址范围:
 #,#
 #,+#
 /pat1/,/pat2/
 #,/pat1/
 ~:步进
  sed -n '1~2p'  只打印奇数行 (1~2 从第1行,一次加2行)
  sed -n '2~2p'  只打印偶数行  
options

[root@along ~]``# cat demo
aaa
bbbb
AABBCCDD
[root@along ~]``# sed "/aaa/p" demo #匹配到的行会打印一遍,不匹配的行也会打印
aaa
aaa
bbbb
AABBCCDD
[root@along ~]``# sed -n "/aaa/p" demo #-n不显示没匹配的行
aaa
[root@along ~]``# sed -e "s/a/A/" -e "s/b/B/" demo #-e多点编辑
Aaa
Bbbb
AABBCCDD
[root@along ~]``# cat sedscript.txt
s``/A/a/g
[root@along ~]``# sed -f sedscript.txt demo #-f使用文件处理
aaa
bbbb
aaBBCCDD
[root@along ~]``# sed -i.bak "s/a/A/g" demo #-i直接对文件进行处理
[root@along ~]``# cat demo
AAA
bbbb
AABBCCDD
[root@along ~]``# cat demo.bak
aaa
bbbb
AABBCCDD
command

[root@along ~]``# cat demo
aaa
bbbb
AABBCCDD
[root@along ~]``# sed "2d" demo #删除第2行
aaa
AABBCCDD
[root@along ~]``# sed -n "2p" demo #打印第2行
bbbb
[root@along ~]``# sed "2a123" demo #在第2行后加123
aaa
bbbb
123
AABBCCDD
[root@along ~]``# sed "1i123" demo #在第1行前加123
123
aaa
bbbb
AABBCCDD
[root@along ~]``# sed "3c123\n456" demo #替换第3行内容 /n换行
aaa
bbbb
123
456
[root@along ~]``# sed -n "3w/root/demo3" demo #保存第3行的内容到demo3文件中
[root@along ~]``# cat demo3
AABBCCDD
[root@along ~]``# sed "1r/root/demo3" demo #读取demo3的内容到第1行后
aaa
AABBCCDD
bbbb
AABBCCDD
[root@along ~]``# sed -n "=" demo #=打印行号   =:为模式空间中的行打印行号
1
2
3
[root@along ~]``# sed -n '2!p' demo #打印除了第2行的内容
aaa
AABBCCDD
[root@along ~]``# sed 's/[a-z]/\U&/g' 文件名
s:表示替换操作。
[a-z]:匹配所有小写字母。
\U&:将匹配到的小写字母转换为大写。
g:表示全局替换,即替换文件中所有匹配的小写字母。
地址界定演示
[root@along ~]# cat demo
aaa
bbbb
AABBCCDD
[root@along ~]# sed -n "p" demo  #不指定行,打印全文
aaa
bbbb
AABBCCDD
[root@along ~]# sed "2s/b/B/g" demo  #替换第2行的b->B
aaa
BBBB
AABBCCDD
[root@along ~]# sed -n "/aaa/p" demo  它会查找包含 aaa 的行,并打印这些行。
aaa
[root@along ~]# sed -n "1,2p" demo  #打印1-2行
aaa
bbbb
[root@along ~]# sed -n "/aaa/,/DD/p" demo    从匹配到 aaa 的行开始,到匹配到 DD 的行结束
aaa
bbbb
AABBCCDD
[root@along ~]# sed -n "2,/DD/p" demo   你将会从第 2 行开始打印,直到遇到包含 DD 的行
bbbb
AABBCCDD
[root@along ~]# sed "1~2s/[aA]/E/g" demo  #将奇数行的a或A替换为E
EEE
bbbb
EEBBCCDD

awk

awk '条件 {动作}' 文件名

打印特定列

打印文件中的第二列:

awk '{print $2}' filename.txt

基于条件过滤行

打印所有第一列值大于100的行:

awk '$1 > 100' filename.txt

计算总和

计算第二列的总和:

awk '{sum += $2} END {print sum}' filename.txt    END 将前面的结果放到后面执行

使用分隔符

如果文件使用逗号作为分隔符,指定分隔符:

awk -F, '{print $1, $3}' filename.csv

行号

打印每行的行号和内容:

awk '{print NR, $0}' filename.txt

打印第三行第三列

awk 'NR == 3 {print $3}' filename.txt

1. FS(输入字段分隔符)

FS 用于定义输入字段的分隔符,默认是空白字符。可以根据需要设置为其他字符,比如逗号、冒号等。

示例

awk -F, '{print $1, $2}' filename.csv

2. OFS(输出字段分隔符)

OFS 用于定义输出字段的分隔符,默认为空白字符。

示例

awk 'BEGIN {OFS = ":"} {print $1, $2}' filename.txt   BEGIN 块用于在处理数据之前执行初始化或准备工作

3. RS(输入记录分隔符)

RS 定义输入记录的分隔符,默认是换行符。可以设为其他字符,如两个换行符,表示每两行作为一条记录。

示例

awk 'BEGIN {RS = "\n\n"} {print $0}' filename.txt

4. ORS(输出记录分隔符)

ORS 用于定义输出记录的分隔符,默认是换行符。

示例

awk 'BEGIN {ORS = " | "} {print $0}' filename.txt

5. NF(字段数量)

NF 是当前记录中字段的数量。可以用来获取记录中的字段数。

示例

awk '{print NF}' filename.txt  # 打印每行的字段数量  

6. NR(行号)

NR 是当前行号,当处理多个文件时,行号会继续递增。

示例

awk '{print NR, $0}' file1.txt file2.txt  # 打印行号和内容    $0 代表当前记录的整行内容。它可以用来输出整行文本

cut

基本语法

cut [选项] [文件]

常用选项

  1. -f:指定要提取的字段,默认字段分隔符是制表符。

    cut -f 1,3 filename.txt  # 提取第1和第3个字段
    
  2. -d:指定字段分隔符,默认是制表符。

    cut -d ',' -f 1,2 filename.csv  # 使用逗号作为分隔符,提取第1和第2个字段
    
  3. -c:按字符位置提取字符。

    cut -c 1-5 filename.txt  # 提取每行的前5个字符
    
  4. -s:只输出包含分隔符的行。

    cut -d ',' -f 1 -s filename.csv  # 只输出包含逗号的行的第1个字段
    
  5. --complement:提取指定字段以外的所有字段。

    cut -f 1 --complement filename.txt  # 提取除第1个字段外的所有字段
    
sort -u 删除文本中的重复行

uniq   删除文本中相邻的重复行

排序 sort

标签:文件,temp,user1,data,基础,linux,txt,root
From: https://www.cnblogs.com/cloudwangsa/p/18563738

相关文章

  • 配置linux为存储
    配置linux为存储为存储准备15G裸设备[root@server1~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00100G0disk├─sda18:101G0part/boot└─sda28:2099G0part├─cl-root253:0063......
  • linux启动流程
    Linux启动流程笔记系统目录结构/boot目录内容[root@web01boot]#lsconfig-4.18.0-305.3.1.el8.x86_64initramfs-4.18.0-305.3.1.el8.x86_64kdump.imgefiloadergrub2......
  • 【Linux】-学习笔记05
    第一章、系统延迟任务与定时任务1.延迟任务在系统中我们的维护工作大多数时在服务器行对闲置时进行我们需要用延迟任务来解决自动进行的一次性的维护延迟任务时一次性的,不会重复执行当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者在RHEL9中默认系统中......
  • 按键 芯片型号clps711x linux 驱动程序
    /*CirrusLogicCLPS711XKeypaddriverThisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseaspublishedbytheFreeSoftwareFoundation;eitherversion2oftheLicense,or(atyouroptio......
  • 超强的渗透测试常用软件和命令分享(含代理扫描爬虫注入等),网络安全零基础入门到精通教程
    文章目录漏洞扫描xray设计理念简易架构来源处理漏洞检测结果输出代理模式生成ca证书安装ca证书启动代理配置代理开始扫描爬虫模式启动爬虫基础爬虫高级爬虫登录后的网站扫描服务扫描HTTP配置漏洞扫描用的代理多代理配置限制发包速度软件获取xrayRad正版授权Acuneti......
  • Linux: network: tcp: TCP: request_sock_TCP: Possible SYN flooding on port 3868.
    https://blog.csdn.net/qq_36428903/article/details/120923977这个情况也是和上面的情况一样。假如有两个VM(A和B)是互为备份,上面的IP地址是浮动的,假如其中一个VMA出现CPU的使用率太高,导致网络包堆积在网卡/驱动层。此时高可靠性导致浮动IP切换到另一端VMB,同时VM-ACPU使......
  • YOLO系列基础(九)YOLOv2论文及原理详解(上)
    to公司数据合规同事,本文为在家编写博客后采用定时发送机制发送的博文,没有用到任何公司信息和公司代码系列文章地址YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客YOLO系列基础(三)从ResNet残差网络到C3......
  • 2024-2025-1 20241401 《计算机基础与程序设计》 第九周学习总结
    班级链接2024计算机基础与程序设计作业要求第九周作业作业目标①操作系统责任②内存与进程管理③分时系统④CPU调度⑤文件、文件系统⑥文件保护⑦磁盘调度教材学习内容总结《计算机科学概论》第10、11章第10章操作系统定义:操作系统(OS)是具有操作硬件......
  • 书生大模型实训营第4期基础岛第五关:XTuner 微调个人小助手认知
    书生大模型实训营第4期基础岛第五关:XTuner微调个人小助手认知1.环境配置与数据准备1.1创建conda环境1.2安装Xtuner2.修改提供的数据2.1创建新文件夹用于存储微调数据2.1创建修改脚本3.模型训练3.1复制模型3.2修改Config文件3.3使用Xtuner进行模型微......
  • 人工智能之深度学习基础——神经网络
    神经网络概述神经网络(NeuralNetwork)是人工智能和深度学习的核心技术之一,其灵感来源于生物神经系统。它通过模拟人脑神经元之间的连接,解决复杂的任务,如分类、回归、生成、优化等。 1.神经网络的基本结构1.1神经元(Neuron)神经网络的基本单元类似于生物神经元。数学模型:......