首页 > 系统相关 >linux基础

linux基础

时间:2024-10-26 11:58:08浏览次数: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/18503885

相关文章

  • 零基础小白如何入门大模型?(附学习路线)
    大模型赛道有前景吗?这个问题,是个热门话题,但不是个好问题。因为,它基于不同的提问人、提问意图,会有不同的答案。前排提示,文末有大模型AGI-CSDN独家资料包哦!对于一个职业发展初期的新人,提问的意图可能是:我要不要转行去大模型赛道,从而可以获得更快的职业发展?让我三年内直达......
  • vscode远程连接linux服务器
    要在远程服务器上使用VisualStudioCode(VSCode)的图形界面,可以通过以下几种方法实现。最常见的方法是使用VSCode的RemoteDevelopment插件,这样你可以在本地机器上使用VSCode连接并编辑远程服务器上的文件。方法一:使用VSCodeRemote-SSH插件1.安装Remote......
  • 【如何安装linux系统】【为什么我要用vmware虚拟机呢?】【阿里云镜像】
    如何安装linux系统为什么我要用vmware虚拟机呢?阿里云镜像(下载镜像)(安装虚拟机)http://mirrors.aliyun.com/......
  • Redis的基础命令
    一、数据库操作命令1.redis中库的说明redis中的库默认存在16个库,分别按照0-15来排列选择库的命令:select0-15例如:select1就是选择一号库的意思2.清空表的命令1.清除当前表:flushdb2.清除所有表:flushall3.redis中客户端显示中文./redis-cli-p7000--raw二、操作key相......
  • 【MySQL基础】数据库与表的基本操作:从创建到管理
    文章目录写在前面:1、数据库的创建和管理1.创建数据库:CREATEDATABASE注意事项:2.查看已有数据库:SHOWDATABASES3.删除数据库:DROPDATABASE防止误删4.总结2、表的创建与管理1.创建数据表:CREATETABLE2.查看表结构:DESCRIBE表名3.删除数据表:DROPTABLE4.修改表结......
  • LINUX服务器磁盘空间扩容方案
    1、关闭服务器,插入硬盘,开机2、开机后,注意引导界面,按F1键进入BIOS进行设置3、进入BIOS后,选择systemsetting--storage,进入磁盘阵列配置4、选择MainMenu--configurationManagement5、进入configurationManagement界面,选择“Create…”选项,这就是要创建虚盘来配置RAID进入“Crea......
  • 鸿蒙基础篇-组件
    “在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。”各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙基础篇-组件首先在鸿蒙开发中,组件(Comp......
  • Linux下搭建mysql5.7数据库
    Linux下搭建mysql数据库参考网址:https://www.cnblogs.com/dengshihuang/p/8029092.html系统约定系统版本:Centos7.3 Mysql版本:5.7安装文件下载目录:/data/softwareMysql安装目录:/opt/app/mysql数据库保存位置:/opt/app/mysql/data/mysql日志保存位置:/opt/app/mysql/data/mysql/log/my......
  • Lua语法基础教程(下篇)
    今天我们继续学习Lua语法基础教程,下篇。九、函数9.1初识函数函数是指一段在一起的、可以做某一件事儿的程序,也叫做子程序。在前面的内容中,我们已经接触过了函数的调用,这个函数就是前面用到了很多次的print(...)。调用函数只需要按下面的格式即可:函数名(参数1,参数2,参数3,.......
  • 架构设计(17)大数据框架Hadoop与基础架构CDH
    HadoopHadoop是一个开源的大数据处理框架,由Apache软件基金会开发。它主要用于存储和处理大规模数据集,能够在分布式计算环境中有效工作。以下是Hadoop的详细介绍,包括其核心组件、架构、特性和应用场景。1.Hadoop的架构Hadoop的架构分为两个主要部分:Hadoop分布式文件系......