用户
useradd -d /home/[user] -m [user] # 添加用户,并创建用户目录
adduser [user] # 添加用户
userdel -r [user] # 删除用户
usermod -G [group] [user] # 把用户从其他组中去掉,只属于该组
usermod -a -G [group] [user] #把用户添加至该组,之前所属组不影响
权限
# root用户下打开 /etc/sudoers 文件
# [user] ALL=NOPASSWD: ALL 某用户不需要密码可以执行sudo
# %[group] ALL=NOPASSWD: ALL 某组的所有用户不需要密码可执行sudo
#
# -rw------- (600) 只有拥有者有读写权限
# -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限
# -rwx------ (700) 只有拥有者有读、写、执行权限
# -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限
# -rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限
# -rw-rw-rw- (666) 所有用户都有文件读、写权限
# -rwxrwxrwx (777) 所有用户都有读、写、执行权限
chown -R [user]:[group] [filePath] # 更改文件拥有者及组
文件
tar --exclude=*.mp3 -zcvf file.tar.gz [filePath] # 过滤文件并压缩
tar -xzvf file.tar.gz -C [targetPath] # 解压缩至指定目录
ls -lR|grep "^-"|wc -l # 统计当前文件夹下文件的个数,包括子文件夹
ls -lR|grep "^d"|wc -l # 统计当前文件夹下目录的个数,包括子文件夹
ls -l |grep "^-"|wc -l # 统计当前文件夹下文件的个数
ls -l |grep "^d"|wc -l # 统计当前文件夹下目录的个数
ls -1 *.ts | sort -n | xargs cat > merged.ts # 按顺序合并文件到merged.ts
find . -type d -empty -delete # 删除空目录
find -type d -empty | xargs rmdir -p # 删除当前目录下所有空文件夹
find . -type f | grep '\./\.' | xargs rm -rf. # 删除以 ./.开头的文件
find temp/*201902* -not -name *20190214* | xargs rm -rf # 删除除某种条件下的文件
find . -type f -name *-compose.yml -exec sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' {} \; # 去除开始与结尾空行 保留中间部分
find . -type f -name *-compose.yml -exec sed -i -e '$a\[plantext]' {} \; # 文本末尾批量追加
find . -type f -name 'init_config.sh' -exec sh -c 'f={};mv $f $(dirname $f)/init.sh' \; # 批量修改文件
find . -name "[file]" -exec grep -l '[hello]' {} \; | xargs rm -rf # 过滤文件+过滤内容+删除
find . -name "-*" -exec sh -c 'f={}; mv $f $(echo $f | sed 's/-//g')' \; # 正则修改文件名称
find . -type f -name values.yaml -size 0c -exec rm -rf {} \; # 批量删除空文件
find . -type f -exec sh -c 'f={};if echo $f | grep -q src ; then sed -i "s|com.learning|com.czy.learning|g" $f; fi;' \; # 修改匹配路径下的文件内容
find . -maxdepth 1 -type f -exec md5sum {} \; | sort | uniq -D -w 33 # md5 文件查重
find -name '*.gradle' -exec sed -i -e 's|compile|implementation|g' -e 's|testCompile|testImplementation|g' -e 's|runtime|implementation|g' {} \;
sed -i '1,nd' [file] # 删除前n行
sed -i -e 's/^INSERT INTO public\./INSERT INTO /' [file] # 正则替换
cat nginx.conf | grep -oP 'upstream \K\w.*?(?={)' | awk '{printf $1 ";"}' # 正则提取upsteam地址
# \$\{(\S+?)\} --------> \${\L$1} # 正则匹配括号内内容 并转为大小写(idea)
磁盘
du -hd0 . # 查看当前目录下总空间大小
du -hd1 # 查看当前目录及各目录的总空间大小
fdisk /dev/sdb n 初始化分区
mkfs.ext4 /dev/sdb1 格式化系统
Mount
- Disk
# get device name
fdisk -l
# get device uuid
blkid /dev/sdb1
# disk in /etc/fstab
/dev/disk/by-uuid/<uuid> /volume1 ext4 defaults 0 0
- NFS
# show nfs
showmount -e [host]
# nfs in /etc/fstab
[host]:/volume1/ubuntu /volume1 nfs defaults 0 0
# nfs command line
sudo mount -t nfs <nfs_server>:/<nfs_path> /<local_path>
- SMB
# smb in /etc/fstab
//<host>/public/ubun12 /volume2 cifs user=<username>,pass=<password>,gid=1000,uid=1000 0 0
# smb command line
sudo mount -t cifs //<smb_server>/<smb_path> /<local_path> -o "user=<username>,password=<password>,gid=1000,uid=1000"
系统
# set hostname
hostnamectl set-hostname --static [hostname]
ssh
scp -r [user]@[host]:/home/[user]/*[!.mp3] d:/upload/ # 从服务器下载文件
scp -r [local] [user]@[host]:[remote] # 本地上传文件至服务器
ssh [user]@[host] 'bash -s' < test.sh init # ssh运行加参数的本地脚本
ssh [user]@[host] < test.sh # ssh直接运行.sh脚本
ssh [user]@[host] 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub # 将本地公钥id_rsa.pub传给远程主机
rsync
# list remote module
rsync rsync://<host>
# -e "ssh -i <private_key_file>"
# push
rsync --progress -avogXH <local_path> rsync://<user>@<host>:<remote_path>
# pull
rsync --progress -avogXH rsync://<user>@<host>:<remote_path> <local_path>
docker
docker pull mysql:5.7
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
docker exec -it pwc-mysql /usr/bin/bash (win10下 前面加上 wintpy)
docker stop $(docker ps -a -q) # 停止容器
docker rm $(docker ps -a -q) # 删除容器
docker image rm $(docker image ls -a -q) # 删除镜像
docker volume rm $(docker volume ls -q) # 删除数据卷
docker network rm $(docker network ls -q) # 删除 network
docker rm $(docker ps -q -f status=exited) # 删除 exited 容器
docker restart $(docker ps -aq --filter 'exited=0') # 重启 exited 容器
docker stop $(docker ps -a -q) && docker system prune --all --force # 全部清理
docker rm -f $(docker ps -a -q) && docker volume prune -y # 清空所有容器及数据卷
docker rm $(docker ps -qa --no-trunc --filter "status=exited") # 清空exited的容器
docker image prune -a # 清空未使用的镜像
docker ps -a --filter volume= # 根据volume name获取container
docker inspect <container_name> -f '{{ .LogPath }}' | xargs sudo cat # 查看容器日志文件
docker inspect <container_name> -f '{{ .LogPath }}' | xargs sudo tee # 清空容器日志文件
mac
# homebrew
export ALL_PROXY=socks5://127.0.0.1:1080
# mongo
brew install libpq
# mysql
brew install mysql-client