常用
常用参数定义
- -R : 目录递归
- -C : 设置工作目录
环境变量
- 环境变量永久新增方法:文件追加行,如export path=$path:/path1:/pahtN
- 于/etc/profile文件:对所有用户生效(永久的)
- 用户目录下的.bash_profile文件,对单一用户生效(永久的)
- source /etc/profile // 重新加载和生效文件
- echo $HOME // 显示环境变量HOME
- export HELLO="Hello!" // 临时设置一个新的环境变量hello
- env // 显示所有的环境变量
- readonly TEST // 将环境变量TEST设为只读
软件安装卸载
安装方式 | CentOS | Ubuntu |
---|---|---|
离线 | rpm文件安装 | 使用dpkg安装卸载deb文件 |
在线 | yum | apt-get |
- ls -tl /var/lib/dpkg/info/*.list | head -n 10 // 查看最近安装的10个deb
alien package_name.rpm // RPM转成DEB
CentOS
- 命令:telnet软件的安装
rpm -qa | grep telnet // 是否已安装telnet yum -y install telnet-server yum -y install telnet
- CentOS软件包安装
- 执行yum命令报except KeyboardInterrupt:nano /usr/bin/yum,改成python2
数据源配置:CentOS7配置网易163的yum源
cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.backup wget http://mirrors.163.com/.help/CentOS7-Base-163.repo yum clean all yum makecache
- yum命令详解
- 命令:telnet软件的安装
Ubuntu
- 命令
apt-get install xxxxx // 安装 apt-get remove xxxxx // 卸载 apt-get autoremove // 卸载 apt-cache search gcc // 搜索包gcc apt list –installed // 显示已安装软件包 dpkg-query -l // 显示已安装软件包,结果同apt list apt-get install aptitude // 软件包安装情况的软件
- Ubuntu离线安装软件包
- apt-get安装出现dpkg status database is lock解决,安装失败会导致其他软件不能使用,比如MySQL
rm /var/lib/dpkg/lock dpkg --configure -a
- 大量dpkg依赖错误
- 命令
离线安装
系统信息
- lsb_release -a // Ubuntu系统版本
- last reboot // 重启记录
- Linux上如何查看物理CPU个数,核数,线程数
- cat /proc/cpuinfo |grep MHz|uniq // 查看CPU内核频率
- sudo dmidecode -s processor-version // 查看CPU型号
文本匹配
- cat debug.txt | grep abc
- cat debug.txt | grep "[FE]" // []是正则表达式,需加\。字符串需加双引号
- find . | xargs grep -ri "keyword" // 当前目录下的所有文件中是否含有某个字符串(keyword)
- find . | xargs grep -ri "keyword" -l // 当前目录下的所有文件中是否含有某个字符串(keyword),只打印出文件名
文件属性
- linux修改文件所属用户和组
- chmod -R 766 Document // 修改目录Document的权限。命令详细
- chmod -R ug+x Document // 目录Document的所有文件都加上执行权限(user + owner)
- chown -R www-data Document // -R 所有者 路径。修改目录Document的所有者成www-data
- chgrp -R www-data Document // -R 所在组 路径。修改目录Document的所在组成www-data
文件和目录
- mkdir -p /d1/d2 // 自动创建多层
- mv/cp * ../ // 当前目录所有内容(不含目录的层级)移动/拷贝到上一级目录
- mv/cp dir1/* ./ // dir1目录所有内容(不含dir1层级)移动/拷贝到当前目录。如dir1里有个dir2目录,则当前目录下有个dir2目录,没有dir1目录
- mv/cp dir1 ./ // dir1目录移动/拷贝到当前目录。即当前目录下有个dir1目录
- ln -s src_dir dest_dir // 建立软连接,从dest_dir链接到src_dir,如cd dest_dir
- 提取文件名和目录名
- 统计文件夹下文件的个数: sudo ls -lR | grep "^-" | wc -l
- 统计文件夹下文件夹的个数: sudo ls -lR | grep "^d" | wc -l
文件
- find示例
- find / -name xyz // 指定文件全路径查找(xyz)
- find / -name xyz // 指定文件全路径模糊查找(xyz)
- find . -type f -size +100M // 查找大文件(100M)
- find ${PATH} -type f -mtime +15 -exec rm {} \; // 删除目录下非最近15天的文件(不含目录),-mmin是分钟
- find ${PATH} -name "*.log" | xargs rm -f// 删除目录下匹配的文件
- echo > filePath // 清空文件内容
- cat srcfile >> destfile // 将文件内容追加到另一个文件末尾
- rm -rf方式删除文件后,通过df -h会发现磁盘空间并没有释放
- 原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > file,当然你也可以通过rm -rf删除后重启宿主进程
内存
- sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' // 清除不用的缓存
- top // 查看内存使用情况,输入shift + m可根据内存使用量进行排序
- top -p 1111 // 查看特定进程号的内存(1111)
- ps -aux | sort -k4nr | head -5 // 使用内存最多的5个进程
进程
- nohup 命令 >/dev/null & // 后台运行命令
- ps -ef | grep mongo | awk '{print $2}' | xargs kill -9 // kill名称对应的进程(mongo)
- // kill端口对应的进程(27017),推荐第一种,第二种在Ubuntu下会把“PID”取出来导致kill失败
- kill -9 $(sudo lsof -t -i:27017)
- lsof -i :27017 | awk '{print $2}' | xargs kill -9
进程查询
- ps -ef | grep defunct // 僵尸进程
- ps -ef | grep 进程号 // 查看进程对应的程序
- ps -ef | grep java // 查看匹配名称的进程(java)
- ps -ef | grep nginx | wc -l // 查看运行的进程总数
- ps -fu csvn // 查看特定进程(csvn)
- lsof -i :9000 // 查看端口执行的进程(9000)
网络
- ifconfig | grep inet // ip地址
传输
- wget {url} // 公网下载
- SSH传输传输文件
- scp -r localFilePath account@remoteIP:remoteFilePath // 上传
- scp -r account@localIP:remoteFilePath localFilePath // 下载
- 注意,如目标路径后面是"/*",则全部文件拷贝到目标路径根目录。
- sync -av --exclude excludePath /data/src/ /data/dest // 本地同步,排除文件夹(/data/src/excludePath)
- 远程同步
- rsync -avz --delete /src_path account@host:/dest_path // 同步删除了的文件,确保两个目录一致
- rsync -avz --remove-source-files backup.tar /tmp/backups/ // 同步后自动删除源文件,场景是每次都是个新文件
系统自启动配置
- 方法1:systemctl enable mysql
- 方法2:在文件/etc/rc.local加入命令,例如:
cd /var/www/project/ && /usr/bin/java -jar project.jar >/dev/null 2>&1 & sh cmd.sh /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf & service elasticsearch restart service iptables stop
- chkconfig命令
- Ubuntu下使用sysv-rc-conf管理服务
远程免密码登录设置
步骤:
- 本地:生成公共密钥,用默认值。ssh-keygen -t rsa
- 本地:公共密钥上传到远程。scp ~/.ssh/id_rsa.pub [email protected]:/root/.ssh/id_rsa.136.pub
- 远程:将上传的本地公共密钥加到远程授权列表。cat ~/.ssh/id_rsa.136.pub>>~/.ssh/authorized_keys
其中2和3步可合成一步本地操作:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys" // 同时创建目录.ssh
自动输入密码设置
- 安装expect
- 脚本
expect -c " spawn scp ${src_user}@${src_host}:${src_path} expect \"password:\" send \"${pwd}\r\" expect eof
定时任务
- 资料
- 安装:yum -y install crontab
- 编辑:crontab -e
30 01 * * * sh /etc/cmd/backup.sys.sh // 每天1点30分备份 */10 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1 // 每隔10分钟同步时间
- 重启:service crond restart
- 查看执行结果:tail -f /var/log/cron
- 调试方法
- 所有结果写到文件。如 sh xxx.sh &>/opt/debug.log
- 出错结果写到文件。如 sh xxx.sh > /opt/debug.log 2>&1
备份操作
- 被备份机
- 远程免密码登录设置(远程是备份机)
- 编写备份脚本,将其设置成定时任务。备份内容如配置文件,运营文件,数据库等
- 备份机:创建备份目录
安全
- openssl x509 -in mycert.crt -out mycert.pem -outform PEM // ssl的crt生成pem
杀毒
- ClamAV
- 镜像网络
DatabaseMirror db.us.clamav.net DatabaseMirror db.de.clamav.net DatabaseMirror db.jp.clamav.net
压缩解压
- 解压:
- 解压到当前目录:tar -xzvf file.tar.gz
- 解压到指定目录:tar -xzvf package.tar.gz -C /var/ // C是命令当前的工作目录,相当于解压到的目录
zip解压:unzip file.zip // https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
压缩目录/etc/code/
- 绝对地址:tar -czvf file.tar /etc/code/
- 相对地址:tar -czvf file.tar -C /etc/ code/ // C是命令当前的工作目录
- 压缩文件:tar -cvf dest.tar.gz srcFilePath
CURL命令
windows和linux回车不一样的处理(LF/CRLF)
- dos2unix/unix2dos:find . -type f -exec dos2unix {} \;
FTP服务
sudo adduser data
sudo mkdir -p /var/ftp/upload
sudo chown root:root /var/ftp
sudo chmod -R 755 /var/ftp
sudo chown data:data /var/ftp/upload
sudo nano /etc/ssh/sshd_config
在文件最后添加:
Match User data
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/ftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sudo systemctl restart sshd
用户
- 用户和组
- 扩展用户管理
- sudo su // 用户切换到root。Ubuntu中root用户和user用户的相互切换
- 用户启用sudo:需将账号加入到/etc/sudoers,user1 ALL=(ALL)NOPASSWD:ALL
- usermod -a -G groupA user1 // 用户user1添加到组groupA
硬盘和nfs
- df // 硬盘容量
- du -sh path // 某一指定路径容量
- du /home --max-depth=1 -h // 显示第一层目录的空间容量
- du . --max-depth=1 | sort -nr // 顺序排序,显示空间容量
- df -ih // 索引文件情况
- lsof | grep deleted // 显示已删除文件
- fdisk -l // 查看系统磁盘设备信息
- mount /dev/sdb1 /dir1 // 将U盘挂载到dir1
- echo '/dev/vdb /data ext4 defaults 0 0' >> /etc/fstab // 永久挂载vdb(格式是ext4)到路径/data/
- showmount -e IP 显示此IP地址(不填是本机)通过NFS分享出来的目录
- resize2fs /dev/vda // 扩容
nano
- ^C // 显示光标位置信息
- ctrl+w,ctrl-T // 到指定行
系统操作
- shutdown -h now // 关机
- reboot // 重启
审计log
/var/log/auth.log*
调试
监控
- watch -n 1 -d 'ps -ef | grep java' // 每秒钟执行一次命令,定时执行
ssh
- sh -p port user@host 如:ssh -p 2222 [email protected]
diff
- diff -Naur dir1 dir2 // linux 比较两个文件夹不同 (diff命令, md5列表)
- vimdiff
补丁
- diff的输出文件被称为补丁(patch)。patch的作用则是将补丁应用到相应文件(夹)上
- 补丁(patch)的制作与应用%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8)
xargs
sha256和md5
find path -type f -not \( -name '.*' \) -print0 | xargs -0 sha256sum | sort > path.sign