「Linux」从上车到翻车
记录Linux各发行版配置及使用技巧。
安装
Ubuntu
-
切换软件源
-
安装Rime输入法
-
【如果需要】安装语言包
-
【如果需要】安装Ibus,并启用
sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 im-config -s ibus # 注销或重启计算机以应用更改
-
sudo apt-get install ibus-rime # 注销或重启计算机以应用更改
-
设置ibus框架
ibus-setup # 添加需要的输入法
-
配置
Text Entry
18.04 LTS在
Settings
$\to$Region & Language
$\to$Input Sources
下,無需安裝Text Entry
- System Settings -> Text Entry
- 左下角添加需要的输入法
- 配置快捷键
- 切换输入法
ctrl
+ ` `
-
-
修改快捷键
- 打開資源管理器
- 搜索
shortcuts
$\to$launchers
$\to$Home folder
[PS: For 18.04 LTS] - 搜索
shortcuts
For 16.04 LTS
Name : Archives
Command : nautilus
...
- 搜索
- 打開資源管理器
-
时间同步
-
缘起
Windows 10
与Ubuntu
双系统在对待硬件时间的方式不同1 -
解决
# 安装`ntpdate` sudo apt-get install ntpdate # 校准时间 sudo ntpdate time.yirami.xyz # 更新时间到硬件 sudo hwclock --localtime --systohc
-
引申
- Linux时钟设置
# 判断硬件时钟是否设置为本地时区 timedatectl | grep local # 将硬件时钟设置为本地时区 timedatectl set-local-rtc 1 # 将硬件时钟设置为协调世界时(UTC) timedatectl set-local-rtc 0 # 开始自动时间同步到远程NTP服务器 timedatectl set-ntp true # 禁用NTP时间同步 timedatectl set-ntp false
- Linux
ntpd
和ntpdate
的区别ntpd
平滑同步ntpdate
立刻同步
- Linux时钟设置
-
-
配置科学上网
-
美化
-
cairo-dock
-
macbuntu
-
命令
Linux
- 文件权限
ll # 查看文件权限,小写LL
chmod 777 xxx # 修改权限
chmod +x xxx # 赋予可执行权限
chown -R user:group xxx # 更改目录所有者和所属组
- 管道符号
|
前面(命令)的输出作为后面(命令)的输入
-
任務管理
&
命令后加上
&
可以使腳本進入後臺執行ctrl
+z
将一个正在前台执行的命令放到后台,并且处于暂停状态。
fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(命令编号非进程号)将选中的命令调出。
bg
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
jobs
查看当前终端有多少在后台运行的命令
nohup
在你退出帐户/关闭终端之后继续运行相应的进程
关闭终端后,在另一个终端使用jobs
已经无法看到后台跑得程序了,此时可以利用ps
查看ps -aux | grep "xxx.sh" #a: 显示所有程序 #u: 以用户为主的格式来显示 #x: 显示所有程序,不以终端机来区分
-
添加腳本到開機啓動
- 新建腳本
#!/bin/sh ### BEGIN INIT INFO # Provides: startfile # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the brook service # Description: Used to Turn over the GFW to access the Internet. ### END INIT INFO nohup <command> & # back run and don't killed when terminal exit or log out.
- 修改可執行權限
# solution 1: chmod +x xxx.sh # solution 2: sudo chmod 755 xxx.sh
- 移動到啓動腳本目錄
sudo mv xxx.sh /etc/init.d/
- 更新自啓動目錄
sudo update-rc.d xxx.sh defaults 90 #90爲啓動優先級,數值越大,啓動越晚
- 新建腳本
-
lib
-
ldconfig | 查找库
ldconfig -p | grep xxx
-
ldd | 查看库依赖
ldd [-r] xxx
-
-
ip | ip 命令来自 iproute2 套件,用于取代 net-tools 套件(包含ifconfig)
# 查询ip ip addr show
-
mount.cifs
-
df (disk free) | 查看磁盘分区剩余
-
update-alternatives | 软件版本切换
update-alternatives --list python
update-alternatives --install /usr/bin/python python /usr/... 1
update-alternatives --install /usr
- screen 远程会话管理
# 创建新会话
screen -S yirami
# 会话分离
ctrl+a +d
# 会话列表
screen -ls
# 会话恢复
screen -r [id]
- ffmpeg 多媒体处理
- 图片转视频
ffmpeg -pattern_type glob -i './*.jpeg' -vcodec libx264 -r 20 output.h264
ffmpeg -i ./camera_1_%9d.jpeg -vcodec libx264 -r 20 output.mp4
ffmpeg -pattern_type glob -i './camera_1_*[0-9].*[0-9].jpeg' -vcodec libx264 -r 20 output.mp4
- 视频重编码/压缩
ffmpeg -i vin.mp4 -vcodec libx265 vout.mp4
ffmpeg -i vin.mp4 -c:v libx265 -crf 32 -c:a copy vout.mp4
# crf 在[0-51]之间选取,0为无损,通常18~28较合理
- 裁剪视频
ffmpeg -ss 00:00:00 -t 00:00:30 -accurate_seek -i test.mp4 -vcodec copy -acodec copy -avoid_negative_ts 1 output.mp4
# -ss 指定从什么时间开始
# -t 指定需要截取多长时间
# -i 指定输入文件
- 视频拼接
ffmpeg -f concat -i list.txt -c copy concat.mp4
- 调整音量
# 查看音量
ffmpeg -i vin.mp4 -filter_complex volumedetect -c:v copy -f null /dev/null
# 调整音量
ffmpeg -i vin.mp4 -af volume=+30dB -vcodec copy -y vout.mp4
# -af 创建由filtergraph指定的过滤器图,并使用它来过滤流
# -y 覆盖输出文件且不询问
- 定时执行任务
reference to blog
-
at
# install apt install -y at # daemon service atd start # or systemctl start atd # 检查开机启动 chkconfig --list | grep atd # or systemctl list-unit-files | grep atd # 设置开机启动 chkconfig --level 235 atd on # or systemctl enable atd # 交互式创建任务 at now +2 minutes # 2分钟后执行 # 查询任务 atq # 删除任务 at -d [task number]
-
crontab
# 列出当前用户的任务 crontab -l # 列出指定用户的任务 crontab -l -u yirami_debian # 编辑用户任务列表 crontab -e # 删除定时任务 crontab -r
- 另外,对于某些可能错过执行的任务,可以参考补充命令
anacron
- 另外,对于某些可能错过执行的任务,可以参考补充命令
-
systemd
-
相比上述命令,该工具支持精确到秒的任务
-
config systemd.service
touch /usr/lib/systemd/system/you_shell_start.service [Unit] Description=do something [Service] Type=simple ExecStart=path_to_your_shell
-
config systemd.timer
touch /usr/lib/systemd/system/you_shell_start.timer [Timer] # Time to wait after enable this unit OnActiveSec=60 # Time between running each consecutive time OnUnitActiveSec=30 Unit=you_shell_start.service [Install] WantedBy=multi-user.target
-
start
systemctl enable you_shell_start.timer systemctl start you_shell_start.timer
-
查看状态
systemctl status you_shell_start.timer systemctl status you_shell_start
-
停用
systemctl disable you_shell_start.timer systemctl stop you_shell_start.timer
-
Debian
- shell
Debian docker 中默认使用
dash
rm /bin/sh && ln -s /bin/bash /bin/sh
- iptables
# 查看规则
iptables -L
# 从文件恢复规则
sudo iptables-restore < file
- rc.local
# 确认发行版具备rc.local.service
cat /lib/systemd/system/rc.local.service
# 查看服务是否是默认关闭
systemctl status rc-local
# 手动添加 `/etc/rc.local`
cat <<EOF >/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
EOF
# 赋予执行权限
chmod +x /etc/rc.local
# 启动服务
systemctl start rc-local
# 确认服务运行
systemctl status rc-local
# 添加开机启动命令到 `exit 0` 之前
Ubuntu
- apt-get
apt-get install ...
- apt-file
use
apt-file
to look for a particular file and don't know which package provides it
apt-file search mount.cifs
- ufw
sudo apt install ufw
# reset all (禁止任意入站,允许任意出站)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# allow ssh
sudo ufw allow ssh
# allow web
sudo ufw allow http
sudo ufw allow https
# 或
sudo ufw allow 80
sudo ufw allow 443
# enable
sudo ufw enable
# check
sudo ufw status
CentOS
CentOS 7
- semanage
yum provides semanage
yum -y install policycoreutils-python
# 如果提示`Could not open kernel policy /etc/selinux/targeted/active/policy.kern for reading.`错误
yum install selinux-policy-targeted
防火墙
iptables
/ Debian Buster(10) /
配置模板
*filter
# accept loopback
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# accept established
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# icmp
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# other input
#-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 32722 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# output
-A OUTPUT -j ACCEPT
# deny other
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
# -A OUTPUT -p udp -j REJECT --reject-with icmp-port-unreachable
COMMIT
持久化
1. backup iptables to file
# 1
iptables-save | tee /etc/iptables.conf
# sudo iptables-save | sudo tee /etc/iptables.conf
2. restore the file
# 1.
vim /etc/rc.local
## and then insert lines for loading iptables rules from this file
iptables-restore < /etc/iptables.conf
# 2. edit after saving the iptable's rules
vim /etc/network/interfaces
## and then insert a line in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.up.rules
Reference
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。