我的 OpenWrt 路由器已为我的Public
Samba 共享配置了一些基本参数/etc/samba/smb.conf
。我现在需要向此共享添加一些额外的参数,因此我想将它们附加到Public
配置的共享部分的最后一行。
我已经弄清楚如何在该部分之后附加文本,但这将其放在第一行:
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
sed -i '/\[Public\]/a hello world' /tmp/sed.sh
输出
[Public]
hello world <--
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
但是,我想在该部分的最后一行之后放置文本:
所需输出
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
hello world <--
另外,有没有一种方法可以附加一个heredoc(EOF),这样我就可以添加多行,而不必将所有代码放入一行?
整个配置
[global]
netbios name = OpenWrt-AP1
interfaces = br-lan
server string = Samba on OpenWRT
unix charset = UTF-8
workgroup = WORKGROUP
## This global parameter allows the Samba admin to limit what interfaces on a machine will serve SMB requests.
bind interfaces only = yes
## time for inactive connections to-be closed in minutes
deadtime = 15
## disable core dumps
enable core files = no
## set security (auto, user, domain, ads)
security = user
## This parameter controls whether a remote client is allowed or required to use SMB encryption.
## It has different effects depending on whether the connection uses SMB1 or SMB2 and newer:
## If the connection uses SMB1, then this option controls the use of a Samba-specific extension to the SMB protocol introduced in Samba 3.2 that makes use of the Unix extensions.
## If the connection uses SMB2 or newer, then this option controls the use of the SMB-level encryption that is supported in SMB version 3.0 and above and available in Windows 8 and newer.
## (default/auto,desired,required,off)
#smb encrypt = default
## set invalid users
invalid users = root
## map unknow users to guest
map to guest = Bad User
## allow client access to accounts that have null passwords.
null passwords = yes
## The old plaintext passdb backend. Some Samba features will not work if this passdb backend is used. (NOTE: enabled for size reasons)
## (tdbsam,smbpasswd,ldapsam)
passdb backend = smbpasswd
## Set location of smbpasswd ('smbd -b' will show default compiled location)
#smb passwd file = /etc/samba/smbpasswd
## LAN (IPTOS_LOWDELAY TCP_NODELAY) WAN (IPTOS_THROUGHPUT) WiFi (SO_KEEPALIVE) try&error for buffer sizes (SO_RCVBUF=65536 SO_SNDBUF=65536)
socket options = IPTOS_LOWDELAY TCP_NODELAY
## If this integer parameter is set to a non-zero value, Samba will read from files asynchronously when the request size is bigger than this value.
## Note that it happens only for non-chained and non-chaining reads and when not using write cache.
## The only reasonable values for this parameter are 0 (no async I/O) and 1 (always do async I/O).
## (1/0)
#aio read size = 0
#aio write size = 0
## If Samba has been built with asynchronous I/O support, Samba will not wait until write requests are finished before returning the result to the client for files listed in this parameter.
## Instead, Samba will immediately return that the write request has been finished successfully, no matter if the operation will succeed or not.
## This might speed up clients without aio support, but is really dangerous, because data could be lost and files could be damaged.
#aio write behind = /*.tmp/
## lower CPU useage if supported and aio is disabled (aio read size = 0 ; aio write size = 0)
## is this still broken? issue is from 2019 (NOTE: see https://bugzilla.samba.org/show_bug.cgi?id=14095 )
## (no, yes)
#use sendfile = yes
## samba will behave as previous versions of Samba would and will fail the lock request immediately if the lock range cannot be obtained.
#blocking locks = No
## disable loading of all printcap printers by default (iprint, cups, lpstat)
load printers = No
printcap name = /dev/null
## Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's.
disable spoolss = yes
## This parameters controls how printer status information is interpreted on your system.
## (BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ)
printing = bsd
## Disable that nmbd is acting as a WINS server for unknow netbios names
#dns proxy = No
## win/unix user mapping backend
#idmap config * : backend = tdb
## Allows the server name that is advertised through MDNS to be set to the hostname rather than the Samba NETBIOS name.
## This allows an administrator to make Samba registered MDNS records match the case of the hostname rather than being in all capitals.
## (netbios, mdns)
mdns name = mdns
## Clients that only support netbios won't be able to see your samba server when netbios support is disabled.
#disable netbios = Yes
## Setting this value to no will cause nmbd never to become a local master browser.
#local master = no
## (auto, yes) If this is set to yes, on startup, nmbd will force an election, and it will have a slight advantage in winning the election. It is recommended that this parameter is used in conjunction with domain master = yes, so that nmbd can guarantee becoming a domain master.
#preferred master = yes
## (445 139) Specifies which ports the server should listen on for SMB traffic.
## 139 is netbios/nmbd
#smb ports = 445 139
## This is a list of files and directories that are neither visible nor accessible.
## Each entry in the list must be separated by a '/', which allows spaces to be included in the entry. '*' and '?' can be used to specify multiple files or directories as in DOS wildcards.
veto files = /Thumbs.db/.DS_Store/._.DS_Store/.apdisk/
## If a directory that is to be deleted contains nothing but veto files this deletion will fail unless you also set the delete veto files parameter to yes.
delete veto files = yes
################ Filesystem and creation rules ################
## reported filesystem type (NTFS,Samba,FAT)
#fstype = FAT
## Allows a user who has write access to the file (by whatever means, including an ACL permission) to modify the permissions (including ACL) on it.
#dos filemode = Yes
## file/dir creating rules
#create mask = 0666
#directory mask = 0777
#force group = root
#force user = root
#inherit owner = windows and unix
################################################################
######### Dynamic written config options #########
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
[Multimedia]
path = /srv/multimedia
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
答案1
将 gnu sed 与 heredoc 结合使用,其中包含要在配置文件中附加的行。
add=$(sed -e 's:^:\t:;s:\\:&&:g;$!s:$:\\:' <<!
---> Hello, world! <---
---> ok tata by by <---
!
)
sed -e '
/^\[Public]/,/^$/!b
/./{
$a\
'"$add"'
}
//!i\
'"$add"'
' /etc/samba/smb.conf
- 缩进级别是制表符。
答案2
我会用awk
这个
awk '/^\[Public\]/ {toggle=1} toggle && $0=="" {toggle=0; printf "\t%s\n", "hello world <--"} 1' /tmp/sed
当它匹配时,[Public]
设置切换,然后在第一个零长度行重置切换并插入所需的文本。
awk '
/^\[Public\]/ {toggle=1} # or: $0=="[Public]"
toggle && $0=="" {toggle=0; printf "\t%s\n", "hello world <--"}
1
' /tmp/sed
答案3
使用 的一个小技巧awk
,假设下一个块在此块之后开始,因此用作\n[
记录分隔符。由于最后一个记录分隔符删除最后一行head
。
awk 'BEGIN {RS="\n\\[";ORS="\n["}
/Block 1/ {$0 = $0"\toption3 = value3\n"} {print}' 1 |
head -n-2
内菲莱
other config
#and a comment
[Block 1]
option1 = value1
option2 = value2
[Block 2]
option1 = value1
option2 = value2
输出
other config
#and a comment
[Block 1]
option1 = value1
option2 = value2
option3 = value3
[Block 2]
option1 = value1
option2 = value2