admin管理员组

文章数量:1532381

目录

已迁移

文章目录

  • 目录
  • linux
    • deepin 图形化异常
    • liveCD
    • 重置密码
    • linux基本
      • 目录结构
      • 新建主机
        • ifconfig
        • 改时区
        • 设置网卡
        • yum源
        • 安装vim
        • 防火墙和selinux
        • 计划任务
        • 开机启动项
        • 图形化界面图标设置
        • 快捷方式示例
        • 设置默认程序
        • 设置系统服务
        • 环境变量
        • ssh配置
        • hostname主机名
        • 用户管理
        • 文件权限
        • 文件访问控制列表 facl
        • visudo
      • 磁盘挂载
      • 新硬盘操作
      • shell bash 快捷键
      • 系统查询
        • curl ip.sb
        • diff
        • df
        • du
        • file命令
        • find
        • free
        • netstat
        • ps 命令
        • pstree
        • stat
        • top
        • uname
        • uptime
        • who
        • watch
      • 系统操作
        • cp 命令
          • scp命令
        • curl
        • dd命令
        • echo 命令
        • grub 命令
        • kill 命令
        • mdadm 命令
        • mv 命令
        • rm 命令
        • rsync
        • shutdown
        • split 命令
        • tar 命令
      • linux编辑三剑客
        • grep
        • awk 类似命令还有cut
        • [sed]
      • xargs 传参数
      • 其他一些基础命令
    • linux扩展
      • 额外包管理系统
        • DNF(适用于fedora系,替代yum)
      • 网络共享
        • samba
        • ftp
        • nfs
      • docker
        • docker 安装seafile
        • docker 安装nextcloud
      • nat123
        • centos7安装nat123
        • locate
      • tree
      • lamp/lnmp
        • apache
        • nginx
        • mysql
        • php

linux

deepin 图形化异常

重启任务栏 pkill -9 dde-dock
/usr/bin/dde-dock
重装图形化界面apt-get install --reinstall dde-meta-zh-hans
重启图形化界面restart lightdm

liveCD

进入liveCD后终端执行
全加sudo或者进root
fdisk -l 
    查找系统盘,靠大小和磁盘分区格式推断boot目录和根目录所在盘
mount /dev/sda1 /mnt
    挂载系统盘(如果修复grub则挂载boot盘)
    如果是只读,执行
mount -o remount,rw /mnt

1.引导修复
grub-install --directory=/mnt/dev/sda
    安装grub2
update-grub2
    更新grub
!!!!!!!!!!!!!!    
2.root重置密码
如果要修改root密码,执行
chroot /mnt     
    用来切换根目录,切换到目标系统的根目录
passwd root 
    即可更改目标系统的root密码

重置密码

除了上面的liveCD外,系统本身启动引导的时候,在当前系统名称上按e,进入编辑模式(有些系统会进入二级菜单,其中有一项是kernal菜单,对它按e后进入编辑模式),找到倒数第二行(大部分系统都是),内容大概是 linux /boot/vmlinuzxxxxxxx root=xxxxxxxx ro xxxx或者 linux16 /vmlinuxxxxxx root=xxxxxxx ro xxxx
把这一行的 ro(ro single) 删除后改为 rw single init=/bin/bash
按 f10 或者ctrl+x(有些系统按b,仔细看窗口最下面说明)保存后会自动引导进入单用户模式。
进入后可以重置密码,passwd
重置完后执行
exec /sbin/init进入正常系统或者
exec /sbin/reboot 重启进正常系统

linux基本

返回目录

目录结构

bin(binaries)存放二进制可执行文件
sbin(super user binaries)存放root权限的二进制可执行文件  
boot 系统引导
dev(device)设备文件,即硬件 
etc(etcetera)系统配置文件,改配置八成都在这里改
home 存放用户文件和用户家目录
lib(library)存放跟文件系统中程序所需要的共享库以及内核模块,类似于win中的dll文件
mnt(mount)临时挂载点
media(自动mnt?)自动挂载目录,linux会自动挂载一些类似u盘,光盘等设备,会在此文件夹下的对应用户名文件内
opt(option)自己安装的软件系统推荐安装在这里,但不强制要求必须安装在这里,如果你喜欢,你安到/etc下都没问题
proc(process)正在运行的程序的状态信息(里面都是进程号)
root 存放root用户文件和家目录
run    自上一次系统启动以来启动的进程运行数据。包括进程id文件和锁定文件等。此目录重启后重置。(此目录整合了旧版本redhat/var/run和/var/lock)
srv(service)存放服务数据,桌面linux此文件夹为空,作为服务器时,此文件夹可存放web资源,ftp资源等
sys()同run文件类似
tmp(temporary)临时文件
usr(unix shared resources)共享系统资源,大概就是后安的一些软件在这里(桌面版linux的安装程序的启动图标一般就在/usr/share/applications内)
var(variable)主要用来存储系统日志

新建主机

ifconfig

ifconfig 可用ip addr代替

yum install net-tools
ether 后面是mac地址
rx 是收包
tx 是发包
改时区

返回目录

date -R查时区,北京时间为+800东八区
cp -l /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

hwclock -r 查看当前硬件时间
hwclock -w 写入系统时间到bios
hwclock -s 把bios时间写入系统

apt install ntp
apt install ntpdate
ntpdate -u time.nist.gov
ntpdate -u time-b.nist.gov
    同步时间
hwclock -w 写入硬件
如果ntpdate报错,可以尝试rdate
yum install rdate
rdate -s time.nist.gov
rdate -s time-b.nist.gov
设置网卡

返回目录

想省事用nmtui


/etc/sysconfig/network-scripts/ifcfg-xxxx
    DEVICE=eth0
        设置的是哪张网卡
	设置netmask=掩码
	   或者设置prefix=24掩码
	设置ipaddr0=ip
	    ipaddr1=ip
	设置gateway=网关
	设置bootproto=static
	    固定ip
	设置onboot=yes
	    开机启动网卡
	设置DNS1=223.5.5.5
	设置DNS2=223.6.6.6
	UUID最好不要设置,直接注释掉。
	
(未测试)创建ADSL连接
rpm -qa |grep rp-pppoe
rpm -ivh rp-pppoe* 
route del default(删除默认路由)
adsl-setup (设置连接)
adsl-start (连接测试)
adsl-status (查看状态)
yum源

返回目录
wget 可用curl -o代替(最小化安装好像没有wget)

$cd /etc/yum.repos.d/
$mkdir /etc/yum.repos.d/bak ; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
$wget http://mirrors.aliyun/repo/Centos-7.repo
$mv Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
$yum install epel-release
$wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun/repo/epel-7.repo

安装vim
$yum install vim
/etc/vim/vimrc
设置vim参数
set paste
"关闭换行自动缩进等多种设置
set nu
"设置行号
set ts=4
"直接按tab缩进4个空格
set expandtab
"所有tab用空格表示
set encoding=utf-8
"设置编码方式utf8
filetype on
"自动识别文件类型
syntax on
"语法高亮

set autoindent
"自动缩进
set shiftwidth=4
"配合set autoindent的设置,编程文件下级缩进时长度;例如
if a>5:回车后缩进的长度
防火墙和selinux

返回目录

千万别图省事,直接删除防火墙,有些系统删除防火墙会顺带删除你的网卡
$systemctl disable firewalld
	关防火墙
/etc/selinux/config
	SELINUX=disabled (默认enforcing)
$setenforce 0
$getenforce  
	关闭并查看selinux
计划任务
yum install at
at命令  
at <日期> 回车进入at  
保存ctrl+d退出  
at -l 查看计划任务列表  
atrm <任务编号> 取消任务  
at -d = atrm
-m:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-M:不发送邮件
-l:atq的别名
-d:atrm的别名
-r:atrm的别名
-v:显示任务将被执行的时间,显示的时间格式为:Thu Feb 20 14:50:00 1997
-c:打印任务的内容到标准输出
-V:显示版本信息
-q:后面加<队列> 使用指定的队列
-f:后面加<文件> 从指定文件读入任务而不是从标准输入读入
-t:后面<时间参数> 以时间参数的形式提交要运行的任务

/usr/share/doc/at-xx.xx.xx/timespec 	时间格式定义
/var/spool/at/ 	存放at任务的文件夹
/etc/at.allow 	允许用户列表
/etc/at.deny 	拒绝用户列表

举个栗子
符号和数字之间有无空格都可以,日期后面单复数都可以
 6:00+5day 和6:00 + 5 days 都对
 min hour month等同理
at 6:00 +5 day (+5日格式此时的+5日计算方式为当天日期+5)
at  4:00 2019-8-21  (年-月-日格式)
at 16:06 11/20/2019 (月/日/年格式)

开机启动项
/etc/rc.d/rc.loacl
	好多系统默认是不执行的,更改权限后生效,可用/etc/rc.loacl软连接设定开机启动项

    也可以用crontab里设置@reboot实现,但不同系统的@reboot执行机制不一样,需注意。
例如
@reboot /usr/bin/pkill -9 frpc;/usr/bin/sleep 3;/opt/frp/startfrpc.sh
5 4 * * * /usr/bin/pkill -9 frpc;/usr/bin/sleep 3;/opt/frp/startfrpc.sh
还有个神奇的/etc/inittab有待研究
图形化界面图标设置
参考
http://blog.chinaunix/uid-20332519-id-3015914.html

步骤
cd /usr/share/applications
vi [应用名].desktop
写入内容(注意每一行的末尾空格会认为是值的一部分)

注:参数含义请参考本文参考链接

[Desktop Entry]
	中括号里是固定格式
Name=应用程序名
	图标名称,必须有
Exec=执行应用程序可执行文件的命令
	最关键内容,必须有
Type=Application
	类型,一般都是Application,必须有
Terminal=false
	虽然你不需要终端,但是,必须有

########我是分割线#################

Encoding=UTF-8
	编码方式,可以不写
Comment=鼠标指向快捷方式时的提示内容
	提示内容,可以不写
Icon=图标路径
	图标,可以不写
StartupNotify=true
	我也不知道是干啥的,可以不写
Categories=Application;
	不知道干啥的,可以不写
保存,然后就能在菜单的所有程序分类下找到该应用程序了,可以直接用鼠标拉到左侧导航栏中

快捷方式示例
/usr/share/applications/test.desktop
	快捷方式文件夹
[Desktop Entry]
Type=Application
Name=Testlhc
Exec=/usr/bin/wpspdf 
Terminal=false
设置默认程序
通过这个可以设置图形界面双击某个文件时候的行为。
find /etc/ -name *.list
/etc/xdg/mimeapps.list 
	上面是centos7 默认程序路径,其他系统可以按照find方法查找路径,

我加入了一行
	text/markdown=typora.desktop
		实现了双击md文件用typora.desktop(它在/usr/share/applications/下)打开
设置系统服务
/usr/lib/systemd/system
创建一个.service结尾的文件
[Unit] 
Description : 描述 
Documentation :文档 
After= : 当这些服务启动后才启动本服务,target结尾
[Service] 
Type : 启动类型simple、forking、oneshot、notify、dbus
Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。 
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。 
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。 
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。 
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
PIDFile : pid文件路径 
ExecStartPre :启动前要做什么,上文中是测试配置文件 -t 
ExecStart:启动 
ExecReload:重载 
ExecStop:停止 
PrivateTmp:True表示给服务分配独立的临时空间
[Install] 
WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。
环境变量

返回目录

输入 env可查看当前用户环境变量
export可临时更改环境变量

~/.bash_profile>~/.bash_login>~/.profile
	用户登录时候执行一次,默认profile会调用bashrc
~/.bashrc(每次打开ssh窗口都执行一次)
	自己电脑可以直接设置/etc/profile和/etc/bash.bashrc(bashrc)
etc/profile 
	(尽量别动这个,动~/.profile)全局变量,可以用来修改**所有用户**的基础环境变量
	可在这里增加环境变量找到以下行
export PATH
	改为
	export PATH=/xxxx/xxxx:$PATH
etc/bash.bashrc(centos7是bashrc 初始化bash配置文件,这个可以动一动)
	export HISTTIMEFORMAT="%Y.%m.%d %T: "
		设置history
    alias vi=vim
    alias ll='ls -l'
    alias la='ls -A'
    alias grep=grep --color=auto
	PS1="\u@\h:\w" 默认的是
		\u 用户名
		\h \H hostname
		\w 绝对路径
		\W 相对路径 
		\t \T \@ 24/12/ampm时间格式
		\d 日期
		\s shell
		\v \V 版本号
		\n 换行
		\r 回车
		\\ 反斜杠
	
ssh配置

返回目录

/etc/ssh/ssh_config /etc/ssh/sshd_config
配置文件以#为注释,用vim打开会非常明显,vi打开的话眼神要求比较高

$ssh -p 5000 user@192.168.1.200
    user用户 ssh 访问192.168.1.200的5000端口
etc/ssh/sshd_config(注意还有个叫ssh_config的是客户端配置文件,通常我们更改的是服务端端口sshd_config,以方便远程连接)
    更改Port
    更改GSSAPIAuthertication no(通过减少验证xxx 让部分连接ssh慢的情况缓解)
    #PermitRootLogin yes (此项可以禁止root直接登录)
    #ClientAliveInterval 60 每隔60秒发送一次活动请求
    #ClientAliveCountMax 3(次没响应断开远程ssh连接)
客户端端口需要配置
/etc/ssh/ssh_config
    ServerAliveInterval 20
    发送活动请求信号,否则也会断开。
hostname主机名

返回目录

apt-get install openssh-server
临时
$hostname <新名字>
永久(重启后生效)
redhat /etc/sysconfig/network
debian /etc/hostname
注意:/etc/hosts 里127.0.0.1不是定义本机hostname的功能,不要轻易改动本条的“localhost”
用户管理

返回目录

useradd passwd

$useradd -g 组 -G 附加组 -d 指定家目录 username
之后用passwd设置密码即可使用
    例:useradd -g LHC -G temp01 -d /home/lhc lihaicheng 
        或者useradd lihaicheng 
        它的组名是lihaicheng 没有附加组 家目录默认就是 /home/lihaicheng/ 用户名是lihaicheng
$passwd username
$passwd -
    -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
    -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
    -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
    --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
    -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
    -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
    -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
    -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
文件权限
ls -l <filename>
一般权限-rwxr-xr-x(SGTrwxrwxrwx)
    第一位
    p表示命名管道文件
    d表示目录文件
    l表示符号连接文件
    -表示普通文件
    s表示socket文件
    c表示字符设备文件
    b表示块设备文件
    后面9位每三一组,rwx三种各一位,r代表读w代表写x代表执行
    进入文件夹的功能算执行权限
特殊权限 sst<4+2+1> 可以由u+s 或者4744控制
    由第一个数字控制例如
    chmod 7744 <filename> 等同于chmod 744额外增加一套sst
    rwsr-Sr-T有x权限就变成小写,没x变大写
    u里的s是让执行者临时拥有属主权限
    g里的s是让目录下的新文件属组变成目录的属组
    o里的t是不让其他用户删除,只能属主删除
    
隐藏权限
chattr +<argu> <filename>
A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份。
D:检查压缩文件中的错误。
e:属性表示该文件正在使用扩展区来映射磁盘上的块
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
j:当使用ext3文件系统格式时,设定j属性将使文件在写入时先记录在日志中,但是当filesystem设定参数为data=jour* nalled时,由于已经设定了日志,所以这个属性无效
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
t:文件系统支持尾部合并(tail-merging)。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
X:可以直接访问压缩文件的内容。


lsattr -<argu><filename>可以查看对应文件隐藏权限

文件访问控制列表 facl
当设置facl后,ls -l文件的属性栏rwx后会有一个+号,而且group里的rwx变为aclmask属性,而不是group的rwx属性
setfacl
    setfacl -Rm u:<user>:rwx /PATH
    设置单个用户对此文件的权限,不受普通文件属性的限制
    -R 递归,-m 更改
getfacl
    getfacl /PATH
    获取facl信息
    # file: test.txt
    # owner: root
    # group: admin
    user::rw-
        user权限
    user:john:rw-
        john用户单独acl
    group::rw-
        group权限
    group:dev:r--
        dev组的单独acl
    mask::rw- 
        掩码,前面的除了user都不能超过这个的限制
    other::r--
        other权限
chacl -B 删除acl信息
visudo

磁盘挂载

返回目录

fstab mount

/etc/fstab
    第一列是硬盘ID或者硬盘名(UUID用blkid命令查看或者ll /dev/disk/by-uuid/)
    第二列硬盘挂载点
    第三列文件系统类型
    第四列参数包括
        auto: 系统自动挂载,fstab默认就是这个选项
        defaults: rw, suid, dev, exec, auto, nouser, and async.
        noauto 开机不自动挂载
        nouser 只有超级用户可以挂载
        ro 按只读权限挂载
        rw 按可读可写权限挂载
        user 任何用户都可以挂载
        请注意光驱和软驱只有在装有介质时才可以进行挂载,因此它是noauto
    第五列dump备份选项 
        0不备份 1备份
    第六列挂载检查顺序 
        0不检查 1是根目录 正常检查从2开始
    特例
    一个目录挂载另一个目录
    /home/mnt1000/nextcloud /opt/docker none bind 0 0
    文件系统none 挂载参数bind 
$mount
    mount /dev/sda /mnt
        实现dev/sda的内容覆盖了目录/mnt
    挂载samba###  mount -t cifs //192.168.1.201/lhc /mnt -o    username=xxx,password=xxxx,port=12345,dir_mode=0777,file_mode=0777,rw
    	其中参数包括用户名,密码,服务端口,文件夹权限,文件权限,读写权限。 
/etc/fstab里设置
    //192.168.1.201/lhc /mnt cifs auto,username=username,password=xxxxx 0 0
        #需要安装cifs-utils,而且username和password后面的内容不能用引号
    覆盖挂载 mount --bind /目录1 /目录2 
        实现都访问目录1的目的,目录2被屏蔽了
        umount /目录2可以解除挂载
    umount 磁盘名或挂载点
        卸载磁盘

新硬盘操作

返回目录

fdisk parted

partprobe 更新分区表用
fdisk 只能创建mbr分区,且磁盘不大于2T
    $fdisk -l 
        列出所有硬盘信息
    $fdisk /dev/sdc
        进入fdisk操作界面
        m列出所有功能,基本都能看懂
        d删除分区
        n新建功能
        t转换分区类型,通常在linux新建分区后会指定为linux类型代码83,需要手动指定为hpfs/ntfs/exfat类型,代码为7
parted 可以创建gpt分区,理论上磁盘空间不限
    $parted /dev/sdc
        进入parted操作界面
        print list
            查看所有硬盘信息
        print 
            查看当前硬盘信息
        mklabel或者mktable
            创建一个磁盘分区表 gpt msdos
        mkpart 创建分区
            primary 主分区
            extended 扩展分区
            logical 逻辑分区
            例:
            mkpart primary xfs 0% 100% 是把这个磁盘格式化出一个主分区并格式化成xfs(从0-100全部空间)
            mkpart
            也可以不写参数,之后会有提示符输入分区类型,分区开始和分区结束
        mkfs 格式化分区(貌似在我的centos7上此条不好使,据说这玩意就支持到ext2,真丢脸)
            例:
            mkfs 1 ext2
        
        rm 删除分区
        
mkfs
    $mkfs.xfs /dev/sdc1 
        格式化sdc1为xfs格式
    $mkfs.vfat -F 32 /dev/sdc1 
        格式化成fat32
    $mkfs.ext4 -m 0.05 /dev/sdc1 
        格式化成ext4 inode数量为默认的5%这样做可以加快格式化速度(inode数量决定了这个分区文件数量上限,一般谁也会把整个文件用小于1k的东西填满)
    $mkfs.ntfs -f /dev/sdb1
        格式化成ntfs -f快速格式化,否则很慢
    

shell bash 快捷键

返回目录

网页连接


一般格式
    命令 选项 参数
大多数命令可以用--help 寻求简单帮助
    help中[]是可选内容
    括号后的...是可以有多个的意思
    竖线 | 表示他们之间只能存在其中一个
    <>表示变量数据例如文件名,时间数字等
exit和ctrl+D都能退出shell
tab可以补全文件名,两次tab可以列出文件名
history可以查看历史命令,!+数字 可以再次执行该命令 ,!+命令可以执行最近一个完整命令语句
ctrl a 回到开头
ctrl e 回到末尾
ctrl u 光标到头部内容删除
ctrl k 光标到尾部内容删除
ctrl 方向键 一次移动一个单词
ctrl r 搜索history中的该命令

系统查询

apt-get install curl

curl ip.sb

查询本公网ip

diff
查看两个文件的区别
diff -q 或者--brief 只显示两文件是否相同,不显示详细信息
diff -c 具体显示哪里不同(前三行)
diff -u 具体显示哪里不同(前三行)
df

df 显示文件系统中磁盘空间使用情况
df -h 人性化显示磁盘空间使用情况

du

返回目录
显示目标目录和其子目录已使用空间
du -s 显示目标文件总大小
du -h 人性化显示
通常用法为 du -sh *

file命令
file /PATH 查看文件类型
find

find / -name xxxx
    查找名字匹配的
find / -user xxx
    查找用户匹配的
find / -name xxxx -exec cp -rf {} /home/xxx \;
    查找出来
find / -mtime +30 -name "xxxx"
    查找超过30天之前的名字为xxx的文件
find / -mtime -10 -perm 700
    查找十天内更新的 权限为700的文件
find / -size +5M -a -type f
    查找大于5m 且文件类型为普通文件的
    其中-a是and -o是or -not是not
-print: find命令将匹配的文件输出到标准输出。 
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。 
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-name   按照文件名查找文件。
-perm   按照文件权限来查找文件。
-prune  使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user   按照文件属主来查找文件。
-group  按照文件所属的组来查找文件。
-mtime -n +n  按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup  查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser   查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2  查找更改时间比文件file1新但比文件file2旧的文件。
-type  查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:

-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
free

显示内存使用情况

netstat

查询网络连接状态
netstat -lantup
基本能显示所有需要的网路状态
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

ps 命令

ps -e 显示所有进程
ps -f 全格式显示
ps -a 显示所有用户的所有进程
ps -u 按用户名和使用时间排序显示
ps -x 无终端的进程也显示
通常用ps -ef 和ps -aux

pstree

树状结构显示进程间关系

stat
查看文件的状态
通常用来查看atime ctime mtime
其中
atime是访问时间
ctime是属性改变时间
mtime是内容改变时间
top

类似于任务管理器

uname

uname -a 查看操作系统信息

uptime

类似于win任务管理器里性能页面cpu负载

who

查看哪些用户登录了本系统
[lhc@old ~]$ who
lhc pts/0 2019-09-02 11:21 (210.74.107.191)
如果想踢掉一个用户lhc,执行,权限不够请切root
pkill -kill -t pts/0
或者
fuser -k /dev/pts/0

fuser安装 yum install psmisc

watch

例如
watch -n 1 -d netstat -ant
-n:指定指令执行的间隔时间(秒);
-d:高亮显示指令输出信息不同之处;
-t:不显示标题。

系统操作

cp 命令

返回目录

$cp -av /源文件 ...  /目标目录或文件名
    a带属性拷贝 v显示过程
$cp -l 复制快捷方式
    
scp命令

scp -P port path/filename user@hostname&ip:path/filename
scp -P port user@hostname&ip:path/filename path/filename
scp -prv相当于cp -av 因为不存在软硬连接问题,所以不需要-d参数
类似于cp,可以远程copy

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root
输入账号密码就可以了,类似于ssh远程连接
curl
curl -o path/文件名 url
把url对应文件保存到本地
curl -O url 大写的o是原文件名保存到本地
url可以是ftp http 等
curl -I -l
dd命令

https://wwwblogs/senior-engineer/p/6211247.html
返回目录

推荐固态硬盘bs=64k烧录系统最快,其他未测试
新开窗口root下输入watch -n 5 pkill -USR1 ^dd$
可以查看进度
   $dd if=/dev/hdb of=/dev/hdd 
        复制磁盘
   $dd if=/dev/hdb of=/root/image
        备份磁盘到镜像
   $dd if=/root/image of=/dev/hdb
        还原镜像到磁盘
   $dd if=/dev/hdb | gzip > /root/image.gz
        压缩备份磁盘镜像
   $gzip -dc /root/image.gz | dd of=/dev/hdb
        还原压缩镜像到磁盘
   $dd if=/dev/hda of=/root/image count=1 bs=512
        备份磁盘镜像为iso
   $dd if=/dev/cdrom(hdc) of=/root/cd.iso
        光盘提取到镜像
   $dd if=/dev/urandom of=/dev/hda1
        抹除磁盘信息
   $dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
        测试磁盘写速度
   $dd if=/root/1Gb.file bs=64k | dd of=/dev/null
        测试磁盘读速度
创建swap
    第一步:创建一个大小为256M的文件:
    #dd if=/dev/zero of=/swapfile bs=1024 count=262144
    第二步:把这个文件变成swap文件:
    #mkswap /swapfile
    第三步:启用这个swap文件:
    #swapon /swapfile
    第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
    /swapfile    swap    swap    default   0 0
echo 命令
echo xxx > txt
    正常写入
echo xxx &> txt
    是否正常都写入
echo xxx 2> txt
    错误才写入
echo xxx >> 追加写入(不清空文档)
echo <passwd> |passwd --stdin <user>
    直接设置用户密码,无需手动输入加确认密码
echo "正常输出"
echo '不转义输出'
echo `命令`
echo $(命令)    同上面的反引号通用
grub 命令

返回目录
修改/dev/sdb1下的/etc/fstab(用blkid查UUID)
$grub2-install /dev/sdb (假如挂载盘为sdb)
$grub-mkconfig
$update-grub

kill 命令

kill -9 强制杀死进程

mdadm 命令
新建raid磁盘组
mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
-C 新建
-v 显示详细信息
-n 几块盘
-l 什么raid级别(0,1,5,10等)

mkfs.xfs /dev/md0
    格式化
mount /dev/md0 /mnt
    挂载
在fstab中添加 /dev/md0 /mnt xfs defaults 0 0 
    开机自动挂载
cat /proc/mdstat
    查看是创建raid组成功
mdadm -D /dev/md0
    查看md0组的详细信息
mdadm -Q /dev/md0
    查看简略信息

mv 命令

返回目录

    没什么好说的 一般不带参数
    $mv 源文件 目标文件
rm 命令
    程序员从删库到跑路必备技能
    $rm -rf xxx
        -r 递归
        -f 强制执行
rsync
samba家的大工程,头大
shutdown

shutdown -r 重启
shutdown -h 关机
halt 等同于shutdown -h
reboot 等同于 shutdown -r

split 命令
    split -b 5m <filename>
        分割文件成5m一个(一般分的是日志文件)
    split -n 5 <filename>
        把文件平均分成5份
    split -l 5 <filename>
        每5行文字拆出一份文件
    split -n 5 <filename> -d
        不加-d默认用字母排序拆分出来的文件例如 xaa xab xac,加上-d用数字排序例如 x01 x02 x03
    split -n 5 <filename> -d -a 3 test
        -d 后接-a 是确定拆分出来的数字有几位(默认2,本例为3),三位则为x001 x002,数字后面接的是文件头(默认x,本例为test),本例中拆分出来的内容就会是 test001 test002 test003 ....
tar 命令

返回目录

    $tar -zcvpf linuxbak.gz / --exclude=linuxbak.gz --exclude=/proc --exclude=/lost+found --exclude=/tmp --exclude=/sys --exclude= /mnt  --exclude=/run
    $tar -xvpzf linuxbak.gz -C /
    $mkdir /proc
    $mkdir /tmp
    $mkdir /sys
    $mkdir /lost+found
    $mkdir /mnt
    $mkdir /run
    -c :建立一个压缩文件的参数指令(create 的意思);
    -x :解开一个压缩文件的参数指令!
    -t :查看 tarfile 里面的文件!
           注意:在参数中,c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。
    -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
    -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
    -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
    -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
    -p :使用原文件的原来属性(属性不会依据使用者而变)
    -P :(大写)可以使用绝对路径来压缩!
    -N :(大写)比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
    -u:更新压缩包内容。
    -C:(大写)目的目录,即切换到指定的目录
    --exclude FILE:在压缩的过程中,不要将 FILE 打包!

linux编辑三剑客

返回目录

grep awk sed

grep
    -i 忽略大小写 grep -i A可以搜索出带小写a的内容 否则不能
    -v 反选 grep -v test.txt 搜索出结果不包含test.txt的文件
    -n 行号grep -n 显示源数据行号
    -c 统计搜索内容的数量 grep -c 类似于 grep xxx |wc -l
    -w 按单词严格匹配,例 grep -w like 如果文本里有个liker则不会搜索出来
    -o 只显示搜索内容 不显示整行内容,感觉好蠢 ls -l |grep -o a.txt 结果就和ls |grep a.txt一样了  
    -A n 显示内容所在行和后面n行 grep -A 5 a.txt 就是结果后面再显示5行的意思
    -B n 显示内容所在行和前面n行 同上
    -C n 显示内容所在行和前后n行 同上
awk 类似命令还有cut

返回目录

https://wwwblogs/ggjucheng/archive/2013/01/13/2858470.html

    默认分隔符为空格和tab,所有参数命令都以'括起来 
    $0代表所有列,$1代表第一列 以此类推
    当有判断语句时,默认输出$0 例如$1>5 /root*/等内容
    {}内语句用';'分割,参数用','分割,通常来说只用一个print语句,不用分割.
    $ps -ef | awk '{print $1}'
        打印出ps -ef 里第一列 也就是进程名列
    $cat /etc/passwd |awk -F ':' '{print $2"and" $3}'
        指定分隔符为冒号:,也可以写成 -F:(F和:中间不加空格),并打印出第二列和第三列,中间插入字符串 and
    $cat /etc/passwd|awk -F: '/root/{print $1"\t"$2}'
        大括号外可以接一些判断语句等,//中的内容代表搜索,支持正则表达式搜索
    $cat /etc/passwd | awk -F: 'BEGIN {print "name,shell"}{print $1","$7} END{print"blue,/bin/nosh"}'
        BEGIN 和END参数 可以在列表首行和末行添加内容,理解为页眉页脚吧
    内置参数
        ARGC               命令行参数个数
        ARGV               命令行参数排列
        ENVIRON            支持队列中系统环境变量的使用
        FILENAME           awk浏览的文件名(当通过管道符来使用时此项为-)
        FNR                浏览文件的记录数
        FS                 设置输入域分隔符,等价于命令行 -F选项
        NF                 浏览记录的域的个数
        NR                 已读的记录数
        OFS                输出域分隔符
        ORS                输出记录分隔符
        RS                 控制记录分隔符
    $ls -l |awk 'BEGIN{count=0}{count++;print count,"-and-"$0}'
        在BEGIN中自定义一个变量,用++方法统计行数
    $ls -l |awk 'BEGIN{size=0}{size+=$5}END{print size/1024"KB"}'
        统计文件夹中文件总大小(此方法不统计文件夹内大小,只统计第一级目录下文件大小,文件夹按照一个块大小4096计算)
    
[sed]

返回目录

(https://wwwblogs/edwardlost/archive/2010/09/17/1829145.html)

    $ls -l |sed -n '/1.txt/p'
        -n 表示不打印输入行
        // 表示搜索
        p 表示打印结果
    $ls -l |sed '1,3d'
    $ls -l |sed '/1.txt/d'
    $ls -l |sed '$d'
        各种删除行,1-3行,包含1.txt行,最后一行
    $ls -l |sed '1,20s/^My/Your/gp'
    $ls -l |sed '1,5s*1.txt*0000*gp'
    $ls -l |sed '1,5sA1.txtA0000Agp'
        s/ 表示用Your替换My
        ^ 表示句首 $表示句尾
        /g 表示整句,如果不加则只替换一行中的第一个
        s/后面可以接各种符号当做分隔符,不包括回车和\ 可以是字母,数字,符号(为了统一,最好还是使用/)
    $ls -l |sed -e '1,3d' -e '1,5s/1.txt/0000/g'
        -e 可以执行多条sed语句,其中1,5s总是按照原文件的行号计算的
        第一个语句的结果会传影响第二条语句
    $ls -l |sed '/1.txt/r 2.txt'
        /r 表示读取2.txt 插入到1.txt行后,如果有多个结果每行后都插入一遍
    $ls -l |sed '/1.txt/w 2.txt'
        /w 把sed结果写入2.txt文件中 可以理解成命令-n 后接一个>2.txt
    $ls -l |sed '/1.txt/a\
    aaaaaa\
    bbbbbb' 
        a\ 在所选行后追加行,多行时用\结尾以输入下一行,最后一行用'结尾即可,如多选则都追加一
        i\ 同理,替换行和插入行
        c\ 与他们不同在于所选行如果是连续行则只算一行,例如1,5c则不会连续写入5遍,但是当使用/xx/筛选时不论是否连续都挨个替换
    $ls -l|sed 'y/4096/xxxx/'
        y/ 按照一对一关系把字符全部替换,不用接/g,不建议使用,通常替换用s/比较保险,它也具有s/的特性,可以用各种符合替换/
    

xargs 传参数

返回目录

    xargs -I {} ls {}   
        参数是i的大写字母作用是把输入内容按行放入后面命令的括号位置
        但是当ls输出一行多个内容的时候,它却是一个一个内容放入的,机制很奇怪,貌似是自动识别两个字符之间的关系,保险的办法是用-n1取代它
    $ls |xargs -n1 cat  
        按换行符制表符空格区分个数,一个一个输出给后面的命令
    假如a.txt b.txt c.txt结果如下
        root@user-PC:~/Downloads# ls|xargs -n1 cat
        aaa
        bbb
        ccc

其他一些基础命令

返回目录

想起啥写啥

    $pwd 显示当前路径
    $cd 进入目录,cd ~回家,cd ..向上,cd -后退
    $touch 更新一个文件的访问时间,也可以用来创建一个文件
    $mkdir 新建文件夹
    $chmod 修改文件权限
    $date 显示时间命令 可以用+后接%x指定格式
        date "+%Y-%m-%d %H:%M:%S"
        年-月-日 时:分:秒
    $wget 下载接网址
    $ls -l 列出详细信息 ls命令
    第一列是文件权限 第二列文件的话指硬连接数量(inode数)第二列是文件夹的话指文件夹下文件数量
    $ls -lt 按照更新时间排序
    $ls -lS 按照大小排序
    加上 rh是反向和humen
    即 ls -ltrh 按更新时间从小到大
        ls -lSrh 按大小从小到大
    首先使用 ls -i  /boot/group/group.conf查找出inode节点,然后使用:

    find / 2> /dev/null  -inum 131092(查找inode节点号)  根据切点信息 找出所有硬链接文件
    
    $tr命令
    tr [a-z] [A-Z]通常用来大小写转换

linux扩展

额外包管理系统

DNF(适用于fedora系,替代yum)

返回目录

yum install epel-release
yum install dnf

dnf repolist 
    显示可用的dnf软件库
dnf repolist all
    显示所有dnf软件库
dnf list 
    列出所有本机软件库中的可用软件包
dnf list installed 
    列出已安装的软件包
dnf list available
    列出所有可用软件包(包括本机没有的软件库)
dnf search xxx
    在软件库中搜索软件包名称
dnf provides /bin/bash 
    查找一个软件的提供者 例子中查找的是/bin/bash
dnf info xxx
    查看软件包详情
dnf install xxx
    安装
dnf update xxx
    升级软件
dnf check-update
    检查系统中安装的软件包是否有更新
dnf update
    升级所有可用软件包
dnf upgrade
    按照yum的说法,是只升级软件,不升级内核和配置
dnf remove xxx 
dnf erase xxx
    删除xxx
dnf autoremove 
    删除孤立无用软件包
dnf clean all 
    清除dnf缓存文件
dnf help clean
    获得dnf clean命令的帮助
dnf help
    获得所有dnf命令的帮助
dnf history
    相当于linux的history
dnf grouplist
    列出dnf的所有软件包组
dnf groupinstall 'xxxxx'
    安装软件包组
dnf groupupdate 'xxxxx'
    升级一个软件包组
dnf groupremove 'xxxxxx'
    删除一个软件包组
dnf distro-sync
    更新所有软件包到最新稳定版
dnf reinstall xxx
    重新安装xxx
dnf downgrade xxxx
    回滚版本

网络共享

返回目录

samba ftp nfs

samba

yum install samba samba-client / apt-get install samba ; apt-get install smbfs

/etc/samba/smbf
	pdbedit -L (查看系统中samba用户)
	smbpasswd -a user     (系统中现有用户,smb的密码和系统密码分别设置)
	smbpasswd -x user (删除一个samba用户)
    mkdir /home/share        (配置文件中[lhc]中path=后面的路径)
    chmod 777 /home/share
    mount -t cifs //192.168.1.201/lhc /mnt -o username=xxx,password=xxxx,port=12345
    #需要安装cifs-utils
    smb ports=1234 #指定服务端口
[最简配置]
    [global]
    [lhc]
    #共享目录
    path=/home/share
    #指定可以连接的用户用逗号分隔,或者用@user指定整个用户组还有%s不知道啥意思
    valid users=user,lhc
    #指定谁可以写入内容,其他用户只读
    write list=user
[扩展内容]据说有200多条选项,惹不起惹不起
    # See smb.conf.example for a more detailed config file or
    # read the smb.conf manpage.
    # Run 'testparm' to verify the config is correct after
    # you modified it.
    [global]
        #此设置中,security为必选项,其他不重要
    security = user #这里指定samba的安全等级。关于安全等级有四种:
        share:用户不需要账户及密码即可登录samba服务器
        user:由提供服务的samba服务器负责检查账户及密码(默认)
        server:检查账户及密码的工作由另一台windows或samba服务器负责
        domain:指定windows域控制服务器来验证用户的账户及密码。
    interfaces = 192.168.0.250
        #通过哪个网卡共享smb,可以是ip也可以是网卡名,例如 eth0
    workgroup = 2607
        #工作组设定,如果设定错,不影响通过\\ip连接smb,但是设定对了的话,你的队友可以在网上邻居里找到smb服务器。
    security = user
        #加密方式,
    passdb backend = smbpasswd
        #smb的账号密码存储在哪个数据库,理论上应该写tdbsam??
    #printing = cups
        #打印机类型,不知道咋设置
    #printcap name = cups
        #打印机配置文件位置,设置错不影响其他设置,一般设置成/etc/printcap
    #load printers = no
        #载入打印机
    #cups options = raw
        #raw设定可以允许你在其他机器上启用打印机驱动? 没看懂这是个什么锤子,反正打印机相关的
    netbios name = erliulingqi
        #设定一个smb服务器名字,不是hostname ,最多15字符,不要跟workgroup同名
    log file = /var/log/samba/%m.log
        #日志路径
    max log size = 50
        #单个日志大小,单位KB
    #[homes]
        #此设置中,path,valid users,writable(read only)为必填项,因为没有path和valid users 所以这个是废的,下面的[share]能用
    #comment = 2607
        #共享描述
    #valid users = %S, %D%w%S
    #browseable = No
    #read only = No
    #inherit acls = Yes
        #是否继承访问控制列表???
    [share]
    comment = share all
    path = /home/wow/
        #共享路径
    valid users = wow
        #可以登陆的用户名逗号分隔多个用户
    #public = yes
        #此选项只有[global]下的security = share才有效 是否共享,如果为是,则不用输入用户名密码 可以直接访问
    browseable = yes
        #网上邻居是否能看见你
    writable = yes 
        #如果writable = no 可以指定用户可写 write list = wow 像这样
        #是否允许写入,和read only同功能,比read only高一级,可以无视read only
    printable = no
        #是否开启打印机共享
    create mask = 0777
        #新建文件权限
    directory mask = 0777
        #新建目录权限
    force group = nogroup
        #哪些组的用户可以访问此共享,nogroup是所有人的意思
    force user = nobody
        #同上
    available = yes
        #激活此共享
    #----------------------
    #下面是打印机选项,老子没打印机,抱住自己哭::>_<::
    #-------------------------
    #[printers]
    #	comment = All Printers
    #	path = /var/tmp
    #	printable = Yes
    #	create mask = 0600
    #	browseable = No
    #
    #[print$]
    #	comment = Printer Drivers
    #	path = /var/lib/samba/drivers
    #	write list = @printadmin root
    #	force group = @printadmin
    #	create mask = 0664
    #	directory mask = 0775
ftp

yum install vsftpd / apt-get install vsftpd
(https://wwwblogs/acpp/archive/2010/02/08/1666054.html)

ftp简单配置

返回目录
ftp简单操作方法
ftp ip
连接后输入账号密码
get filename 下载
mget filename* 多个文件下载
cd dirname 进入目录
bye 退出
put/send 发送文件到服务器
!接命令,可以执行本地命令
部分系统前加l可执行本地命令 例如 lls lcd等

vsftp默认配置
#/etc/vsftpd.conf
***************************
最简配置
***************************
 #基本设置
     	listen=YES
     	listen_ipv6=NO
     	file_open_mode=0666     	
      	listen_port=21
    	pasv_enable=yes
    	pasv_max_port=25
    	pasv_min_port=23
    	connect_from_port_20=NO
     	write_enable=yes
#本地用户访问设置    	    	
     	local_enable=YES
     	local_umask=022
     	local_root=/opt/ftp
#匿名用户访问设置
anonymous_enable=yes
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_root=/opt/anonftp #此文件夹属性设置a-w否则可能会报错,在文件夹内设置777文件夹操作,原因是新版ftp不允许某些根目录有写权限。

#扩展内容,包括匿名访问,访问用户限制等
    	userlist_enable=no
    	dirmessage_enable=YES
    	use_localtime=YES


************************************
connect_from_port_20=no
#是否开启主动模式,除非局域网,否则no
file_open_mode=0666
#文件权限(配合掩码)0777有问题,我使用put上传文本后被清空,不清楚原因
local_umask=022
#写入内容权限掩码
local_enable=yes
#允许本地用户连接
write_enable=yes
#允许写入操作
listen=yes
#ipv4监听,还有一个listen_ipv6是ipv6版本,此两项默认都为no,必须开启一个才能正常启动服务
local_root=/opt/ftp
#进入后的目录,如不指定则为根目录,登录账号不可对此目录有写权限,否则不能连接。
listen_port=60021
#监听端口
pasv_enable=yes
pasv_max_port=60025
pasv_min_port=60023
#是否开启被动模式,被动模式数据端口范围
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#userlist_enable=YES/NO(NO)
#userlist_deny=YES/NO(YES)
userlist_file=/etc/vsftpd/user_list
#当userlist_enable打开时,本文件内用户不能访问ftp,当userlist_deny=no时,只有本文件内用户可以访问
#/etc/ftpusers 
chroot_local_user=yes
#是否限制用户活动范围为local_root目录



******************************
匿名设置
******************************
重要anonymous_enable=YES/NO(YES)
    #匿名访问,此用户用户名ftp ,密码空,访问路径/var/ftp/ 不可离开家目录,只读
重要anon_umask=022
	#匿名用户文件掩码
必须是write_enable=YES/NO(YES)
    #本地用户登陆后是否可写(跟匿名用户无关)
重要anon_mkdir_write_enable=YES/NO(NO)
    #匿名用户新建目录权限,前置条件是write_enable=YES,上级目录有写权限
重要anon_upload_enable=YES/NO(NO)
    #匿名用户上传文件权限(不包括文件夹),前置条件是write_enable=YES,上级目录有写权限
重要anon_other_write_enable=YES/NO(NO)
    #匿名用户修改和删除权限。前置条件是write_enable=YES,上级目录有写权限。
#这条和以上三条互相不冲突,即使没有上传权限也不影响改名和删除权限。
anon_root=/var/ftp
    #匿名登陆家目录,此目录设置权限为a-w否则某些版本ftp报错
chown_uploads=YES/NO(NO)
    #匿名用户上传文件(非目录)是否更改属主
no_anon_password=YES/NO(NO)
    #/etc/ftpusers 默认此文件下的用户不能登ftp
    #匿名登录是否显示密码框?
ftp_username=ftp
    #匿名登录默认用户名(默认是anonymous)
———————————————————————————————————————
anon_world_readable_only=YES/NO(YES)
    #匿名用户下载可阅读文档?那和匿名用户默认能下载有啥区别?
deny_email_enable=YES/NO(NO)
    #若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为email address。若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许进入。默认值为NO
anon_max_rate=0
    #最大传输速度,默认为0,不限速,单位是Byte,不可指定单位。

******************************
本地用户设置
******************************

local_enable=YES/NO(YES)
    #是否允许本地用户访问,访问路径为该用户家目录,可离开家目录访问该用户在系统中有权限访问的目录,并可根据系统权限进行上传下载。
chroot_local_user=YES/NO (NO)
    #是否拒绝用户访问家目录上级目录
chroot_list_enable=YES/NO (NO)
    #是否允许chroot权限的例外
chroot_list_file=/etc/vsftpd.chroot_list
    #chroot权限例外名单
write_enable=YES/NO(YES)
    #登录用户是否可写
local_umask=077
    #登录用户上传文件掩码,默认077建议022

    
*******************************
全局用户设置
*******************************

file_open_mode=0666
    #登录用户上传文件默认权限,由此减去local_umask或者anon_umask可得文件权限为600

**用户权限**
userlist_enable=YES/NO(NO)
    #访问名单启用
userlist_deny=YES/NO(YES)
    #列表拒绝,当yes时,列表内被拒绝;当no时列表外被拒绝。
userlist_file=/etc/vsftpd.user_list
    #userlist文件路径,内容每行为一个用户名,如果找不到文件,则拒绝所有连接。
/etc/ftpusers 
    #此文件内的用户名也不可登录ftp,且在配置文件中没有开关,更改之前ftpusers和userlist_file内容是一样的。

**数据连接**
ascii_upload_enable=YES/NO(NO)
ascii_download_enable=YES/NO(NO)
    #ftp默认使用二进制方式传递数据,启用此选项改为ascii方式。

local_max_rate=0
    #最大传输速度,默认为0,不限速,单位是Byte,不可指定单位。
accept_timeout=60
connect_timeout=60
data_connection_timeout=120
idle_session_timeout=300
    #简单理解为被动连接、主动连接、数据传输、无操作挂机超时时间,单位都是秒。
listen_port=21
    #默认监听端口21,可以改,外网映射端口千万别忘了映射这货。
connect_from_port_20=YES/NO(NO,有争议)
    #port模式下指定20为数据传输端口(主动模式)。
ftp_data_port=20
    #port模式下指定20为数据传输端口(主动模式),前置条件connect_form_port_20=YES。
pasv_enable=YES/NO(YES)
    #是否启用被动模式。
pasv_max_port=0
pasv_min_port=0
    #指定被动模式下端口范围,利用此功能可以映射到外网建立ftp连接。
listen=YES/NO(YES)
    #是否独立监听进程,尽量选是,因为部分功能只在独立进程下有效。
max_clients=0
    #最大连接数
max_per_ip=0
    #单个ip最大连接数
listen_address=(none)
    #默认监听所有ip,指定ip后只有该ip可以连接ftp。


**日志**
xferlog_enable= YES/NO(YES)
xferlog_file=/var/log/vsftpd.log
    #上传下载日志
log_ftp_protocol=YES|NO(NO)
    #启用此项所有ftp请求和响应都被记录。

**欢迎语**
dirmessage_enable=YES/NO(YES)
    #欢迎语设置,默认开启,当用户进入每个目录时都会检测是否存在.message这个文件,如果有,则在屏幕显示其内容作为欢迎语
message_file=.message
    #可以通过此选项更改欢迎语文件名
banner_file=/etc/vsftpd/banner
    #登录欢迎语,当登录ftp时显示该文件内容,文件可在此选项中指定路径,如果没找到该文件则不显示登录欢迎语。
ftpd_banner=Welcome to BOB's FTP server
    #同上一个选项一样,也是登录欢迎语,此选项为字符串形式欢迎语。

****************************************

****************************************
**手动设置**

-----------匿名用户设置------------------

chown_username=username(自己改名)
    #匿名用户上传文件(非目录)的属主名,前置条件chown_uploads=YES
anon_umask=077
    #匿名用户上传文件权限掩码,即077时上传文件权限为700
banned_email_file=/etc/vsftpd/banner_emails
    #email文件路径,前置条件deny_email_enable=YES
    
--------------本地用户设置---------------

local_root=/home/username
    #默认用户登录目录为自己的家目录,可用此项更改本地用户登录ftp目录
user_config_dir=/etc/vsftpd/userconf
    #单独定义用户配置,当一个用户登后,会到指定目录中找到与用户名相同的文件,读取其中配置,该文件内容会覆盖默认配置,但是部分选项不能定制,例如listen_address, banner_file, max_per_ip, max_clients, xferlog_file等。
    
nfs

返回目录

yum install nfs-utils 
yum install rpcbind
apt-get install nfs-kernel-server
apt-get install nfs-common

/etc/exports
末行加入
    /home/song/nfs *(rw,sync,no_root_squash,no_subtree_check)


新建目录/home/soong/nfs
$chmod 755 /home/song/nfs

$systemctl restart nfs

NFS v4.2以后不需要rpcbind支持
$systemctl enable rpcbind
$systemctl enable nfs / nfs-server
$firewall-cmd --zone=public --permanent --add-service=rpc-bind
$firewall-cmd --zone=public --permanent --add-service=mountd
$firewall-cmd --zone=public --permanent --add-service=nfs

docker

返回目录

        应对报错
        	ERROR: xxxx request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
https://www.daocloud.io/mirror
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

		应对TLS handshake timeout
/etc/docker/daemon.json
内容改为
 {"registry-mirrors": ["https://fzhifedh.mirror.aliyuncs"]}

安装docker
ubuntu
    wget -qO- https://get.docker/ | sh
     /etc/docker/daemon.json
    { "registry-mirrors": ["http://hub-mirror.c.163"]}
    systemctl start docker
centOS
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun/docker-ce/linux/centos/docker-ce.repo
    yum makecache fast
    yum -y install docker-ce
centos和ubuntu安装docker-compose
    sudo apt install -y python3 python3-pip
    sudo pip3 install -U pip
    sudo pip3 install docker-compose
 

docker-compose -f nextcloud.yml up -d 
    创建docker,参照nextcloud.yml配置文件
docker-compose stop
    停止容器
docker-compose start
    启动容器
docker-compose down
    删除容器和镜像
$docker image ls
$docker ps 查看运行中的容器
$docker ps -a 查看所有容器
$docker rm 删除容器(名字或者id)
$docker rmi 删除镜像(只能ID)
$docker save image > name.tar 保存镜像到一个tar包以供迁移到其他计算机
$docker load name.tar 把tar包载入到docker系统里变成一个镜像
$docker pull 网址 拉取一个docker镜像
$docker run -p 本地端口:容器端口 -it -e XXX="xxx"-v 本地路径:容器路径 --name 容器名 -d 镜像名 命令
    -p 端口映射 -it 交互模式运行容器 -e设置容器环境变量 --name 命名容器 -d后台运行 -v 路径映射
一般新建seafile用-p映射端口 --name 命名容器 -d 后台

$docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
    commit 提交 -m="描述内容" -a="作者" 容器ID(docker ps可得) 镜像名:版本 (镜像名必须小写)
$docker exec -it  容器名 命令(/bin/bash) 
    执行容器中的命令,一般执行/bin/bash 就行了
/var/lib/docker/containers/容器ID
    容器的配置文件包含两个json文件
docker update --restart=on-failure:2 容器ID
--restart参数有3个可选值 :
no,on-failure,always
docker 安装seafile

返回目录

$docker run -d --name seafile -v /opt/seafile-data:/shared -p 80:80 seafileltd/seafile:latest
$docker exec -it seafile bash
/opt/seafile/seafile-server-latest/reset-admin.sh增加管理员
访问本地80口即可连接
网页设置页面主要是是SERVICE_URL和FILE_SERVER_ROOT如果不是默认80都要带端口号
docker 安装nextcloud

返回目录

docker-compose.yml#关于nextcloud的配置文件

version: "3"
services:
    
    db:
        image: mariadb
        restart: always
        volumes:
            - /opt/docker/nextcloud/db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_PASSWORD=nextcloud
            - MYSQL_DATABASE=nextcloud
            - MYSQL_USER=nextcloud
                             
    app:  
        image: nextcloud
        restart: always
        ports:
            - 80:80
        links:
            - db    
        volumes:
            - /opt/docker/nextcloud/www:/var/www/html

在该配置文件下执行
docker-compose up -d 
    创建一个容器组实现nextcloud
xxxx/www/config/config.php 下加入其他访问方式
例如加入一个域名访问1-2607.xyz

 'trusted_domains' =>
  array (
 0 => '174.137.48.107:60004',
 1 => '1-2607.xyz:60004',
  ),

进入界面后输入账号密码,数据库选择mysql
数据库选项输入内容为
nextcloud
nextcloud
nextcloud
db

nat123

centos7安装nat123
yum install yum-utils
登录mono官网按照指示安装mono
本系统使用命令如下
rpm --import "https://keyserver.ubuntu/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"

su -c 'curl https://download.mono-project/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'

yum install mono-devel
cd /opt 
mkdir nat123
cd nat123
wget  http://www.nat123/down/nat123linux.tar.gz 
tar -zxvf nat123linux.tar.gz
mono /opt/nat123/nat123linux.sh
输入账号密码
登录成功后退出
mono /opt/nat123/nat123linux.sh service &
    此命令可以让nat123后台运行
登录nat123官网进行配置,动态域名解析还没研究明白.期待大神给我讲讲需要映射哪些端口,还是说把所有端口都映射出去.
locate

返回目录

yum install mlocate
apt install mlocate
locate [ -参数] <filename>
  -b, --basename         仅匹配路径名的基名称(我理解是只显示文件名匹配,不显示路径匹配)
  -c, --count            只输出找到的数量
  -d, --database DBPATH  使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
  -e, --existing         仅打印当前现有文件的条目
  -L, --follow           当文件存在时跟随蔓延的符号链接 (默认)
  -h, --help             显示帮助
  -i, --ignore-case      忽略大小写
  -l, --limit, -n LIMIT  LIMIT 限制为 LIMIT项目的输出 (或 计数)
  -m, --mmap             忽略向后兼容性-P, --nofollow, -H     当检查文件时不跟随蔓延的符号
  -0, --null             null 输出时以 NUL 分隔项目
  -S, --statistics       不搜索项目,显示有关每个已用数据库的统计信息
  -q, --quiet            安静模式,不会显示任何错误讯息
  -r, --regexp REGEXP    使用基本正则表达式
      --regex            使用扩展正则表达式
  -s, --stdio            忽略向后兼容性
  -V, --version          显示版本信息
  -w, --wholename        匹配整个路径名(默认)

tree

返回目录

tree -L 2 只看两级目录
tree -d 只看目录
tree -sh 查看目录和文件大小(human方式)

lamp/lnmp

返回目录

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

apache

返回目录

yum install httpd apt-get install apache2

配置文件
/etc/httpd/conf/httpd.conf
    ServerRoot	    服务目录
    ServerAdmin	    管理员邮箱
    User	        运行服务的用户
    Group   	    运行服务的用户组
    ServerName	    网站服务器的域名
    DocumentRoot	网站数据目录
    Listen	        监听的IP地址与端口号
    DirectoryIndex	默认的索引页页面
    ErrorLog	    错误日志文件
    CustomLog	    访问日志文件
    Timeout	        网页超时时间,默认为300秒
网站目录
/var/www/html
访问日志
/var/log/httpd/access_log
错误日志
/var/log/httpd/error_log
nginx

返回目录

wget http://downloads.sourceforge/project/pcre/pcre/8.35/pcre-8.35.tar.gz

wget http://nginx/download/nginx-1.6.2.tar.gz

./configure
make && makeinstall

mysql

返回目录

yum install mariadb mariadb-server mariadb-libs mariadb-devel

apt-get install mysql-server mysql-client

apt-get install mariadb-server mariadb-client

php

返回目录

apt-get install php7.1 php7.1-common php7.1-fpm php7.1-dev

apt-get install php7.1-mbstring php7.1-xml

本文标签: 笔头Linux