Linux常用命令

日常命令

cd .. // 返回上一级目录
cd - // 返回上一次目录
cd或cd ~ // 返回家目录
cd / // 进入根目录

pwd // 显示当前目录
ls // 显示当前目录文件
ls localrepo/ // 显示指定目录的文件
ll // 查看目录文件的的详细信息
la // 查看全部包括隐藏的目录文件
tree // 查看当前目录文件树
tree mydir // 查看指定目录的文件树
touch hello.py // 创建空文件

mkdir mydir // 创建文件夹
mkdir -p a/b/c // 创建层级目录
mkdir -p a/{b,c}/{d,e} // 同一级创建多个文件夹

cp hello.py ~/hello2.py // 拷贝文件
cp hello.py -i hello2.py // 拷贝文件,如果有同名文件询问是否覆盖
cp hello.py -f hello2.py // 拷贝文件,如果有同名文件强制覆盖
cp hello.py -n hello2.py // 拷贝文件,如果有同名文件不覆盖

mv hello2.py hellocp.py // 重命名文件
mv hello.py ~/Desktop // 移动文件
rm hellocp.py // 删除文件
rm -rf localrepo/ // 递归删除目录

find ~/Desktop/ -name '*.py' // 在指定目录中查找文件
whereis python // 查找可执行程序
which python // 查看当前使用的是哪个目录中的python

ln -s /usr/bin/python ./mypylink // 创建可执行程序的软链接
alias rrm='rm -rf' // 给命令起别名,需要root权限(不建议使用)
history // 查看命令历史
clear // 清屏(快捷键Ctrl+l)

命令速查

rm --help // 查看rm命令帮助
man rm // 查看rm命令的手册解释
info rm // 查看rm命令详细信息

更多查找

find ~/ -name '*.py' -exec rm {} ;    查找家目录下所有的py文件并删除,{}与exec结合匹配所有文件
find ~/ -name '*.py' -exec chown wife {} ;        查找家目录下所有py文件并将所有权转让给wife用户
find ~/ -name '*.py' -exec cat {} ;> record.txt    查找文件并将全部内容拼接并写入文件中
find ~/ -name '*.py' -exec cp {} mydir ;        查找文件并拷贝到指定目录

grep 'def.*' a.py    在a.py中查找指定内容
grep 'def.*' a.py b.py c.py    在多个文件中寻找指定内容
grep -v 'def.*' a.py    在a.py中查找指定内容以外的内容
grep -i "HELLO" a.py    在a.py中查找指定内容并忽略大小写
grep -E "[1-9]+" a.py    在a.py中查找正则表达式匹配的内容(匹配1到多个数字)
grep -F "[1-9]+" a.py    在a.py中查找纯文本内容(严格匹配字符串"[1-9]+")
grep -e "def.*" -e "class.*" a.py    在a.py中查找多个内容
grep "text" ./ -r -n    在当前目录下递归查找内容

系统管理

poweroff    关机
reboot    重启
shutdown -h 12:00    定时关机
shutdown -h now        立刻关机
shutdown -c            取消定时关机

#结合1,查看所有CPU平均负载/每个CPU的具体负载
#结合M/P/T,按内存占用/CPU占用/运行时间的降序,查看进程信息
top                    显示所有系统任务

free -m             查看内存占用,以M为单位
uname -a            打印操作系统信息
uptime -p            查看系统运行时间
echo $PATH            查看环境变量
export PATH=$PATH:/home/sirouyang/Desktop/    追加环境变量
lsof | head -n 10    查看进程打开的文件(一切皆文件,数据文件、网络连接、硬件设备)
lscpu                查看CPU信息

time lsof        统计命令执行时间
cal/date            查看日历和时间
date +%y-%m-%d-%H-%M-%S    格式化地查看时间

# 0-6:0停机-1单用户安全模式-2多用户安全模式-3多用户网络模式-4系统保留级别-5图形界面-6重启
runlevel        显示当前运行级别
init 6            切换运行级别

文本命令

cat hello.py // 查看文件
gedit hello.py // 使用gedit查看文件
head -n 10 hello.py // 查看前10行
tail -n 10 hello.py // 查看后10行
less hello.py // 一次查看少量内容,PageUp和PageDown键翻页
vim hello.py // 使用vim打开文件

管道与重定向

sort hello.py | uniq -c // 排序后统计次数
sort hello.py | uniq -d // 排序后找出重复的行
cat /proc/cpuinfo | grep -c processor // 显示CPU核心数
echo 'newline' > hello.py // 将结果写入文件(覆盖)
echo 'newline' >> hello.py // 将结果追加到文件
cat < ~/proc/cpuinfo //将指定的文件作为cat的输入

压缩和解压

tar -cvf /home/abc.tar /home/abc    只打包,不压缩(c=创建压缩包,v=打印信息,f=指定文件名)
tar -zcvf /home/abc.tar.gz /home/abc    打包,并用gzip压缩
tar -jcvf /home/abc.tar.bz2 /home/abc    打包,并用bzip2压缩

tar -xvf abc.tar 解压普通tar包(x=解压缩)
tar -zxvf abc.tar.gz 解压gz压缩包
tar -jxvf abc.tar.bz2 解压bz2压缩包

zip -r xxx.zip abc/* fuck/* temp/* 递归压缩多个文件夹到xxx.zip
unzip xxx.zip #解压zip压缩包

磁盘管理

df -h /                    查看磁盘使用情况
sudo du -h ~            查看用户目录的磁盘使用情况
du -sh                    当前目录的总体占用情况
du abc.tar.gz abc.tar    查看文件和目录的磁盘占用
dd if=/dev/zero of=temp.txt bs=1K count=1024    写入一个充满0的文件,每块1K,共1024块,总大小1M
time dd if=/dev/zero of=temp.txt bs=1M count=1024    测试写入1G文件的时间(以此衡量磁盘的读写效率)

登录日志

last 查看用户近期登陆情况
last -2 最近登陆的两个用户
last -2 root 查看root用户最近两次登陆情况

id    显示用户及其群组信息
groups    查看当前用户所加入的组
whoami    显示当前用户名称

用户与权限

groups // 查看所属的工作组
whoami // 显示当前用户名称

sudo useradd -m wife // 新建wife用户,-m=自动创建家目录
sudo useradd -d /home/myson -m son //创建son用户,指定其家目录为/home/myson
sudo useradd -g guests -G root,adm -m him //创建him用户,属于group组,其次也属于adm,root组
sudo useradd -G guests,sudo -m -s /bin/bash mywife // 新增一个用户,-m=自动创建家目录,-s指定bash
userdel rose 删除rose 账号
userdel -r rose 删除用户及相关目录下的文件(/etc/passwd, /etc/shadow, /etc/group等)
usermod -s /bin/ksh -d /home/z –g developer him // 修改him用户的shell、家目录、所属组等信息
sudo passwd // 修改自己的密码
sudo passwd mywife // 修改mywife的密码
sudo su mywife // 切换用户
sudo su // 切换到root用户

sudo groupadd guests // 添加guests组
sudo groupadd -g 101 group1 //添加组group1,识别号为101
groupdel group1 //删除组
groupmod –g 10000 -n group3 group2 //将组group2的标识号改为10000,组名修改为group3
gpasswd -a u1 g1 将u1 加入到 g1 组
gpasswd -d u1 g1 将u1 退出 g1 组
gpasswd -A u1 g1 将g1 组的管理员指派给u1

chmod 421 hello.py // 设置自己、用户组、其他人的权限分别为只读、只写、只执行
chmod a+r,u+wx,g+x,o-wx hello.py // 详细修改全部用户、拥有者、用户组、其他人的权限

网络管理

sudo apt install net-tools 安装网络工具
ifconfig // 查看网卡状态
ping 192.168.59.129    // 检查网络是否连通
wget "http://download.redis.io/releases/redis-4.0.9.tar.gz" // 下载redis
sudo apt install traceroute  安装路径追踪工具
traceroute -m 100 www.sina.com        追踪路由信息,最大100跳

netstat -t        列出所有TCP端口
netstat -r        显示路由表
netstat -i        显示接口(网卡)列表
netstat -tpnl    查看已连接的TCP端口和程序名
netstat -anp | grep 3306 -c        查看MySQL的连接数

远程登录

//安装并启动ssh服务
sudo apt install openssh-server 安装openssh-server
sudo ps -ef | grep ssh 查看SSH服务是否启动,还可以netstat -tl | grep 22或systemctl status ssh
sudo systemctl start ssh 如果没有启动则启动SSH服务

//访问远程主机(前提:对方开启了ssh服务,且你知道对方的密码,或对方持有你的ssh公钥)
ssh root@127.0.0.1 访问远程主机
exit 退出远程访问

//执行远程拷贝
scp -r sirouyang@192.168.158.129:/abc /home/wife/Desktop/        从远程主机拷贝内容到本地
scp -r /abc sirouyang@192.168.158.129:/home/sirouyang/Desktop/    从本地拷贝内容弄到远程主机(对方没有本地的公钥时需要密码认证)

# ssh公钥交换过程:远程主机持有本地的公钥时,ssh以及scp可以免密执行
ssh-keygen -t rsa    生成ssh秘钥对
scp ~/.ssh/id_rsa.pub sirouyang@192.168.158.129:/home/sirouyang/.ssh/    上传公钥给远程主机
ssh sirouyang@192.168.158.129    ssh登录远程主机
cat Desktop/id_rsa.pub >> ~/.ssh/authorized_keys    操作远程主机添加公钥认证(今后远程对本地ssh免密)

//一站式让远程持有自己的公钥
ssh-copy-id sirouyang@192.168.158.128    让远程持有自己的公钥(对方不必添加公钥到authorized_keys)

进程管理

ps -ef // 查看所有进程(包括登录的其它用户的进程)
ps -aux //查看所有进程(仅当前用户的进程)
ps -ef | grep redis    // 查找redis进程
kill -9 77157    // 强行杀死指定pid的进程
kill -15 77157    // 终止指定进程

服务管理

#chkconfig服务管理
apt-get install sysv-rc-conf    安装chkconfig服务
cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig    重命名一下可执行程序
chkconfig --list            查看所有服务的开机启动状态
chkconfig --list mysqld        查看mysql的开机启动状态
chkconfig mysqld on            设置mysql开机启动
chkconfig mysqld off        禁止mysql开机启动
sudo apt install firewalld    安装firewalld
firewall-cmd --state        查看防火墙状态
    
#原生的service服务管理
service mysql start            启动mysql
service mysql stop            停止mysql
service mysql restart        重启mysql
/etc/init.d/mysql start        启动mysql
/etc/init.d/mysql stop        停止mysql
/etc/init.d/mysql restart    重启mysql

#systemctl服务管理(推荐方式)
systemctl status firewalld        查看服务状态
systemctl start firewalld         启动服务
systemctl stop firewalld         停止服务
systemctl restart firewalld     重启服务
systemctl is-enabled firewalld     查看是否开机启动
systemctl enable firewalld        设置服务开机自启
systemctl disable firewalld     禁止服务开机自启